Кратко
- Исходный HTML содержит разметку, которую сервер отправляет до запуска JavaScript.
- Отрисованный DOM показывает результат после выполнения скриптов и запросов к данным.
- Критичны исчезновение основного текста, H1, canonical, robots, ссылок и структурированных данных.
- Расхождение само по себе не всегда опасно, если поисковый робот получает нужные элементы.
- Проверку лучше проводить при одинаковых условиях загрузки и фиксировать результат по каждому элементу.
Индексация JavaScript зависит от различий между исходным HTML и отрисованной страницей
Исходный HTML и отрисованная страница отвечают на разные вопросы. Первый показывает, что сервер отправил браузеру. Вторая демонстрирует, что получилось после выполнения JavaScript, загрузки данных и изменения DOM.
Представь страницу товара. В исходном HTML может находиться только контейнер:
<div id="product"></div>
Название, описание, цена и ссылки подгружаются скриптом позже. Пользователь открывает страницу и видит полноценный материал. Но поисковому роботу ещё нужно получить ресурсы, выполнить код, дождаться ответа API и корректно собрать итоговую структуру.
Отсюда и возникает главная задача проверки: сравнить не внешний вид страницы, а набор элементов, доступных поисковой системе на разных этапах.
Исходный HTML обычно проверяют через просмотр кода ответа сервера или загрузку страницы без выполнения JavaScript. Отрисованный DOM смотрят после завершения сценариев в браузере или инструменте, который умеет выполнять JavaScript. Это не одно и то же, что вкладка «Исходный код» и не одно и то же, что визуальный экран.
Какие расхождения могут повлиять на индексацию?
- В исходном HTML нет основного текста, а после отрисовки он появляется только при успешном ответе API.
- В отрисованном DOM исчезает или меняется H1.
- Значение title формируется скриптом с ошибкой или заменяется пустой строкой.
- canonical указывает на другой адрес после выполнения кода.
- robots получает запрещающее значение.
- Навигационные ссылки добавляются только скриптом, который не отрабатывает.
- Структурированные данные присутствуют до рендера, но удаляются или становятся некорректными после него.
- Контент виден в браузере только после действия пользователя, например клика, прокрутки или раскрытия блока.
Не каждое отличие означает проблему. Счётчик, дата обновления интерфейса или состояние меню могут меняться без ущерба для поисковой видимости. Критично другое: исчезновение смыслового содержания, изменение адреса канонической страницы или потеря ссылок, по которым робот должен находить другие документы.
Перед анализом сформулируй задачу одним предложением. Например: «Нужно понять, доступен ли основной текст статьи, H1 и внутренние ссылки после выполнения JavaScript без действий пользователя». Такая формулировка не даёт проверке расползтись в общий аудит всего сайта.
Чек-лист перед публикацией страницы: как проверить индексируемость, canonical и sitemap→Как подготовить сравнение исходного HTML и отрисованной страницы
Сравнение будет полезным только тогда, когда обе версии страницы получены в сопоставимых условиях. Иначе можно принять разницу в настройках за проблему JavaScript.
Подготовь две версии одного URL:
- Исходный HTML, который возвращает сервер до выполнения скриптов.
- Отрисованный DOM после загрузки JavaScript, стилей, изображений и данных из API.
Адрес должен быть одинаковым. Проверь протокол, поддомен, параметры запроса и редиректы. Если одна проверка выполняется для страницы без параметров, а вторая для URL с параметром, сравнение уже нельзя считать чистым.
Условия тоже нужно зафиксировать. Используй один и тот же вариант страницы, одинаковую авторизацию, язык, регион и состояние cookie, если они влияют на выдачу контента. Отдельно запиши, был ли включён JavaScript, дождался ли инструмент сетевых запросов и какие ресурсы завершились ошибкой.
Полезно сохранять не только текст, но и сам результат проверки. Подойдут снимок HTML, копия DOM и список сетевых ошибок. Это поможет понять, повторяется ли расхождение или возникло случайно.
Базовый чек-лист выглядит так:
- основной текст страницы;
- title и meta description;
- H1 и другие значимые заголовки;
- meta robots;
- canonical;
- ссылки и их адреса;
- структурированные данные;
- атрибуты изображения, если они связаны с содержанием;
- видимые сообщения об ошибках;
- блоки, зависящие от API.
Не стоит начинать со сравнения каждого класса и обработчика клика. Такие детали важны для интерфейса, но не всегда связаны с индексацией. Сначала проверь элементы, которые объясняют поисковой системе тему, адрес и структуру документа.
Если отрисовка занимает время, зафиксируй момент, на котором считаешь страницу готовой. Одного визуального появления шапки недостаточно. Основной контент мог ещё не загрузиться.
Почему Google не индексирует сайт: причины и способы решения в 2025→Пошаговое сравнение текста, заголовков и метаданных в HTML
Сначала сравни смысловой контент. Не количество символов, а наличие тех фрагментов, ради которых создана страница.
Найди в исходном HTML основной текст, заголовок H1, подзаголовки и важные подписи. Затем проверь их в отрисованном DOM. Если текст отсутствует до рендера, это ещё не автоматическая ошибка. Проблема появляется, когда после выполнения JavaScript он также не появился, появился частично или зависит от нестабильного запроса.
Для H1 важны несколько признаков:
- заголовок существует в обеих версиях;
- текст не заменяется на общий шаблон;
- на странице нет нескольких случайно созданных H1;
- нужный заголовок не находится внутри блока, который не формируется без пользовательского действия.
Проверь и основной текст. Бывает, что сервер отдаёт короткий служебный блок, а содержание статьи появляется после запроса к API. В другой ситуации исходный HTML уже содержит текст, но скрипт очищает контейнер и не вставляет новый контент из-за ошибки. Визуально это может выглядеть как пустая страница или как карточка без описания.
Дальше переходи к метаданным.
Title нужно сравнить по фактическому значению, а не по тому, что отображается на вкладке браузера в конкретный момент. Проверь, не становится ли заголовок пустым после рендера, не меняется ли адрес страницы и не появляется ли одинаковый title на разных URL.
Meta description не всегда является условием попадания страницы в индекс, но её расхождение показывает, насколько предсказуемо работает генерация метаданных. Если description формируется JavaScript, проверь итоговый DOM и исходный ответ отдельно.
С robots нужна особая аккуратность. Убедись, что после отрисовки не появляется запрет на индексацию или обработку ссылок. Проверь также серверные заголовки, если управление доступом к странице вынесено из HTML. Одно только наличие корректного meta robots в исходном коде не исключает другой сигнал на уровне ответа.
Canonical сравнивай буквально:
- есть ли элемент в обеих версиях;
- одинаково ли записан адрес;
- совпадает ли протокол и домен;
- не меняется ли canonical после выполнения кода;
- не появляется ли несколько противоречивых элементов.
Структурированные данные проверяй как отдельный блок. Сравни JSON-LD до и после рендера, если он используется. Ищи исчезнувшие поля, повреждённый JSON, неправильный тип сущности и данные, которые появляются только после неустойчивого запроса. Внешне страница может выглядеть нормально, а разметка уже будет неполной.
Результат удобно фиксировать в формате «элемент, исходный HTML, отрисованный DOM, оценка, причина». Таблица для этого не обязательна. Можно вести список:
- H1: есть до рендера, есть после, расхождений нет.
- Основной текст: отсутствует до рендера, появляется после API, требуется проверить стабильность ответа.
- Canonical: одинаковый в обеих версиях, риск не обнаружен.
- JSON-LD: после рендера повреждён, нужна проверка генератора.
Такой формат отделяет факт от предположения. Это важно: пустой контейнер в исходном HTML является наблюдением, а не доказательством того, что страница не попадёт в индекс.
Сравнение ссылок и структуры отрисованной страницы
Ссылки, созданные JavaScript, нужно проверять не глазами, а в DOM и сетевой структуре документа. Кнопка, которая визуально ведёт на раздел, ещё не обязательно является ссылкой для поискового робота.
Начни с элементов a. У каждой важной ссылки проверь наличие адреса в href, его абсолютность или корректность относительного пути, статус целевой страницы и доступность ссылки без клика. Если переход выполняется через обработчик события, а полноценного href нет, такая навигация может быть менее надёжной для обнаружения страниц.
Сравни списки ссылок в двух версиях:
- какие адреса присутствуют в исходном HTML;
- какие добавились после рендера;
- какие исчезли;
- какие изменили путь или параметры;
- какие ведут на ошибочные или недоступные URL.
Особое внимание удели ссылкам на важные разделы, карточки, категории и соседние материалы. Если они появляются только после запроса к API, проверь, что ответ стабильно приходит и скрипт действительно вставляет элементы в DOM. При ошибке API пользователь может увидеть пустой блок, а робот получить страницу без навигационного продолжения.
Структура документа тоже подлежит сравнению. Посмотри, где находятся основные блоки:
- контейнер основного содержания;
- заголовки;
- навигация;
- списки;
- изображения;
- хлебные крошки;
- блоки связанных материалов.
Отрисованный DOM может отличаться от исходного HTML совершенно законно. Например, скрипт добавляет класс, раскрывает меню или меняет порядок элементов интерфейса. Риск появляется тогда, когда после рендера основной текст оказывается вне ожидаемого контейнера, дублируется, скрывается или замещается служебным сообщением.
Для проверки ссылок полезно разделить адреса на две группы. Первая, это ссылки, которые уже отданы сервером. Вторая, ссылки, созданные после выполнения JavaScript. Если важный URL есть только во второй группе, выясни, можно ли сформировать его сразу в HTML или обеспечить устойчивую отрисовку.
Итог оформляй так, чтобы другой специалист мог повторить проверку. Для каждого расхождения укажи:
- URL страницы;
- проверяемый элемент;
- состояние до рендера;
- состояние после рендера;
- сетевой запрос или скрипт, от которого зависит результат;
- предполагаемую причину;
- следующий шаг диагностики.
Не пиши «робот не видит ссылку», если проверен только браузер. Точнее сказать: «ссылка отсутствует в исходном HTML» или «ссылка появляется после выполнения JavaScript». Это разные наблюдения и разные способы исправления.
Как ошибки JavaScript, API и ресурсов меняют отрисованную страницу
Отрисовка может завершиться без явной ошибки в интерфейсе. Пользователь увидит каркас страницы, а важный контент так и не появится. Поэтому сравнение HTML и DOM нужно дополнять проверкой сетевых запросов и сообщений JavaScript.
Первый сценарий, отказ API. Страница отправляет запрос за текстом, ценой, списком товаров или данными статьи. Сервер API отвечает ошибкой, слишком долго не отвечает или возвращает структуру, которую скрипт не умеет обработать. В результате в DOM появляется пустой контейнер, заглушка либо частичный контент.
Проверь:
- был ли запрос отправлен;
- какой ответ получен;
- пришли ли обязательные поля;
- сработала ли обработка ошибки;
- появился ли текст в DOM;
- не заменился ли контент после повторной попытки.
Если основной материал существует только в API, устойчивость этого запроса становится частью проверки индексации. Нельзя оценивать страницу по успешному единичному ответу, если при другом состоянии кэша или сети она отдаёт пустой результат.
Второй сценарий, блокировка ресурсов. JavaScript-файл может не загрузиться из-за неправильного пути, запрета доступа, ошибки сервера или политики безопасности. Отдельно проверь CSS. Стили обычно не содержат сам текст, но могут скрывать элементы, менять порядок блоков и мешать оценке того, что действительно отображается.
Ошибки CORS особенно заметны, когда HTML и API находятся на разных источниках. Браузер блокирует запрос, скрипт получает исключение, а страница остаётся без данных. В журнале консоли это может выглядеть как вторичная ошибка, но для отрисованного результата последствия прямые.
Третий сценарий, холодный кэш. Первый запрос получает один результат, повторный, другой. На это могут влиять порядок загрузки, задержка API, состояние CDN или асинхронная инициализация компонентов. Если DOM меняется между проверками, зафиксируй оба варианта и найди условие, которое запускает расхождение.
Не ограничивайся скриншотом. Скриншот показывает внешний вид, но не объясняет, есть ли текст в DOM, какой canonical выбран и какие ссылки доступны. Нужны исходный HTML, итоговая разметка, консольные ошибки и сетевые события.
Для JavaScript-страниц полезно отдельно проверять сценарий без пользовательского клика. Если описание, ссылки или текст появляются только после раскрытия блока, прокрутки или нажатия, поисковый робот может получить другой результат. Это не означает автоматическую потерю индексации, но требует отдельной проверки доступности контента без интерактивного действия.
Как интерпретировать расхождения и исправлять проблемы индексации JavaScript
Не каждое отличие между исходным HTML и DOM требует переделки. Исправлять нужно расхождения, которые меняют смысл страницы, её адрес, доступность текста или способность робота находить связанные документы.
Критичными обычно считаются такие ситуации:
- основной текст отсутствует после отрисовки;
- H1 исчезает или становится общим для разных страниц;
- canonical меняется на неверный адрес;
- robots получает запрет, которого не должно быть;
- ссылки на важные страницы не формируются;
- JSON-LD становится невалидным;
- контент зависит от нестабильного API;
- JavaScript-ошибка оставляет страницу в незавершённом состоянии.
Выбор исправления зависит от причины. Если содержание известно на стороне сервера, его можно отдавать в исходном HTML. Для страниц, которые редко меняются, подходит предварительная генерация. Если данные должны загружаться динамически, проверь, что запрос доступен, ответ стабилен, а итоговый DOM содержит нужный текст и ссылки.
Не пытайся маскировать проблему фиктивной разметкой. Если Google Indexing API обсуждается как способ ускорить обнаружение, помни его ограничение: официально он предназначен для реальных страниц JobPosting и страниц прямых трансляций BroadcastEvent внутри VideoObject. Для обычных статей, товаров, ссылок и других URL такой API не является поддерживаемым способом индексации.
Финальный алгоритм контроля можно свести к последовательности:
Для Google и Яндекса итог может оцениваться не полностью одинаково, поэтому проверяй результат в инструментах конкретной поисковой системы. Google Search Console является панелью диагностики, а Google Search Central, это документация. Не смешивай эти понятия, когда фиксируешь источник наблюдения.
Последний шаг простой: для каждой важной страницы ответь, есть ли в итоговом DOM основной текст, корректный адрес, понятная структура и ссылки на продолжение. Если хотя бы один ответ отрицательный, сначала ищи причину в запросах, скриптах и серверной генерации, а уже потом делай вывод об индексации.
FAQ: вопросы об индексации JavaScript
Чем исходный HTML отличается от отрисованной страницы при индексации JavaScript?
Исходный HTML, это ответ сервера до выполнения скриптов. Отрисованный DOM, это результат после запуска JavaScript, загрузки данных и изменений структуры документа. В нём могут появиться текст, ссылки, метаданные и блоки, которых не было в первоначальном ответе.
Для проверки сравнивай не только внешний вид, но и фактические элементы документа. Если нужный контент есть после рендера стабильно, это одна ситуация. Если он появляется только после клика или иногда исчезает из-за ошибки API, нужна отдельная диагностика.
Какие элементы нужно сравнивать в первую очередь: текст, H1, canonical, robots или ссылки?
Начни с основного текста и H1, затем проверь canonical и robots. Эти элементы помогают понять тему страницы, её основной адрес и допустимость индексации. После этого сравни ссылки и структурированные данные.
Порядок можно менять, если проблема уже известна. Например, при подозрении на неправильную каноникализацию сначала проверь canonical и серверные заголовки. Если страницы не находят друг друга, первыми анализируй ссылки, которые создаются JavaScript.
Что делать, если основной контент появляется только после запроса к API?
Сначала проверь, стабильно ли выполняется запрос и приходит ли полный ответ без пользовательского действия. Затем сравни итоговый DOM при успешном и ошибочном ответе API. Если при сбое страница остаётся пустой, причина индексации может быть именно в цепочке загрузки данных.
Когда контент известен до отправки страницы, практичнее отдавать хотя бы основной текст и ключевые ссылки в исходном HTML. Если динамическая загрузка обязательна, контролируй доступность API, обработку ошибок и наличие текста после отрисовки.
Всегда ли расхождение между HTML и DOM означает проблему с индексацией?
Нет. JavaScript закономерно меняет меню, классы, счётчики, интерактивные элементы и часть визуальной структуры. Сам факт отличия ничего не доказывает.
Проблема появляется, если меняются смысловые элементы: исчезает текст, ломается H1, появляется запрещающий robots, меняется canonical или пропадают важные ссылки. Оценивай не количество различий, а их влияние на содержание и обнаружение страницы.
Проверь одну приоритетную страницу по полному алгоритму: исходный HTML, отрисованный DOM, ссылки, метаданные, ошибки API и повторная загрузка. Такой контроль быстро показывает, где заканчивается обычная динамика интерфейса и начинается риск для индексации.
