SEO JavaScript-сайтов и SPA
Сайты на React, Vue, Angular и других JS-фреймворках выглядят современно и работают как приложение. Но у них есть коварная SEO-ловушка: контент рисуется JavaScript уже в браузере, а в исходном HTML — пусто. Если поисковик не выполнит этот JS, он увидит чистую страницу без текста и ничего не проиндексирует. Разберём, как сделать JS-сайт видимым для поиска.
Почему JS-сайты — проблема для SEO
Обычный сайт отдаёт готовый HTML с текстом — поисковик сразу его читает. SPA (single page application) отдаёт почти пустой HTML и пакет JavaScript, который уже в браузере подгружает данные и рисует контент. Робот должен сначала выполнить JS, чтобы увидеть текст. Яндекс и Google это умеют, но не всегда, не сразу и не идеально — рендеринг JS откладывается и тратит ресурсы, а часть контента может не попасть в индекс.
Без выполнения JS робот видит пустой <div id="root"> — ни текста, ни ссылок.
Способы рендеринга: что выбрать
Главный вывод: для SEO нужно, чтобы контент был в HTML до выполнения JS. Достигается это через SSR или SSG. Если переписать архитектуру нельзя — выручает пререндер.
Как проверить, видит ли поиск ваш контент
- Код без JS. Откройте исходный код страницы (Ctrl+U) или отключите JavaScript в браузере — виден ли основной текст и ссылки. Если пусто — у вас проблема.
- Google Search Console — проверка URL показывает отрендеренный HTML, как его видит Googlebot.
- Сравните отрендеренную версию с тем, что в исходном коде.
Частые ошибки JS-сайтов
- Навигация на onClick вместо <a href>. Робот не «кликает» — переходы должны быть обычными ссылками.
- Контент по событию. Текст, который появляется только после клика/скролла, робот может не увидеть.
- Мета-теги через JS. Title и description, проставляемые скриптом, ненадёжны — лучше задавать на сервере (SSR).
- Тяжёлый бандл. Огромный JS медленно грузится и ухудшает Core Web Vitals (особенно INP).
Чек-лист SEO для JS-сайта
- Основной контент есть в HTML до выполнения JS (SSR или SSG)
- Title, description, H1 задаются на сервере, не только скриптом
- Навигация — обычные <a href>, не onClick
- Текст виден без кликов и скролла
- Проверено в Search Console (отрендеренный HTML)
- Бандл оптимизирован, Core Web Vitals в норме
- Если SSR невозможен — настроен пререндер для роботов
Коротко
SPA на React/Vue рисуют контент в браузере, а в исходном HTML пусто — и поисковик может не увидеть текст. Чтобы JS-сайт индексировался, контент должен быть в HTML до выполнения JS: это даёт SSR (сервер отдаёт готовый HTML) или SSG (статическая генерация). Если переписать нельзя — спасает пререндер для роботов. Проверяйте, виден ли контент без JS и в Search Console, делайте навигацию обычными ссылками, задавайте мета на сервере и следите за весом бандла. Тогда современный JS-сайт будет и красивым, и видимым для поиска.