Первичный контент
H1, описание и основная сущность страницы доступны сразу после обычной загрузки.
Практическое SEO · JavaScript
Современный сайт может отдавать почти пустой HTML и собирать весь интерфейс уже в браузере. Для пользователя это может работать нормально, а поисковый робот столкнётся с задержкой, ошибкой API, недоступной ссылкой или контентом, который появляется только после действия. Проверяем не наличие JavaScript, а доступность важного содержания и маршрутов.
Основа
Поисковая система умеет обрабатывать JavaScript, но динамическая страница добавляет ещё один этап между получением HTML и появлением полезного содержимого. На этом этапе может не ответить API, не загрузиться bundle, возникнуть ошибка выполнения или не сработать действие, необходимое для показа текста.
Яндекс Вебмастер позволяет управлять рендерингом JavaScript-страниц. По умолчанию робот самостоятельно решает, выполнять ли JavaScript, оценивая полноту и качество содержимого с ним и без него.
Индексирование страниц с JavaScript в Яндекс Вебмастере.
Шаг 1
Исходный HTML показывает, что сервер отдаёт до выполнения JavaScript. Итоговый DOM — что появилось после загрузки и работы скриптов. Если заголовок, основной текст, ссылки на категории и карточки существуют только во втором варианте, сайт сильнее зависит от успешного рендеринга.
Для статичных и SSR-проектов различие обычно небольшое. Для SPA исходный документ может содержать только контейнер приложения и ссылки на bundle. Это не означает автоматическую проблему, но требует отдельной проверки того, что робот действительно получает итоговое содержание.
| Элемент | В исходном HTML | После JS | Что проверяем |
|---|---|---|---|
| H1 и основной текст | Есть / нет | Есть / нет | Не пропадает ли содержимое при ошибке JS |
| Внутренние ссылки | Есть / нет | Есть / нет | Доступны ли URL роботу как настоящие ссылки |
| Title и description | Есть / временные | Итоговые | Какая версия попадает в индекс |
| Canonical | Правильный / шаблонный | Меняется JS | Нет ли конфликта между версиями |
Шаг 2
Текст, характеристики или список товаров могут загружаться только после прокрутки, клика, выбора вкладки или выполнения цепочки запросов. Для второстепенного интерфейса это нормально, но основное содержание страницы лучше делать доступным без обязательного пользовательского действия.
Особенно внимательно проверяем lazy-loaded текстовые блоки, вкладки характеристик, бесконечную прокрутку и каталоги, где первые товары появляются только после API-запроса.
H1, описание и основная сущность страницы доступны сразу после обычной загрузки.
Скрытый интерфейс не должен делать важный текст недоступным до сложного действия.
У контента ниже первого набора должен оставаться понятный способ обнаружения по URL или ссылкам.
При сбое внешнего сервиса страница не должна превращаться в пустой документ без объяснения.
Шаг 3
Для важной внутренней навигации надёжнее использовать обычные элементы <a href="...">. Если переход реализован только через onclick, обработчик JavaScript или элемент div, робот может не интерпретировать его как обычную ссылку.
SPA-маршрутизация может оставаться клиентской, но URL должен быть реальным, открываться напрямую и отдавать корректную страницу при первом запросе, а не только после перехода из уже запущенного приложения.
Шаг 4
Некоторые frontend-фреймворки меняют метаданные уже после загрузки приложения. Если в исходном HTML у всех страниц один шаблонный Title или canonical, а правильные значения появляются позднее через JavaScript, итог зависит от успешного рендеринга.
На важных посадочных надёжнее, когда критические SEO-сигналы формируются на сервере или в пререндеренной версии. Особенно это важно для canonical: неправильный адрес в исходном документе может конфликтовать с итоговым DOM и внутренней структурой.
Шаг 5
Server-Side Rendering формирует готовый HTML на сервере, а пререндеринг заранее создаёт HTML-версию страницы. В обоих случаях робот получает больше полезного содержимого до выполнения клиентского JavaScript.
Это не означает, что любой SPA нужно срочно переписывать. Сначала проверяем фактическую индексацию и рендеринг. Если важный контент уже стабильно доступен роботу, архитектурную переделку оцениваем по реальным рискам и стоимости.
В актуальном Яндекс Вебмастере есть отдельная настройка рендеринга JavaScript. Для сайтов с SSR или пререндерингом Яндекс предлагает возможность запретить дополнительный JS-рендеринг, если он не нужен и создаёт лишнюю нагрузку.
Шаг 6
Даже небольшой frontend может зависеть от нескольких API. Если один запрос медленный или иногда возвращает ошибку, часть страницы появляется с задержкой либо не появляется вообще. Пользователь может нажать «обновить», а робот зафиксирует именно неудачный вариант.
Интерфейс ждёт внешний сервис и долго остаётся пустым.
Вместо содержимого показывается loader или пустой контейнер.
Важный блок появляется заметно позже события DOMContentLoaded.
Серверный HTML есть, но клиентский код ломает часть уже показанного интерфейса.
Яндекс описывает расширенные настройки для страниц, где контент загружается с задержкой, но использовать их стоит только после понимания архитектуры и реальной причины задержки.
Шаг 7
В Вебмастере можно сравнивать обработку страниц с JavaScript и без него, а также управлять выполнением JS для сайта. Это полезно, когда нужно понять, появляется ли основной контент только после выполнения скриптов.
Дополнительно используем «Проверку страницы»: смотрим версию документа в базе и сравниваем её с тем, что видит обычный браузер. Если значимый текст или ссылки отсутствуют, проблема уже подтверждается не только локальным тестом.
Практический пример
Каталог построен как SPA: сервер отдаёт каркас, а товары и текст категории загружаются из API уже после запуска приложения.
| Проверка | Результат | Риск | Действие |
|---|---|---|---|
| Исходный HTML | Только app-root и скрипты | Нет полезного содержания без JS | Проверить фактический рендеринг роботом |
| API | Иногда отвечает 3–4 секунды | Робот может получить пустой список | Ускорить API и добавить устойчивое состояние |
| Внутренние ссылки | Карточки открываются через обработчик | Маршруты хуже обнаруживаются | Использовать реальные href |
| Title | Меняется после запроса API | Метаданные зависят от успешного JS | Формировать критические meta раньше |
| После SSR | Текст и ссылки есть в HTML | Зависимость от JS ниже | JS остаётся для интерактивности |
Частые ошибки
Весь смысл страницы зависит от успешной загрузки приложения и API.
Важные маршруты существуют как действия интерфейса, а не обычные ссылки.
У всех URL одинаковые метаданные до завершения рендеринга.
Основной текст появляется только после события, которое робот может не воспроизвести.
Одна ошибка превращает документ в пустой loader.
Разработчик видит итоговый DOM и не замечает, что сервер отдаёт совсем другую страницу.
Чек-лист
Вопросы
Не сам по себе. Риск появляется, когда важный контент, ссылки или метаданные доступны только после нестабильного рендеринга.
Нет. Сначала проверяем фактическую индексацию. SSR оправдан, когда снижает реальную проблему доступности, скорости или стабильности контента.
Можно, но критические метаданные надёжнее иметь уже в исходном HTML или серверно сформированной версии, особенно на важных посадочных.
Переход может быть реализован только через обработчик клика. Для важных внутренних маршрутов лучше использовать обычный элемент a с href.
Использовать проверку страницы и инструменты JavaScript-рендеринга в Яндекс Вебмастере, а локально сравнить исходный HTML и итоговый DOM.
Практика NIC-SEO
Проверяем, что основное содержание, ссылки и метаданные доступны устойчиво, а ошибки API или bundle не превращают важную страницу в пустой контейнер.