Frontend · SEO

SPA или обычный сайт: что лучше для SEO

Годами в интернете живёт миф: «SPA-приложение нельзя продвигать в поиске, потому что поисковики не видят JavaScript». Разберу, что из этого правда сегодня, а что — устаревшее знание, и как понять, какой вариант архитектуры подходит именно вашему проекту.

Что такое SPA и чем он в корне отличается от обычного сайта

SPA (Single Page Application) — это приложение на Vue.js или React, где браузер один раз загружает одну HTML-страницу, а дальше весь контент подгружается и меняется через JavaScript без перезагрузки. Обычный многостраничный сайт устроен иначе: каждый URL — это отдельный html-документ, который сервер отдаёт целиком и сразу.

Для пользователя разница ощущается как отзывчивость интерфейса — переходы происходят мгновенно, без белого экрана перезагрузки. Для поисковика разница куда практичнее: важно, что именно приходит по сети в первом ответе сервера — готовый текст страницы или пустой html-каркас, который ещё предстоит «дорисовать» через JavaScript.

Откуда взялся миф «SPA не индексируется»

Миф не на пустом месте: несколько лет назад поисковые роботы действительно не умели выполнять JavaScript и видели SPA-страницу как пустой контейнер без текста. Сегодня Google обрабатывает JS-страницы в два прохода: сначала забирает исходный html, а затем — с задержкой от нескольких дней до пары недель — рендерит страницу headless-браузером, чтобы увидеть итоговый контент.

Технически SPA индексируется, но не мгновенно и не гарантированно с первого захода робота.

Монитор с разделённым экраном: слева пустая страница до JavaScript-рендеринга, справа та же страница с полностью отрисованным контентом

Как это работает на практике сегодня

У Google второй проход рендеринга работает стабильно, хотя и с задержкой. У Яндекса ситуация менее предсказуема: рендеринг JS-контента исторически слабее и медленнее, чем у Google, и для проектов, где основной трафик — из Яндекса, полагаться только на клиентский рендеринг рискованно.

Важно: если SPA отдаёт контент только через клиентский JavaScript (CSR) без серверного рендеринга или пре-рендеринга, а сайт при этом рассчитывает на органический трафик из Яндекса — это реальный риск неполной или запоздалой индексации, а не гипотетическая проблема.
Монитор с открытым Nuxt.js-проектом и конфигурацией серверного рендеринга (SSR), рядом терминал с логом сборки

SSR и пре-рендеринг — как решается проблема индексации

Решение — серверный рендеринг (SSR): сервер сразу генерирует готовый html с содержимым внутри, а JavaScript затем «оживляет» интерактивность поверх уже видимого контента (это называется гидратацией). Для Vue.js это делает Nuxt.js, для React — Next.js, оба фреймворка включают SSR из коробки.

На проекте сайта Большого театра России мы выбрали именно Nuxt.js, а не «чистый» Vue-SPA — сознательно, из-за требований по индексации. Это федеральный сайт с большим объёмом исторического и каталожного контента (труппа, репертуар, архив), и весь этот контент должен был гарантированно попадать в поиск, а не зависеть от того, дождётся ли робот второго прохода рендеринга.

Выбор фреймворка здесь — не вкусовщина, а прямое следствие требований по индексации конкретного проекта.

Когда SPA реально вредит SEO

Риск реален в двух ситуациях. Первая — чистый CSR без SSR или пре-рендеринга у проекта с множеством контентных страниц (блог, каталог, статьи), который рассчитывает на органический поиск как основной канал трафика. Вторая — тяжёлый JS-бандл, из-за которого страдает скорость первой отрисовки: это напрямую бьёт по Core Web Vitals, а они — фактор ранжирования и у Google, и у Яндекса.

Когда SPA — оправданный выбор, даже с этим компромиссом

Не любому проекту вообще нужна органика. Личный кабинет, CRM, админ-панель, внутренний корпоративный инструмент — весь этот контент закрыт авторизацией и никогда не должен попадать в поиск, так что вопрос индексации там просто не стоит. То же самое для продуктов, где основной трафик идёт из рекламы, соцсетей или прямых заходов по бренду, а не из органической выдачи — там чистый SPA без SSR полностью оправдан.

Как проверить, что ваш SPA сейчас нормально индексируется

Быстрая самопроверка без специальных инструментов: отключите JavaScript в браузере (расширение или настройки) и откройте страницу — если основной текст не виден вообще, робот в худшем случае видит то же самое. Дальше стоит сравнить количество страниц сайта с количеством проиндексированных через оператор site: в Яндексе и Google, и проверить конкретные url через «Проверку страниц» в Яндекс.Вебмастере или Google Search Console — они показывают, что именно робот увидел при рендеринге.

Если нужна не самопроверка, а технический разбор конкретного сайта на скрытые проблемы индексации — смотрите условия SEO-аудита.

Планируете SPA-приложение и хотите, чтобы оно нормально индексировалось?

Оценю архитектуру проекта и скажу, нужен ли SSR/пре-рендеринг именно в вашем случае, или можно обойтись без него.

Обсудить фронтенд-проект Обсудить проект

FAQ по теме

Правда ли, что Google вообще не видит SPA?
Нет, это устаревшее представление. Google обрабатывает JS-страницы в два прохода и в итоге видит отрендеренный контент, но с задержкой от нескольких дней до пары недель против мгновенной индексации обычного html.

А как обстоят дела с Яндексом?
Хуже и менее предсказуемо, чем у Google: рендеринг JS-контента у Яндекса исторически слабее. Для проектов, где Яндекс — основной источник органического трафика, SSR или пре-рендеринг стоит закладывать сразу, а не «на будущее».

Обязательно ли делать SSR для любого SPA-проекта?
Нет. Если у проекта нет контентных страниц, зависящих от органического поиска (личный кабинет, внутренний инструмент, продукт с трафиком из рекламы или бренда), SSR — не обязательная трата бюджета.

Можно ли добавить SSR к уже готовому SPA задним числом?
Технически можно, но на практике это обычно не косметическая правка, а частичный переезд на Nuxt.js/Next.js с пересмотром роутинга и логики загрузки данных — по объёму работ ближе к переработке архитектуры, чем к доработке.

Как понять, что сайту нужно веб-приложение, а не обычный сайт

Личный кабинет на сайте: зачем он нужен и что должно быть внутри

Сколько стоит разработка веб-приложения на Vue.js/React

Vue.js или React: что выбрать для своего проекта

Вадим Лукьянцев
Вадим Лукьянцев Об авторе — нажмите, чтобы раскрыть
Вадим Лукьянцев

Веб-разработчик, Краснодар. Делаю сайты под ключ на Vue/Nuxt и React/Next, вёрстку по макетам из Figma и PSD, сайты на WordPress и SEO-продвижение — сам, без субподрядчиков.

Работаю с 2GIS, Яндекс.Бизнесом, самозанятость оформлена официально с 2024 года. С клиентами по всему Краснодарскому краю и удалённо по России.