Главная Статьи Оптимизация

SEO JavaScript-сайтов и SPA

Сайты на React, Vue, Angular и других JS-фреймворках выглядят современно и работают как приложение. Но у них есть коварная SEO-ловушка: контент рисуется JavaScript уже в браузере, а в исходном HTML — пусто. Если поисковик не выполнит этот JS, он увидит чистую страницу без текста и ничего не проиндексирует. Разберём, как сделать JS-сайт видимым для поиска.

Почему JS-сайты — проблема для SEO

Обычный сайт отдаёт готовый HTML с текстом — поисковик сразу его читает. SPA (single page application) отдаёт почти пустой HTML и пакет JavaScript, который уже в браузере подгружает данные и рисует контент. Робот должен сначала выполнить JS, чтобы увидеть текст. Яндекс и Google это умеют, но не всегда, не сразу и не идеально — рендеринг JS откладывается и тратит ресурсы, а часть контента может не попасть в индекс.

👤 Что видит пользователь
Заголовок товара
Цена, описание, кнопка купить — всё на месте.
🤖 Что видит робот в HTML
<body> <div id="root"></div> <script src="bundle.js"></script> </body>

Без выполнения JS робот видит пустой <div id="root"> — ни текста, ни ссылок.

Способы рендеринга: что выбрать

CSR
Client-Side Rendering — рискованно для SEOКонтент рисуется только в браузере. Робот видит пустой HTML. Худший вариант для продвижения.
SSR
Server-Side Rendering — лучший для SEOСервер отдаёт уже готовый HTML с контентом, а JS «оживляет» интерактив. Робот сразу видит текст. Next.js, Nuxt и подобные.
SSG
Static Site Generation — отлично для SEOСтраницы генерируются заранее в статический HTML. Быстро и полностью индексируемо. Подходит для контента, который меняется нечасто.
Prerender
Пререндер / динамический рендеринг — компромиссРоботу отдаётся заранее отрендеренная версия страницы, людям — обычный SPA. Костыль, но спасает существующий CSR-проект.

Главный вывод: для SEO нужно, чтобы контент был в HTML до выполнения JS. Достигается это через SSR или SSG. Если переписать архитектуру нельзя — выручает пререндер.

Как проверить, видит ли поиск ваш контент

🛠
Базовую проверку (title, описание, заголовки, что отдаёт сервер) сделает анализ сайта и проверка ответа сервера. Как читать панель — Google Search Console.

Частые ошибки JS-сайтов

Про скорость и отзывчивость — статья Core Web Vitals (LCP, INP, CLS), про индексацию — краулинговый бюджет.

Чек-лист SEO для JS-сайта

Коротко

SPA на React/Vue рисуют контент в браузере, а в исходном HTML пусто — и поисковик может не увидеть текст. Чтобы JS-сайт индексировался, контент должен быть в HTML до выполнения JS: это даёт SSR (сервер отдаёт готовый HTML) или SSG (статическая генерация). Если переписать нельзя — спасает пререндер для роботов. Проверяйте, виден ли контент без JS и в Search Console, делайте навигацию обычными ссылками, задавайте мета на сервере и следите за весом бандла. Тогда современный JS-сайт будет и красивым, и видимым для поиска.

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

Почему JavaScript-сайты плохо индексируются?
Потому что SPA отдаёт почти пустой HTML и пакет JavaScript, который рисует контент уже в браузере. Робот должен сначала выполнить JS, чтобы увидеть текст. Яндекс и Google это умеют, но не всегда, не сразу и не идеально — рендеринг откладывается, тратит ресурсы, и часть контента может не попасть в индекс.
Что лучше для SEO: SSR, CSR или SSG?
Для SEO лучше SSR (сервер отдаёт готовый HTML с контентом) или SSG (страницы заранее сгенерированы в статический HTML) — робот сразу видит текст. CSR (рендеринг только в браузере) — худший вариант, робот видит пустой HTML. Если переписать архитектуру нельзя, выручает пререндер для роботов.
Как проверить, видит ли поиск контент моего SPA?
Откройте исходный код страницы (Ctrl+U) или отключите JavaScript в браузере — виден ли основной текст и ссылки. Если пусто — проблема. Также используйте проверку URL в Google Search Console: она показывает отрендеренный HTML, как его видит Googlebot, и можно сравнить с исходным кодом.
Какие ошибки чаще всего у JS-сайтов в SEO?
Навигация на onClick вместо обычных ссылок-тегов a href (робот не «кликает»), контент, появляющийся только после клика или скролла (робот его не видит), мета-теги, проставляемые скриптом вместо сервера (ненадёжно), и слишком тяжёлый JS-бандл, который медленно грузится и ухудшает Core Web Vitals, особенно INP.
Нужен ли SSR, если у меня уже готовый SPA?
Если контент не виден в исходном HTML и страдает индексация — да, SSR или SSG решают проблему кардинально. Но если переписывать проект дорого, можно настроить динамический рендеринг (пререндер): роботу отдаётся заранее отрендеренная версия, людям — обычный SPA. Это компромисс, спасающий существующий CSR-проект.