Индексация JavaScript-сайтов: как поисковики видят SPA и что с этим делать
Индексация JavaScript-сайтов часто вызывает вопросы: пользователь открывает страницу и видит каталог, карточки товаров или личный кабинет, а поисковый робот получает почти пустой HTML. Для бизнеса это означает потерю страниц в поиске, слабые сниппеты и зависимость от того, насколько корректно настроен JavaScript.
Особенно заметна проблема у SPA, где переходы между разделами происходят без полной загрузки страницы. Разберём, как поисковики обрабатывают такие проекты, почему страница может не попасть в индекс и какие решения подходят для сайта конкретного бизнеса.
Почему SPA может плохо индексироваться
SPA, или одностраничное приложение, загружает базовую HTML-оболочку, а содержимое добавляет JavaScript. В исходном коде страницы при этом могут находиться только контейнеры вроде <div id='app'></div>, ссылки на скрипты и технические метаданные. Заголовок, текст, товары и ссылки появляются только после выполнения кода в браузере.
Для обычного посетителя это почти незаметно. Он ждёт загрузку приложения и видит готовую страницу. Поисковику нужно сначала скачать HTML, затем обнаружить и загрузить JavaScript, выполнить его в отдельном процессе, дождаться сетевых запросов и только после этого построить итоговое представление страницы. На каждом шаге возможен сбой.
Причина может быть технической: скрипт заблокирован, сервер вернул ошибку, данные не пришли из API, страница требует авторизации или контент появляется только после действия пользователя. Иногда проблема в логике приложения: для всех разделов используется один URL, ссылки сделаны кнопками, а при обновлении вложенного адреса сервер отдаёт ошибку 404.
Поисковик оценивает не то, что видит разработчик в локальном приложении, а тот результат, который он может получить, загрузить и связать с конкретным URL.
Как поисковики видят JavaScript-сайт
Обработка страницы условно состоит из нескольких этапов. Сначала робот получает адрес из ссылки, файла Sitemap или другого источника. Затем он загружает HTML и извлекает из него текст, метаданные и ссылки. Если страница использует JavaScript, поисковик может поставить её в очередь на дополнительную обработку.
На этапе выполнения скриптов робот пытается получить итоговую версию документа. Этот этап не обязательно происходит сразу и не гарантирует полную работоспособность приложения. У поискового робота ограничены ресурсы, время ожидания и доступ к отдельным функциям браузера. Поэтому рассчитывать на то, что любой JavaScript будет выполнен так же, как у пользователя, рискованно.
Важно различать индексирование и ранжирование. Страница может попасть в индекс, но её содержимое окажется неполным, а заголовок и описание будут сформированы неудачно. Может проиндексироваться только главный адрес приложения, тогда как страницы категорий и товаров останутся неизвестными поиску. Наконец, URL может быть найден, но исключён из результатов из-за дублей, низкой ценности или технических ограничений.
Что проверяет поисковый робот
- Есть ли у страницы отдельный постоянный URL.
- Возвращает ли сервер код ответа 200 для этого URL.
- Доступны ли HTML, таблицы стилей, JavaScript и запросы к API.
- Присутствуют ли в итоговом документе заголовок, текст, ссылки и метаданные.
- Не закрыта ли страница в robots.txt, meta-теге robots или HTTP-заголовке.
- Не ведут ли канонический адрес и внутренние ссылки на другую страницу.
CSR, SSR и предварительный рендеринг: что выбрать
Архитектура вывода контента напрямую влияет на SEO. При CSR, клиентском рендеринге, сервер отдаёт почти пустую оболочку, а браузер собирает страницу после загрузки скриптов. Такой подход удобен для сложных приложений, но требует особенно тщательной проверки индексации.
При SSR, серверном рендеринге, HTML с основным содержимым формируется до отправки пользователю. Робот получает готовый текст, заголовки и ссылки сразу. После загрузки JavaScript приложение может продолжить работу в браузере, например обновлять корзину или фильтровать товары без перезагрузки.
Предварительный рендеринг, или prerendering, создаёт готовую HTML-версию страниц заранее либо при первом обращении. Этот вариант может подойти проектам, где содержимое меняется не каждую секунду: каталогам, справочникам, корпоративным сайтам и публикациям.
| Подход | Как получает страницу робот | Когда подходит | Основной риск |
|---|---|---|---|
| CSR | HTML без основного содержимого, затем выполнение JavaScript | Личные кабинеты, сервисы, приложения с закрытой частью | Пустой HTML, ошибки скриптов и задержка обработки |
| SSR | Готовый HTML с сервера | Каталоги, магазины, услуги, страницы с поисковым спросом | Усложнение серверной части и рост требований к хостингу |
| Предварительный рендеринг | Заранее созданная HTML-версия | Стабильный контент и страницы, которые обновляются по расписанию | Устаревший результат после изменения данных |
Универсального ответа нет. Для интернет-магазина с тысячами карточек обычно важнее быстро отдавать поисковику содержимое категорий и товаров. Для внутреннего сервиса индексация закрытых экранов может вообще не требоваться. Часто используется смешанный вариант: публичные страницы формируются на сервере, а функциональность личного кабинета работает как SPA.
Какие признаки указывают на проблему с индексацией
Первый сигнал, мало страниц в поиске по сравнению с фактическим количеством. Например, у магазина есть 800 товарных карточек и 40 категорий, но в поиске стабильно видны только главная и несколько статичных разделов. Само по себе число страниц в поисковой системе не является точным диагнозом, но повод для проверки оно даёт.
Второй сигнал, при проверке URL поисковая система сообщает, что страница найдена, но не проиндексирована, либо показывает пустой или неполный просмотр. Третий, в результатах поиска вместо нормального заголовка отображается название приложения, повторяющийся текст или случайный фрагмент.
Ещё один признак, страницы открываются при переходе с главной, но не работают при прямом вводе адреса. Пользователь может не заметить проблему в обычном сценарии, а робот, который заходит сразу на URL из Sitemap, получает ошибку. Это часто происходит при неправильной настройке маршрутизации на сервере.
Минимальная проверка без доступа к коду
- Откройте важную страницу в режиме просмотра исходного кода, а не только в обычном окне браузера. Проверьте, есть ли там основной заголовок, описание и текст.
- Отключите JavaScript в браузере и обновите страницу. Если исчезает весь коммерческий контент, зависимость от клиентского рендеринга очень высокая.
- Проверьте несколько вложенных адресов в инструментах вебмастера Яндекса и Google Search Console, если сайт ориентирован не только на российский поиск.
- Сравните HTML до выполнения скриптов и итоговый DOM после загрузки. Разница покажет, какой контент добавляет приложение.
- Посмотрите ответы сервера в инструментах разработчика: важные страницы и запросы к данным должны возвращаться без ошибок.
Для крупного или коммерчески важного проекта лучше заказать SEO-аудит сайта. В его рамках проверяют не только наличие текста, но и доступность маршрутов, ссылки, канонические адреса, пагинацию, фильтры и правила обхода.
Как проверить индексацию JavaScript-сайта на практике
Проверка должна идти от приоритетных URL к общей архитектуре. Составьте таблицу из главной, категорий, карточек товаров или услуг, информационных страниц и адресов с фильтрами. Для каждого URL зафиксируйте код ответа, наличие в Sitemap, директивы robots, канонический адрес и фактическое содержимое HTML.
Отдельно сравните три состояния страницы: ответ сервера, DOM после выполнения JavaScript и то, что видит робот в отчёте о проверке URL. Если текст есть только в DOM, это не всегда ошибка, но такой вариант требует проверки стабильности рендеринга. Если текст отсутствует и в DOM, поисковик его не узнает.
Проверьте внутреннюю перелинковку. Ссылка должна быть настоящим элементом <a> с адресом в атрибуте href. Кнопка с обработчиком click может открыть нужный раздел пользователю, но не даёт поисковику понятного маршрута. Для важных страниц должна существовать цепочка переходов от уже известных адресов.
Не забывайте о данных, которые загружаются через API. Если запрос требует токен, выполняется только после авторизации или блокируется политикой доступа, робот не получит товары и тексты. Ошибка API со статусом 401, 403, 404 или 500 может сделать пустой весь раздел, даже если оболочка приложения загружается без проблем.
Что делать, если страницы не попадают в индекс
Сделать важный контент доступным в HTML
Главный текст страницы, заголовок, описание предложения, цены, характеристики и ссылки на связанные разделы должны быть доступны без сложного сценария взаимодействия. Для коммерческих страниц это особенно важно: робот должен сразу понимать, что продаётся, для кого предназначено предложение и по какому запросу страницу можно показывать.
Если полный переход на SSR сейчас слишком дорог, начните с приоритетных шаблонов. Обычно это главная, категории, карточки товаров и страницы услуг. Второстепенные экраны приложения могут остаться на CSR, если они не должны привлекать поисковый трафик.
Исправить маршрутизацию
Каждому значимому разделу нужен постоянный адрес. Сервер должен возвращать по нему страницу с кодом 200, а не отправлять любой запрос на главную. При этом не следует маскировать отсутствующие страницы: удалённый URL должен отвечать 404 или 410, иначе поисковик увидит множество дублей.
При смене состояния интерфейса адрес должен обновляться логично. Фильтр, сортировка и пагинация требуют заранее принятого решения: какие варианты индексируются, какие закрываются от обхода, а какие объединяются канонической ссылкой. Бесконечное создание URL с десятками параметров быстро расходует бюджет обхода.
Настроить метаданные для каждого маршрута
У всех важных страниц должны быть собственные title, description, основной заголовок и канонический адрес. Нельзя оставлять один title для всего приложения. Для карточки услуги это может быть название услуги и регион работы, для категории, тип товаров и их назначение, если такие формулировки соответствуют реальному содержимому.
Метаданные нужно формировать с учётом конкретного маршрута, а не только менять текст после перехода в браузере. Проверьте, что при прямом обращении к URL сервер отдаёт правильную версию страницы и что после выполнения скриптов значения не заменяются на общие.
JavaScript, ссылки и динамический контент
В SPA распространена навигация без перезагрузки. Для пользователя это быстро и удобно, но поисковая система должна видеть структуру сайта. Используйте обычные ссылки для переходов между индексируемыми страницами и оставляйте кнопки для действий, которые действительно не создают отдельный URL.
Динамический контент нужно разделять по его назначению. Список товаров, текст услуги и характеристики должны быть доступны при загрузке страницы. Персональные рекомендации, содержимое корзины, результаты поиска по внутреннему каталогу и данные после авторизации обычно не нужно индексировать.
Осторожно работайте с вкладками и аккордеонами. Скрытый при первом отображении текст может индексироваться, если он присутствует в HTML и открытие не требует запроса пользователя. Но если содержимое запрашивается только после клика, поисковик может его не получить. Для важных коммерческих сведений лучше выводить хотя бы основную часть сразу.
После исправлений обновите Sitemap, проверьте ссылки и запросите переобход приоритетных URL. Скорость обновления зависит от сайта, частоты изменений и состояния обхода, поэтому не стоит ожидать мгновенного результата. В типичном проекте первые технические сигналы видны в течение нескольких дней, а оценка полного эффекта занимает от нескольких недель.
Типичные ошибки при работе с SPA
- Проверять только внешний вид страницы. То, что приложение работает в Chrome, не доказывает, что поисковик получил тот же контент. Сравнивайте исходный ответ сервера, итоговый DOM и отчёт проверки URL.
- Использовать один URL для всех разделов. Если категория или товар не имеют отдельного адреса, поисковику сложно сохранить и показать такую страницу в результатах.
- Делать навигацию только через кнопки. Обработчик JavaScript не заменяет нормальную ссылку. Важные переходы должны быть доступны через href.
- Отправлять роботу пустую оболочку. При большом каталоге это приводит к неполному содержимому и нестабильной обработке. Перенесите основные данные на серверный вывод или настройте предварительный рендеринг.
- Не проверять ошибки API. Если данные товаров приходят с ошибкой, страница визуально может выглядеть как шаблон без содержимого. Контролируйте ответы запросов и журналы сервера.
- Закрывать скрипты и стили в robots.txt. Роботу может понадобиться загрузить эти ресурсы, чтобы построить страницу. Ограничения должны быть обоснованными, а не добавленными по шаблону.
- Индексировать все варианты фильтров. Это создаёт тысячи похожих URL и дублирующийся контент. Сначала определите страницы с самостоятельным спросом, остальные ограничьте.
- Считать проблему решённой после одного переобхода. Нужно проверить несколько шаблонов и повторить контроль после обновления данных или сборки приложения.
В практике студии RDMN наиболее полезным оказывается не единичное исправление, а связка проверки шаблонов, маршрутов и данных. Если после технических работ страницы всё равно не получают показы, нужен отдельный анализ спроса, содержания и конкуренции, а не только повторная настройка JavaScript.
Частые вопросы
Можно ли продвигать сайт, полностью сделанный на React или Vue?
Да, технология сама по себе не мешает продвижению. Риск появляется, когда весь контент формируется только в браузере, маршруты недоступны напрямую, а сервер не отдаёт корректные HTML-страницы. При SSR, предварительном рендеринге и правильной маршрутизации такие проекты могут нормально индексироваться.
Нужно ли полностью отказываться от SPA?
Нет. SPA удобно для интерфейсов с частыми действиями и сложным состоянием. Обычно разумно разделить сайт: публичные страницы, которые должны получать поисковый трафик, сделать доступными в готовом HTML, а личный кабинет и интерактивные функции оставить приложением.
Почему страница есть в индексе, но не растёт в поиске?
Индексация означает только включение страницы в базу, а не хорошие позиции. Причина может быть в слабом содержании, несоответствии запросу, дублях, плохой внутренней структуре, скорости, неудобстве на мобильных устройствах или недостатке доверия к сайту. Для оценки всей системы полезно заказать SEO-продвижение, а не ограничиваться проверкой JavaScript.
Нужно ли закрывать от индексации страницы с фильтрами?
Не все фильтры нужно закрывать. Если комбинация формирует самостоятельную полезную страницу с понятным спросом, её можно включить в структуру сайта. Бессмысленные сочетания параметров лучше ограничить через правила обхода, канонические адреса или отсутствие внутренних ссылок, после проверки конкретной архитектуры.
Как понять, что серверный рендеринг действительно работает?
Откройте исходный код страницы и найдите в нём основной текст, заголовок, ссылки и метаданные. Затем проверьте несколько URL напрямую, без предварительного захода на главную. Дополнительно сравните результат в инструментах вебмастера и убедитесь, что после сборки приложения данные не исчезают.
Что делать: короткий план
- Составьте список приоритетных URL: услуги, категории, товары, статьи и страницы с реальным спросом.
- Проверьте для каждого адреса код ответа, доступность в Sitemap, robots-директивы и канонический URL.
- Сравните исходный HTML с итоговым DOM после выполнения JavaScript.
- Убедитесь, что сервер отдаёт содержимое напрямую, а запросы к API доступны без авторизации и не завершаются ошибками.
- Настройте уникальные title, description, заголовки и ссылки для каждого индексируемого маршрута.
- Замените кнопки навигации на обычные ссылки там, где переход создаёт отдельную страницу.
- Выберите способ вывода контента: SSR, предварительный рендеринг или смешанную архитектуру для приоритетных разделов.
- Ограничьте технические URL, бесконечные фильтры, дубли и страницы, которые не несут поисковой ценности.
- После публикации исправлений обновите Sitemap, отправьте важные адреса на переобход и проверьте результаты через несколько дней и недель.
- Если проблема затрагивает много шаблонов, начните с полноценной диагностики и зафиксируйте порядок работ в техническом задании. План продвижения нового проекта также стоит согласовать заранее, например по этапам, описанным в материале о первых 90 днях SEO-продвижения нового сайта.
Главный критерий прост: важная страница должна иметь собственный URL, возвращать корректный ответ сервера и содержать в доступном для робота виде тот материал, ради которого пользователь пришёл из поиска. Чем раньше это проверено на этапе разработки, тем дешевле исправления и тем предсказуемее дальнейшее продвижение.
Опишите задачу, и мы вернёмся в течение рабочего дня с вопросами и предварительной оценкой.
Обсудить задачу