Что делать, если оглавление не обновляется при динамической загрузке контента? Причина в том, что стандартный скрипт строит список заголовков один раз при открытии страницы и не видит новые блоки, подгруженные через AJAX. Нужно переинициализировать оглавление в колбэке после загрузки данных или назначить MutationObserver, который перестраивает список при появлении новых заголовков h2–h3 в контейнере.
Проще всего вызвать функцию построения оглавления повторно сразу после вставки контента, а перед этим очистить старые пункты, иначе появятся дубли. Обязательно проверьте, что якорные ссылки пересчитываются на уже существующие id заголовков. Если наблюдатель следит за всем документом, а не за конкретным контейнером, это создаст лишнюю нагрузку: ограничьте область наблюдения. Также учитывайте, что элементы, скрытые через display: none, не будут корректно попадать в якорные переходы.