Современные сайты на React, Vue, Angular и других SPA-фреймворках выглядят красиво, но часто имеют серьёзные проблемы с SEO. Поисковик загружает HTML, видит почти пустой `<body>`, и думает «здесь нет контента». То, что после загрузки JavaScript рисует всю страницу, поисковику может быть невидимо. В этой статье разберём, как Google и Яндекс работают с JavaScript в 2026, в чём принципиальная разница между SSR, SSG и CSR, и какой чеклист использовать, если ваш SPA-сайт не индексируется.
Как Google рендерит JavaScript
Google использует двухэтапную индексацию для JavaScript-страниц. Этап 1 — обход: Googlebot загружает HTML и индексирует то, что в нём есть. Если в HTML только пустой `<div id="root"></div>` и `<script>` — Google индексирует это как пустую страницу. Этап 2 — рендеринг: страница попадает в очередь рендеринга, где headless Chromium запускает JavaScript и видит финальный DOM. На этом этапе Google уже видит контент. Проблема: между этапом 1 и этапом 2 может пройти от нескольких часов до нескольких недель. Всё это время ваша страница в индексе пустая. И если рендеринг падает (JS-ошибка, таймаут, заблокированный ресурс) — этап 2 не происходит вообще.
Как Яндекс рендерит JavaScript
Яндекс отстаёт от Google в JavaScript-рендеринге. До 2023 года Яндекс почти не рендерил JS — индексировался только базовый HTML. С 2024 ситуация улучшилась, но не радикально: Яндекс рендерит JavaScript примерно для 60% страниц в очереди, против ~95% у Google, и с большей задержкой. Практический вывод: если вы работаете на российский рынок и у вас SPA-сайт, проблема индексации в Яндексе будет жёстче, чем в Google. Решение одно — SSR.
SSR vs SSG vs CSR: разница для SEO
CSR (Client-Side Rendering) — классическая SPA: сервер отдаёт пустой HTML, JS его наполняет в браузере. SEO-катастрофа, описанная выше. SSR (Server-Side Rendering) — сервер для каждого запроса рендерит HTML с полным контентом, JavaScript добавляется потом для интерактивности. Поисковик сразу получает полный контент. Это идеал для SEO. Реализуется через Next.js, Nuxt, SvelteKit и другие meta-фреймворки. SSG (Static Site Generation) — HTML генерируется во время сборки, сервер отдаёт готовые статические файлы. Самый быстрый вариант, отлично для SEO, но не подходит для динамического контента (например, для дашборда юзера). Гибрид SSR+SSG (например, Next.js App Router с разными стратегиями для разных страниц) — оптимальный современный подход. Site Metrics Tool сам построен на Next.js 16 c смешанной SSR+SSG стратегией, и это даёт нам отличную индексацию.
Как проверить, видит ли поисковик ваш контент
Тест 1 — отключите JavaScript в браузере (Chrome DevTools → ⚙ → Disable JavaScript), перезагрузите страницу. Если видите только пустой шаблон, заглушку или «Loading...» — поисковик видит то же. Тест 2 — GSC → URL Inspection → Test Live URL → View Rendered HTML. Здесь Google показывает, что он видит после рендеринга. Если контента нет — есть проблема с рендерингом на стороне Google. Тест 3 — `curl -A "Yandexbot" https://your-site.com/page` — что отдаёт сервер боту Яндекса. Если HTML пустой, Яндексу нечего индексировать. Эти три теста за 5 минут показывают, есть ли у вас JavaScript-SEO проблема.
Чеклист исправления
- Если сайт критичный для SEO — переходите на SSR/SSG. Это самое сильное решение. Меньшие меры — паллиативы.
- Минимально нужный HTML в первом ответе: title, meta description, h1, основной текст. Можно через серверный шаблон.
- Не блокируйте в robots.txt /js/, /static/ — Google нужны эти файлы для рендеринга.
- Используйте rel=canonical везде, даже на CSR-страницах — это помогает Google понять каноническую версию.
- Не используйте `pushState` для бесконечной прокрутки без серверной пагинации — поисковик не сможет добраться до старого контента.
- Внутренние ссылки делайте через `<a href="...">`, а не через `onClick` обработчики JavaScript. Иначе бот не пройдёт по графу сайта.
Частые вопросы
Хорошо ли индексируются React-приложения?
Зависит от способа рендеринга. React сам по себе ни хороший, ни плохой для SEO — важно, как вы его используете. React + SSR (через Next.js) индексируется отлично. React + чистый CSR (Create React App без надстроек) — плохо.
Можно ли заставить Google рендерить мой сайт быстрее?
Через GSC → URL Inspection → Request Indexing можно ускорить ИНДЕКСАЦИЮ конкретного URL, но это не сокращает время РЕНДЕРИНГА. Если у вас CSR, изменения всё равно дойдут с задержкой. Стратегически — единственное решение это SSR.
Помогает ли prerender.io и аналоги?
Помогает, но это паллиатив. Prerender генерирует HTML-снапшоты страниц для ботов через свой сервис. Работает, но добавляет внешнюю зависимость, стоимость и точку отказа. Лучше нормальный SSR.