JavaScript SEO

Индексация JS-сайтов

Особенности продвижения сайтов на JavaScript-фреймворках.

JavaScript SEO решает проблему: контент, который рисуется через JS, поисковик может не увидеть. Google в большинстве случаев исполняет JavaScript, но с задержкой в очереди рендеринга — индексация занимает дни вместо часов. Яндекс и Bing работают с JS хуже.

Решения: серверный рендеринг, пререндеринг, hybrid-подход. Критично для каталогов, блогов и контентных проектов на React, Vue, Angular. Для лендингов проблема меньше: важен только первый экран.

Проблема
JS-сайт

Контент рендерится в браузере. Старые роботы видят пустую страницу

Решение 1
SSR / SSG

Отдавать готовый HTML. Безопасно для всех роботов

Решение 2
Hydration

Готовый HTML + JS «подключается» сверху. Лучший UX, отличный SEO

JavaScript SEO: как сделать чтобы JS-сайт нормально индексировался. Главное — отдавать готовый HTML, а не пустой шаблон
Пример из практики

SPA на React без SSR. Поисковик получает пустой <div id="root">, JavaScript исполняется с задержкой в очереди рендеринга — индексация проседает.

Главная диагностика — посмотреть, что видит робот в готовом HTML, а не в браузере. В Яндекс.Вебмастере это «Инструменты → Проверка ответа сервера», в Google Search Console — «Проверка URL → Изучить просканированную страницу → HTML». Если в исходнике пусто, а текст появляется только после JS, страница уйдёт в очередь рендеринга. Быстрый ручной тест: открыть страницу с выключенным JavaScript (DevTools → Command Palette → Disable JavaScript) — то, что осталось, и есть гарантированно индексируемый контент.

Типичная ошибка — лечить рендеринг, но забыть про навигацию и метаданные. Ссылки на onClick без атрибута href робот не обойдёт, поэтому пагинация и фасеты каталога должны быть обычными , иначе страдает краулинговый бюджет. Title, description и JSON-LD, дописанные через JS, Google подхватит с задержкой, а Яндекс может не увидеть вовсе — критичные теги отдавайте сразу в ответе сервера. Если переходите на SSR или пререндеринг, проверьте, что роботу и пользователю отдаётся одинаковый контент: подмена версии для бота — это клоакинг и риск санкций.

Пример

Интернет-магазин на Vue выдаёт 4000 карточек товара через CSR. В Search Console «Покрытие» показывает 3200 страниц в статусе «Обнаружена, не проиндексирована» — Google поставил их в очередь рендеринга и не дошёл. После внедрения пререндеринга (Prerender.io отдаёт ботам готовый HTML) за три недели в индекс попало 3800 страниц, а в Яндексе, который JS почти не исполнял, индексация выросла с 600 до 3