Техничка
SEO для SPA и JavaScript-сайтов 2026: React, Vue, Angular
Как настроить индексацию Single Page Application. Разбираем разницу между CSR, SSR и SSG. Почему Google видит пустой экран вместо вашего контента.
Боль классического SEO-специалиста 2026 года: клиент приходит с ультрасовременным сайтом за 2 миллиона рублей, написанным на чистом React. Сайт летает, анимации плавные, переходы моментальные (Single Page Application — SPA). Но есть одна проблема: трафика из Яндекса и Google ровно ноль. Поисковики видят лишь пустой белый экран с тегом <div id="root"></div>.
Эта ситуация — следствие конфликта между удобством разработки (Frontend) и требованиями поисковых систем. Чтобы подружить интерактивные фреймворки (React, Vue, Angular) с поисковиками, нужно глубже понимать механику рендеринга и индексации алгоритмами.
Почему Google и Яндекс не любят чистый SPA?
Поисковики сканируют сайты в два этапа. Сначала быстрый краулер считывает сырой HTML-код. Если сайт построен по модели SPA (Client-Side Rendering — CSR), в сыром HTML часто нет основного контента, а есть только ссылка на тяжелый пакет JavaScript.
Чтобы отрендерить этот JS, поисковику нужно исполнить код и дождаться появления контента. Это дороже и менее предсказуемо, чем работа с готовым HTML. Google умеет индексировать JavaScript, но сам предупреждает о лимитах клиентского рендеринга. Яндекс тоже продвинулся и теперь дает отдельные настройки JS rendering в Webmaster, но для бизнеса это все равно не лучший базовый сценарий.
Таблица сравнения типов рендеринга: CSR vs SSR vs SSG
Чтобы сайт получал органический трафик, нужно переносить отрисовку исходного кода на сервер (или на этап сборки).
| Тип рендеринга | Расшифровка | Как видит бот | Решение | Вердикт для SEO |
|---|---|---|---|---|
| CSR | Client-Side Rendering | Только тег <div id="root"> | Рендерится в браузере клиента | ❌ Плохо (высокие риски) |
| SSR | Server-Side Rendering | Готовый HTML с контентом | Сервер генерирует HTML на каждый запрос | ✅ Отлично |
| SSG | Static Site Generation | Готовый статический HTML | Генерируется один раз при сборке (билде) | 🏆 Идеально |
| ISR | Incremental Static Req. | Готовый HTML из кэша | Компромисс: статика обновляется в фоне | ✅ Отлично (для крупных ИМ) |
Если вы только составляете ТЗ на разработку нового сайта, немедленно откажитесь от чистого CSR. Требуйте от программистов использования мета-фреймворков вроде Next.js (для React) или Nuxt 3 (для Vue), которые умеют делать SSR или SSG «из коробки».
Кейс нашей студии: Почему мы выбрали Astro (SSG)?
Часто нам задают вопрос: “Даже если настроить Next.js в режиме SSR, сайт все равно грузит тяжелый бандл React (Hydration), из-за чего проседают баллы скорости”. Это правда. Показатель Core Web Vitals INP (Интерактивность) часто остается в желтой зоне из-за блокировки потока гидратацией фреймворка.
Поэтому для контентных проектов и сайтов услуг мы часто выбираем Astro как один из удобных вариантов.
В чем суть Astro для SEO?
- SSG по умолчанию: Astro генерирует статичный HTML во время сборки. Поисковик загружает нас моментально.
- Нулевой JavaScript (Zero JS): Astro удаляет весь клиентский JS, отдавая только чистый HTML с CSS.
- Partial Hydration (Острова): Мы можем вставить сложный React-калькулятор на страницу в виде «интерактивного острова», и Astro загрузит JS только для этого блока, не нагружая остальную страницу-статью.
Для блогов, корпоративных сайтов и лендингов Astro часто оказывается очень практичным решением. Но ключевой вывод шире: поиску помогают не “модные слова”, а готовый HTML, управляемый JS и понятная архитектура.
3 критические ошибки при SPA-разработке
Даже если у вас Next.js (SSR), программисты могут допустить фатальные для продвижения ошибки. Мы регулярно находим их в рамках наших базовых технических аудитов:
- Мнимые ссылки (onClick Router): Разработчик делает переход на товары в листинге не через классический тег
<a href="#">, а через событиеonClick={goToPage}. Поисковые боты не кликают по JavaScript-событиям, они ходят только по атрибутуhref. Итог — бот не находит товары. - Отсутствие серверных мета-тегов: Использование
react-helmet, который подставляет Title и Description только на клиенте. В SSR-версии мета-теги должны присутствовать в HTTP-ответеdocumentсразу. - Бесконечный скролл без отдельных URL и crawlable links: В SPA любят делать подгрузку товаров скроллом (Infinite Scroll). Если при этом у листинга нет отдельных адресов страниц, а до следующей порции товаров нельзя дойти по нормальным ссылкам, бот увидит только первый экран ассортимента.
Dynamic Rendering: только legacy-workaround, а не базовая стратегия
Что делать, если у вас уже есть огромный портал на React, и переписать его на SSR быстро невозможно? Раньше как запасной вариант часто использовали Dynamic Rendering.
- Ваш сервер (Nginx\Node.js) определяет, кто пришел (через
User-Agent): если живой человек — отдает тяжелый React. - Если пришел
YandexBotилиGooglebot— запрос летит на промежуточный сервер (например, Rendertron или Prerender.io), который запускает Headless Chrome, рендерит страницу в статичный HTML и отдает боту готовую копию со всеми тегами.
Сегодня это стоит рассматривать именно как legacy-workaround. Google прямо описывает dynamic rendering как временный обходной путь, а не рекомендуемое долгосрочное решение. Если есть возможность, лучше идти в SSR, static rendering или грамотную гибридную архитектуру.
Вывод
Инвестирование миллионов в SPA без продуманной архитектуры рендеринга — это высокий риск для органического трафика. Чем раньше в проект закладываются SSR, static rendering или управляемый гибрид, тем меньше потом придется лечить индексацию, производительность и провалы по видимости.
Трафик вашего React-сайта годами не растет? Доверьте поиск проблемы нам. Оставляйте заявку на глубокий технический JS-аудит ресурса, и мы подготовим с вашим Frontend-лидом пошаговый план миграции на дружелюбную к ботам инфраструктуру.
Тема статьи
Техническое SEO
Статьи про техническую сторону SEO: индексация и robots.txt, sitemap.xml, canonical и дубли, редиректы, Core Web Vitals и скорость, микроразметка, SPA и рендеринг. То, что решается в коде и настройках, а не в текстах.
Читайте также
Похожие статьи
301 и 302 редиректы: когда какой использовать в SEO
Чем отличаются 301 и 302 редиректы, как их видят поисковики, когда нужен постоянный перенос и какие ошибки ломают миграции.
10 минCanonical URL: как выбрать главную версию страницы и убрать дубли
Разбираем, как работает rel="canonical", когда он действительно помогает, почему не заменяет редиректы и какие ошибки чаще всего ломают индексацию дублей.
11 минКак добавить организацию в Яндекс.Бизнес и прокачать карточку в Картах
Разбираем, как добавить компанию в Яндекс.Бизнес, оформить карточку в Картах, работать с отзывами и связать профиль с сайтом для локального спроса.
10 мин