Google SEO: поиск, качество и AI-выдача

JavaScript SEO

JavaScript SEO в Google — очередь рендера WRS и HTML после Chromium, а не сканирование, индекс и не общий гайд по SPA.

Кирилл Бабийчук · обновлено · 4 мин чтения

JavaScript SEO в контуре Google — это не «робот не умеет JS» и не курс по фреймворку. Googlebot качает URL, страница с кодом 200 встаёт в очередь на рендер, Web Rendering Service (WRS) на evergreen Chromium выполняет скрипты, и в индекс идёт уже отрисованный HTML. Очередь захода — соседний сканирование. Клиент в логах — Googlebot. Решение хранить документ — индексация Google. Хаб — Google SEO. CSR, SSR и «рендеринг вообще» как технический слой — planned H1 в technical-seo, сюда стек не тащим.

Рендер может занять секунды, а может подождать ресурсов. Публичной «нормы в сутках» нет — не выдумываем. Пока документ в очереди, Google видит исходный ответ сервера. Критичный текст, ссылки, каноникал, noindex и Product-разметка надёжнее в первом HTML. Кабинет проверки — Search Console: инспектор URL, отрисованный HTML и снимок, не «балл JavaScript».

Что ломается между первым HTML и WRS

Сигнал Если только после JS Что сделать
Основной текст и внутренние ссылки Могут опоздать в индекс или не попасть в граф SSR, статика или пререндер для денежных URL
Каноникал / noindex Каноникализация идёт до рендера; поздний тег опаздывает Те же rel в исходном HTML или не ставить вовсе
Код ответа SPA Пустая оболочка отдаёт 200 — soft 404 Настоящий 404/410 или noindex на пустышке
JS и CSS в robots.txt WRS не выполнит запрещённые файлы Не закрывать бандлы, без которых нет контента

WRS кэширует агрессивно и может игнорировать ваши Cache-Control. Смена содержимого без смены имени файла — риск отдать роботу старый бандл. Отпечаток в имени (app.a1b2c3.js) — рабочая гигиена, не «секретный буст». Hash-роуты #/page Google не считает отдельными URL. History API — да, если сервер на каждый путь отдаёт документ, а не 404 оболочке.

Dynamic rendering (отдельный HTML боту по User-agent) Google прямо назвал устаревшим обходным путём: сложно, легко разъехаться с тем, что видит человек, и пахнет клоакингом, если факты разные. Долгий путь — SSR, статическая генерация или гидратация одной и той же страницы. Лимит обхода хоста — соседний crawl budget: тяжёлый CSR жжёт очередь рендера, не «коэффициент JS».

Как проверять, а не верить демо в Chrome

  1. Инспектор URL на проде: скачанный HTML, отрисованный HTML, скриншот смартфона. Расхождение заголовка, цены или блока — дефект, не «Google ещё не понял фреймворк».
  2. Те же факты в первом ответе и после JS. Поздний noindex или другой каноникал в скрипте — гонка, соседний разбор Canonical в Google.
  3. Не блокируйте бандлы в robots.txt для Google. Закрытый /static/ «от ботов» часто закрывает и WRS.
  4. Пустые состояния приложения: лоадер, экран логина, «включите JS» как единственный текст — это то, что может уйти в индекс, если рендер не доехал.
  5. Не меряйте успех Lighthouse-баллом. Скорость отрисовки для человека — Core Web Vitals, другой H1. JavaScript SEO здесь про видимость документа роботу, не про INP.

Другие поисковики могут не исполнять тот же JS. Если канал не только Google, SSR на ключевых шаблонах дешевле, чем отдельный «бот-рендер». Пакет «починим JS SEO плагином» слота не покупает; разбор шаблонов и статусов — постановка SEO-аудита.

Ограничение. Нет замера «какой процент SPA в РФ индексируется только после WRS» — не выдумываем. Очередь рендера, лимиты Chromium и список неподдерживаемых API смотрите в текущей справке Search Central по JavaScript, не в гайде 2018 года про «два прохода через неделю». Технический CSR/SSR как отдельный кластер — соседние planned H1, не этот URL.

Частые вопросы

Google умеет индексировать сайты на JavaScript?

Да, через WRS на Chromium. Это не значит, что любой CSR равен статике: контент, ссылки и запреты надёжнее в первом HTML, иначе вы зависите от очереди рендера.

Нужен ли dynamic rendering в 2026 году?

Google считает его устаревшим обходом. Для поиска держите SSR, статику или гидратацию одной страницы. Отдельный HTML «только боту» оставляйте как временный костыль, не как архитектуру.

Почему в браузере текст есть, а в индексе пустая оболочка?

Робот мог забрать первый HTML, не дождаться рендера, упереться в robots.txt на бандл или получить 200 на пустышке. Сверяйте отрисованный HTML в инспекторе, не вкладку Chrome под своим профилем.

JavaScript SEO и Core Web Vitals — одно и то же?

Нет. Здесь — видит ли Google документ после исполнения скриптов. CWV — полевой опыт загрузки для человека. Тяжёлый бандл бьёт оба слоя, но чинятся они по-разному.