JavaScript SEO решает проблему: контент, который рисуется через JS, поисковик может не увидеть. Google в большинстве случаев исполняет JavaScript, но с задержкой в очереди рендеринга — индексация занимает дни вместо часов. Яндекс и Bing работают с JS хуже.
Решения: серверный рендеринг, пререндеринг, hybrid-подход. Критично для каталогов, блогов и контентных проектов на React, Vue, Angular. Для лендингов проблема меньше: важен только первый экран.
Контент рендерится в браузере. Старые роботы видят пустую страницу
Отдавать готовый HTML. Безопасно для всех роботов
Готовый HTML + JS «подключается» сверху. Лучший UX, отличный SEO
SPA на React без SSR. Поисковик получает пустой <div id="root">, JavaScript исполняется с задержкой в очереди рендеринга — индексация проседает.
Главная диагностика — посмотреть, что видит робот в готовом HTML; картинка в браузере тут обманчива. В Яндекс.Вебмастере это «Инструменты → Проверка ответа сервера», в Google Search Console — «Проверка URL → Изучить просканированную страницу → HTML». Если в исходнике пусто, а текст появляется только после JS, страница уйдёт в очередь рендеринга. Быстрый ручной тест: открыть страницу с выключенным JavaScript (DevTools → Command Palette → Disable JavaScript) — то, что осталось, и есть гарантированно индексируемый контент.
Типичная ошибка — лечить рендеринг, но забыть про навигацию и метаданные. Ссылки на onClick без атрибута href робот не обойдёт, поэтому пагинация и фасеты каталога должны быть обычными <a href>, иначе страдает краулинговый бюджет. Title, description и JSON-LD, дописанные через JS, Google подхватит с задержкой, а Яндекс может не увидеть вовсе — критичные теги отдавайте сразу в ответе сервера. Если переходите на SSR или пререндеринг, проверьте, что роботу и пользователю отдаётся одинаковый контент: подмена версии для бота — это клоакинг и риск санкций.
Интернет-магазин на Vue выдаёт 4000 карточек товара через CSR. В Search Console «Покрытие» показывает 3200 страниц в статусе «Обнаружена, не проиндексирована» — Google поставил их в очередь рендеринга и не дошёл. После внедрения пререндеринга (Prerender.io отдаёт ботам готовый HTML) за три недели в индекс попало 3800 страниц, а в Яндексе, который JS почти не исполнял, индексация выросла с 600 до 3
Проверка занимает пять минут. Откройте страницу с отключённым JavaScript и посмотрите, остался ли текст и ссылки. Затем сравните исходный код, который отдаёт сервер, с тем, что видно в инструментах разработчика после отрисовки: всё, чего нет в первом, поисковая система увидит с задержкой или не увидит вовсе. Панели вебмастера показывают отрисованную версию страницы для проверки.
Типовые ошибки повторяются от проекта к проекту: переходы через обработчик клика вместо обычной ссылки, бесконечная лента без страничной навигации, подгрузка описаний товаров по нажатию и содержимое внутри вкладок, которое подгружается только после взаимодействия. Всё это чинится тем, что ключевой контент и ссылки приходят с сервера в разметке.
Частые вопросы
Видит ли Яндекс контент, нарисованный JavaScript?
Робот Яндекса умеет исполнять скрипты, но делает это выборочно и медленнее Google. Для каталогов и контентных проектов это означает потерю части страниц из индекса, поэтому ключевые тексты и ссылки надёжнее отдавать с сервера.
Как быстро проверить проблему?
Отключите JavaScript в браузере и откройте важную страницу. Если исчезли текст, цены или меню, у поисковых систем будут те же сложности. Вторая проверка — сравнить исходный код ответа сервера с итоговой отрисовкой.
Обязателен ли серверный рендеринг?
Для лендинга и небольшого сайта — нет, там важен первый экран. Для каталога, блога и любого проекта с тысячами страниц серверный рендеринг или предварительная отрисовка экономят обход и ускоряют попадание в индекс.
Что делать с бесконечной лентой?
Оставить её людям и добавить обычную страничную навигацию со ссылками, доступную в разметке. Иначе робот видит только первую порцию материалов, а остальные остаются недостижимыми по ссылкам.