Техническое SEO

SPA-сайт: как отдавать контент поисковому боту?

Александр Тригуб - частный SEO-специалист
Александр Тригуб Частный SEO-специалист · с 2010 · 500+ аудитов · 1092 заказа · 4.9★

SPA (Single Page Application) на React, Vue, Angular - проблема для SEO. Контент рендерится на клиенте, а поисковый робот видит пустой HTML.

Проблема

Googlebot рендерит JavaScript, но с задержкой и лимитами. Яндекс рендерит JS значительно хуже. Итог: контент SPA может не попасть в индекс.

Решения

1. SSR (Server-Side Rendering) - лучший вариант.

  • Next.js (React), Nuxt.js (Vue), Angular Universal
  • Сервер отдаёт готовый HTML с контентом → робот видит всё
  • После загрузки - JS «гидрирует» страницу для интерактивности

2. SSG (Static Site Generation).

  • Страницы генерируются на этапе сборки → статический HTML
  • Идеально для блогов, лендингов, каталогов с редким обновлением
  • Gatsby, Next.js (static export), Hugo

3. Dynamic Rendering (крайний случай).

  • Определяем User-Agent: если робот → отдаём пре-рендеренный HTML
  • Google официально поддерживает, но рекомендует SSR
  • Puppeteer, Rendertron - инструменты для пре-рендеринга

Как проверить

GSC → Проверка URL → «Просмотр просканированной страницы». Если видите контент - всё OK. Если пусто - нужен SSR.

На практике рекомендую комбинировать SSR с пререндерингом ключевых страниц через Puppeteer или Rendertron - это страхует от ошибок рендеринга у ботов. Для динамических разделов (личные кабинеты, фильтры) используйте Conditional Rendering: отдавайте боту упрощённую статическую версию через User-Agent проверку. Инструменты вроде Vue Meta или React Helmet критически важны для управления тегами title/meta при SSR. Проверяйте индексируемость через Google Search Console (отчёт «Проверка URL») и сервисы типа Screaming Frog в режиме «рендеринга JS».

Важный нюанс: даже с SSR избегайте «воды» в HTML. Боты учитывают соотношение контента и кода - минимизируйте встроенные JSON-данные и стили. Для SPA с частыми обновлениями (новостные порталы) настройте Incremental Static Regeneration (ISR) в Next.js: это даёт статическую скорость с динамическим контентом. Всегда тестируйте загрузку с отключённым JavaScript в DevTools - так вы увидите страницу «глазами» Яндекса.

Не нашли ответ? Спросите!

Отвечаю лично в течение 24 часов. Лучшие вопросы публикую в этом разделе.

Другие вопросы

Кто ведёт проект

Александр Тригуб - частный SEO-специалист. В поисковом маркетинге с 2010 года, предприниматель с 2001-го. Строил сайты клиентам с 2007-го - понимаю сайт изнутри, не только как продвигать, но и как он устроен. В SEO пришёл из собственного бизнеса - знаю, как устроены продажи не из учебников, а из собственной выручки и расходов.

Публичные примеры разработки: royal-pier.ru · monolitkapstroy.ru · med-expres.ru · arnikacenter.ru · kairoscity.ru

1 000+заказов · 728 отзывов 4.9★
300+сайтов разработано
500+видео-аудитов в открытом доступе
13+лет - самые долгие проекты
27+модулей аналитики и мониторинга