Как Googlebot и Яндекс видят сайт

Бот — не обычный браузер: разбираем рендеринг и бюджет обхода, чтобы понимать, что реально видит поисковик.

Бюджет краулинга (crawl budget) — ограниченное число запросов, которое бот готов потратить на ваш сайт за период. Тратить его на мусор — значит не дать боту дойти до важных страниц.

Бот видит не то же, что вы

Когда вы открываете страницу в браузере, вы дожидаетесь всех запросов, шрифтов, картинок и анимаций. Бот ведёт себя экономнее: у него лимит времени и ресурсов на страницу, он может не выполнить часть JS, не дождаться медленных запросов и проигнорировать то, что появляется только после действий пользователя (клик, скролл).

Главный практический принцип: важный контент должен присутствовать в HTML сразу или появляться быстро и без действий пользователя. Контент, спрятанный за «бесконечной прокруткой» или загружаемый по клику, бот может не увидеть.

Две волны индексации

Googlebot обрабатывает страницу в две волны. Первая — мгновенный разбор сырого HTML. Вторая — рендеринг JavaScript, который ставится в отдельную очередь и может выполниться спустя время (иногда дни). Это значит, что для чистого client-side рендеринга индексация задерживается, а часть контента может вообще не дойти.

Волна 1 (сразу):  скачали HTML -> разобрали то, что есть в исходнике
Волна 2 (позже):  очередь рендера -> запустили JS -> увидели итоговый DOM
                  (может быть отложено на часы/дни и ограничено бюджетом)

Как проверить, что видит бот

Не доверяйте «View Source» в браузере с включённым JS — вы видите уже отрендеренный DOM. Чтобы увидеть то, что получает бот в первой волне, смотрите именно сырой ответ сервера:

# Сырой HTML, как его получает бот первой волной
curl -s https://codechick.io/ | head -50

# Притворимся Googlebot через User-Agent
curl -s -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
  https://codechick.io/tutorials

Если в сыром HTML нет вашего основного текста и заголовков — значит, контент существует только после JS, и это риск для индексации. В Google Search Console есть инструмент «Проверка URL», который показывает отрендеренный ботом HTML и скриншот.

Как работает под капотом: бюджет краулинга

Бюджет складывается из двух частей: crawl rate limit (сколько запросов сервер выдерживает без деградации) и crawl demand (насколько поисковику интересен ваш сайт). На больших сайтах бюджет — реальное ограничение: если бот тратит обход на тысячи дублей, фильтров и параметров URL, до новых важных страниц он доходит медленно.

Что экономит бюджет: закрытие в robots.txt бесполезных для поиска URL (корзина, фильтры, поиск по сайту), отсутствие цепочек редиректов, быстрый ответ сервера, корректные коды состояния (404 для несуществующего, а не 200 с пустой страницей).

Частые ошибки

  • «В браузере же всё видно». View Source с JS показывает отрендеренный DOM, а не то, что получил бот. Проверяйте сырой ответ сервера.
  • Контент за скроллом/кликом. Бот не скроллит и не кликает — то, что грузится только по действию, может остаться невидимым.
  • Слив бюджета на мусор. Тысячи URL с параметрами фильтров и сортировок съедают обход. Управляйте этим через robots.txt и canonical.

Итог

  • Бот экономнее браузера: лимит ресурсов, отложенный рендер JS, игнор контента за действиями пользователя.
  • Google индексирует в две волны: сырой HTML сразу, JS-рендер — позже и не гарантированно.
  • Бюджет краулинга ограничен; не давайте боту тратить его на дубли и мусорные URL.
Проверьте себя
1. Почему «View Source» в браузере с включённым JavaScript — плохой способ проверить, что видит бот?
AБраузер показывает сжатый HTML
BОн показывает уже отрендеренный DOM, а не сырой ответ сервера, который получает бот первой волной
CView Source доступен только в Chrome
DБот вообще не использует HTML
2. Что такое бюджет краулинга?
AДеньги, которые платят Google за индексацию
BЛимит на размер одной страницы
CОграниченное число запросов, которое бот тратит на сайт за период
DСкорость интернет-соединения сервера
3. Как Googlebot обрабатывает страницу с client-side рендерингом?
AПолностью игнорирует — JS не поддерживается
BВ две волны: сначала сырой HTML, потом отложенный рендер JS, который не гарантирован
CМгновенно рендерит весь JS наравне с HTML
DЗапрашивает рендер у владельца сайта