
Сайт красивый, быстрый, современный — а в поиске его нет. Открываешь исходный код страницы, а там пустой контейнер и подключённый скрипт: весь текст, каталог, цены и меню появляются только после того, как браузер выполнит JavaScript. Я в SEO с 2005 года и с такими проектами сталкиваюсь регулярно, особенно после переезда на модный фронтенд-фреймворк. Разберу, как поисковые роботы на самом деле работают со скриптами, почему индексация задерживается, что проверять и как сделать контент видимым без переписывания всего проекта.
Как робот обрабатывает страницу: две стадии вместо одной
Упрощённое представление «робот зашёл и всё увидел» неверно для сайтов на скриптах. Обработка разбита минимум на две стадии.
Сначала работает обход: робот скачивает HTML-документ по адресу, разбирает его как текст, достаёт ссылки и содержимое, которое там уже есть. Если в документе только контейнер и подключение скрипта, на этой стадии робот не видит почти ничего.
Затем страница попадает в очередь на рендеринг. Отдельная подсистема запускает браузерный движок, выполняет скрипты, дожидается загрузки данных и получает итоговый вид документа. Только после этого содержимое становится доступным для индексирования и переоценки ссылок.
Разница между стадиями — не техническая деталь, а источник почти всех проблем. Ресурсы на рендеринг ограничены, очередь общая на весь интернет, и попадание в неё не мгновенное.
| Стадия | Что происходит | Что видит робот |
|---|---|---|
| Обход | Загрузка исходного документа | Только то, что есть в HTML сразу |
| Очередь рендеринга | Ожидание свободных ресурсов | Ничего, страница ждёт |
| Рендеринг | Выполнение скриптов и запросов данных | Итоговое содержимое, если скрипты отработали |
| Индексирование | Разбор итогового документа | Текст, ссылки, разметка после рендеринга |
Почему это тормозит индексацию
Пока страница ждёт рендеринга, её содержимого для поиска не существует. Для нового раздела это означает отложенный старт, для обновлённой страницы — задержку в подхвате правок, для интернет-магазина — устаревшие цены и наличие в выдаче.
Хуже другое: ссылки, которые появляются только после выполнения скриптов, тоже не видны на стадии обхода. Если внутренняя перелинковка и пагинация каталога построены на скриптах, робот не находит новые адреса до рендеринга, а значит, не ставит их в очередь на обход. Получается цепочка задержек, где каждый уровень вложенности добавляет свой круг ожидания.
Отдельно про поисковые системы вообще: разные роботы обрабатывают скрипты по-разному и с разной полнотой. Часть систем и сервисов — включая ботов социальных сетей и мессенджеров, которые собирают превью ссылок, — скрипты не выполняют вовсе. Рассчитывать, что «все всё отрендерят», не стоит.
Что именно ломается чаще всего
| Что реализовано на скриптах | Последствие |
|---|---|
| Основной текст страницы | Страница считается пустой или тонкой |
| Меню и внутренние ссылки | Разделы не обходятся, вес не передаётся |
| Пагинация каталога | Индексируется только первая страница списка |
| Заголовок и описание страницы | В выдаче показывается шаблонный текст со всех страниц |
| Цены, наличие, характеристики | Данные не попадают в товарную разметку |
| Хлебные крошки и разметка | Расширенные сниппеты не формируются |
| Подгрузка по прокрутке | Часть каталога недоступна роботу в принципе |
| Смена адреса без перезагрузки | Разное содержимое по одному адресу |
Отдельная беда — закрытые от индексации служебные каталоги со скриптами и стилями. Если файлы, необходимые для отрисовки, запрещены в robots.txt, рендеринг получится неполным, и робот увидит поломанную страницу вместо нормальной. Эту ошибку я встречаю до сих пор, хотя она из разряда элементарных.
Ещё один частый случай — контент, который появляется только после действия пользователя: клика по вкладке, нажатия «показать полностью», прокрутки до блока. Робот таких действий не совершает. Всё, что спрятано за взаимодействием и не присутствует в документе, для поиска не существует.
Практический разбор: как проверить свой сайт за полчаса
Проверка не требует специальных инструментов, достаточно браузера и панели вебмастера.
Шаг первый. Откройте исходный код страницы — именно исходный код, а не панель разработчика с уже собранным деревом элементов. Это разные вещи: панель показывает документ после выполнения скриптов, исходный код — то, что пришло с сервера. Поищите в нём фрагмент вашего основного текста. Не нашли — контент на стадии обхода невидим.
Шаг второй. Отключите выполнение скриптов в браузере и загрузите страницу заново. Останутся текст, заголовки, меню, ссылки на разделы? Если экран пустой, у робота на первой стадии картина такая же.
Шаг третий. Проверьте ссылки. Ссылка должна быть настоящей ссылкой с адресом в атрибуте, а не элементом с обработчиком клика. Кликабельный блок без адреса роботом как переход не воспринимается.
Шаг четвёртый. Возьмите редкую фразу с проблемной страницы и поищите её в поиске вместе с адресом сайта. Если фраза не находится, а страница в индексе есть — содержимое не дошло.
Шаг пятый. Загляните в инструмент проверки страницы в панели вебмастера и сравните то, что видит поисковая система, с тем, что видите вы. Заодно проверьте, не блокируются ли служебные файлы.
| Симптом | Что проверить | Вероятная причина |
|---|---|---|
| Страницы в индексе, но текста в них нет | Исходный код документа | Контент подгружается скриптом |
| Индексируется только часть каталога | Пагинация и подгрузка по прокрутке | Нет ссылок на последующие страницы |
| Одинаковые заголовки в выдаче | Заголовок в исходном коде | Заголовок ставится скриптом |
| Правки долго не подхватываются | Дата последнего обхода в вебмастере | Задержка очереди рендеринга |
| Разделы не обходятся | Наличие адресов в ссылках меню | Навигация без настоящих ссылок |
| Страница отдаётся сломанной | Запреты в robots.txt | Заблокированы скрипты и стили |
Как сделать контент видимым роботу
Вариантов несколько, и выбор зависит от того, насколько глубоко проект завязан на скриптах.
| Подход | Суть | Кому подходит |
|---|---|---|
| Отрисовка на сервере | Сервер отдаёт готовый HTML, скрипты добавляют интерактив | Оптимальный вариант для нового проекта |
| Предварительная генерация | Страницы собираются заранее и лежат готовыми файлами | Каталоги и разделы, которые редко меняются |
| Отдача готового HTML роботам | Промежуточный слой отдаёт заранее отрисованную копию | Костыль для действующего проекта без переписывания |
| Гибридная схема | Ключевое содержимое в HTML, второстепенное скриптами | Магазины и сервисы с большой интерактивной частью |
| Полная отрисовка в браузере | Весь контент собирается скриптом на стороне клиента | Личные кабинеты и закрытые разделы, не нужные в поиске |
Практическое правило, которым я пользуюсь при постановке задачи разработчикам: всё, что должно ранжироваться, обязано присутствовать в исходном документе. Тексты, заголовки, метаданные, основные ссылки, разметка товаров, хлебные крошки. Всё, что относится к удобству — фильтры, калькуляторы, галереи, подсказки, — может собираться скриптами сколько угодно.
Если проект только проектируется, вопрос решается на старте: при создании сайта выбор схемы отрисовки стоит обсуждать вместе с разработчиком до написания первой строки кода, а не после того, как страницы не попали в индекс. Для действующего сайта чаще всего хватает точечной доработки сайта: вывести в HTML текст, заголовки и навигацию, а интерактив оставить как есть. Полное переписывание требуется реже, чем принято думать.
Чего делать не стоит
- Закрывать служебные каталоги со скриптами и стилями от индексации. Робот должен иметь возможность собрать страницу так же, как её собирает браузер.
- Делать навигацию на элементах с обработчиками кликов. Ссылка — это адрес в атрибуте, всё остальное для робота не переход.
- Прятать основной текст за вкладками и кнопками «показать ещё». Держите его в документе, а сворачивайте визуально.
- Строить каталог только на подгрузке по прокрутке. Нужна параллельная нормальная пагинация ссылками.
- Отдавать роботу и пользователю разное содержимое. Предварительная отрисовка допустима, подмена смысла — нет.
- Менять адрес без смены содержимого документа. Каждому значимому состоянию — свой адрес со своим содержанием.
- Полагаться на тег
noscriptкак на решение. Это заплатка, а не способ доставки основного содержания. - Считать проблему решённой после одной проверки. После каждого обновления фронтенда проверку нужно повторять.
Частые вопросы
Правда ли, что поисковики давно научились выполнять скрипты? Научились, но с оговорками: это отдельная стадия, она откладывается во времени и на неё тратятся ограниченные ресурсы. Возможность отрендерить страницу не равна гарантии, что это произойдёт быстро и полностью. Плюс далеко не все системы, читающие ваш сайт, вообще выполняют скрипты.
Насколько велика задержка индексации из-за рендеринга? Она непостоянная и зависит от того, насколько активно робот работает с вашим сайтом, от объёма и от тяжести самих скриптов. На небольших редко обновляемых сайтах задержка может быть значительной. Практический вывод: чем важнее скорость подхвата правок, тем меньше содержимого должно зависеть от скриптов.
Можно ли отдавать роботу заранее отрисованную версию? Да, это рабочая практика, если содержимое совпадает с тем, что видит пользователь. Проблемой становится только подмена: когда роботу показывают один текст, а посетителю другой. Отличия в оформлении и отсутствие интерактива нарушением не считаются.
Как быть с фильтрами в каталоге на скриптах? Разделить сценарии. Комбинации фильтров, под которые есть реальный спрос, должны быть отдельными адресами с обычным содержимым в HTML. Остальные варианты можно оставить работать скриптами и закрыть от индексации, чтобы не плодить бесконечные адреса.
С чего начать, если сайт уже сделан на фреймворке и не индексируется? С инвентаризации: какие типы страниц должны приносить трафик и что из их содержимого отсутствует в исходном коде. Обычно проблемных типов оказывается два-три, и решаются они локальными правками. Такой разбор — стандартная часть технического аудита сайта, и делать его нужно до того, как принимать решение о переписывании проекта.
Чеклист
- Откройте исходный код ключевых типов страниц и найдите в нём основной текст.
- Загрузите сайт с отключёнными скриптами: должны остаться тексты, заголовки и навигация.
- Проверьте, что все ссылки меню и пагинации содержат настоящие адреса.
- Убедитесь, что заголовки и описания страниц формируются на сервере, а не скриптом.
- Проверьте, что служебные файлы скриптов и стилей не запрещены в
robots.txt. - Сравните вид страницы в инструменте проверки вебмастера с тем, что видите вы.
- Проверьте наличие товарной разметки и хлебных крошек в исходном документе.
- Проверьте доступность всех страниц каталога без прокрутки и кликов.
- Убедитесь, что каждому значимому состоянию соответствует свой адрес.
- Замерьте, за сколько дней подхватываются правки, и сравните до и после изменений.
- Внесите проверку рендеринга в регламент: повторять после каждого релиза фронтенда.
Скрипты сами по себе продвижению не мешают. Мешает ситуация, когда от них зависит то, что обязано быть в документе сразу. Разделите содержимое и интерактив — и вопрос влияния JavaScript на поиск закроется на уровне архитектуры, а не бесконечных проверок индексации.
Если нужно SEO-специалист Анатолий Кузнецов — помогу вывести сайт в топ Яндекса и удержать позиции.
Увеличьте позиции и продажи вашего сайта
Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:
Остались вопросы по продвижению?
Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →