Перейти к содержимому
Попробовать

Как SEO Crawler обрабатывает robots.txt

Перед началом каждого обхода SEO Crawler загружает /robots.txt сайта и применяет директивы из секции User-agent: *. Страницы, запрещённые через Disallow, не скачиваются — они не попадают в результаты аудита и не расходуют лимит страниц тарифа. В этой справке — как именно наш бот читает файл, какой User-Agent использует и как протестировать собственные правила.

Ищете теорию? Как устроен синтаксис robots.txt, какие директивы существуют и как правильно закрывать разделы — читайте в статье robots.txt для SEO: синтаксис, примеры и частые ошибки. Здесь речь только про нашу реализацию.
Проверить, разрешена ли страница

Введите URL страницы — краулер загрузит robots.txt вашего сайта и покажет, какое правило применяется к этому адресу.

User-Agent нашего бота

По умолчанию SEO Crawler представляется серверу такой строкой User-Agent:

SEOCrawler/1.0 (+https://seo-crawler.ru/bot)

Это значение пресета seocrawler. В настройках задачи (и в шаблоне расписания) можно выбрать другие пресеты:

Пресет User-Agent Когда применять
seocrawler SEOCrawler/1.0 (+https://seo-crawler.ru/bot) По умолчанию. Можно добавлять в allowlist на сервере.
chrome Без override (TLS-импeрсонация Chrome) Если сервер блокирует «не-браузерных» клиентов.
googlebot Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) Проверка того, как сайт отвечает Googlebot.
bingbot Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Проверка ответа для Bingbot.
В текущей реализации мы читаем только секцию User-agent: *. Если вы хотите разрешить сканирование именно SEO Crawler — пропишите нужные Allow-правила в общей секции, а не создавайте отдельную User-agent: SEOCrawler. Мы добавим поддержку именных секций в одном из ближайших обновлений.

Пример: разрешить обход нашему боту

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

User-agent: *
Disallow: /
Allow: /robots.txt

# Разрешаем нашему боту — он проверит только хедеры и код
# (ориентируемся на строку User-Agent в HTTP-запросе)

А затем в настройках задачи выберите пресет, который совпадает с вашим allowlist. Если allowlist настроен в Nginx/Apache по имени User-Agent — используйте пресет seocrawler. Если по «любому живому трафику» — chrome.

Fail-open политика

Если /robots.txt недоступен — отдал 5xx, ушёл в таймаут, упал на TLS-ошибке — наш бот действует по стратегии fail-open: считает, что ограничений нет, и обходит сайт полностью. Это соответствует RFC 9309 (Robots Exclusion Protocol) и совпадает с поведением Googlebot.

Код 404 для robots.txt интерпретируется как «файл отсутствует — значит, открыто всё». Это не баг и не наша самодеятельность — такое требование в стандарте. Если нужен полный запрет — разместите корректный robots.txt с Disallow: /, а не надейтесь, что отсутствующий файл защитит сайт.

Ответ на /robots.txt Что делает бот
200 OKПарсит правила, применяет Disallow/Allow/Crawl-delay
404 Not FoundСчитает, что ограничений нет — обходит всё (fail-open)
5xx, таймаут, обрыв соединенияСчитает, что ограничений нет (fail-open)
301/302 на /robots.txtПереходит по редиректу до 5 прыжков
Сертификат SSL невалидныйПовторяет запрос без проверки сертификата (fallback)

Как наш краулер следует Disallow

SEO Crawler пропускает URL, который попал под действие Disallow, ещё до HTTP-запроса. То есть запрос к серверу вообще не уходит. Такие URL:

  • не учитываются в счётчике обойдённых страниц;
  • не появляются в таблице «Все страницы» отчёта;
  • не расходуют лимит страниц тарифа;
  • не приводят к записи в логах сайта (бот туда просто не заходит).

Если вы ожидали увидеть страницу в отчёте, но её там нет — первым делом проверьте robots.txt. Типичный кейс: на сайте 500 страниц, а наш бот обошёл 40 — скорее всего, большая часть закрыта через Disallow. Запустите чекер выше, чтобы подтвердить догадку.

Вкладка Техническое в отчёте аудита SEO Crawler, раздел Индексация с карточками noindex, без canonical, canonical + noindex
Вкладка «Техническое» → раздел «Индексация». Страницы, закрытые через Disallow, сюда не попадают — они отфильтрованы ещё до скачивания. Видны только те, что обошлись, но имеют noindex.

Longest-match wins

Когда один URL подходит сразу под несколько правил, побеждает то, у которого длиннее путь. При равной длине — побеждает Allow. Это стандартная логика, которую использует и Googlebot:

User-agent: *
Disallow: /catalog/
Allow: /catalog/promo/

Результат: /catalog/shirts — закрыт (длина правила 9), /catalog/promo/2026 — открыт (длина Allow 15, побеждает).

noindex, meta robots и X-Robots-Tag

Это не про robots.txt, а про индексацию — но путать их очень легко. Разница простая:

Механизм Что запрещает Скачивается ли URL
robots.txt DisallowОбход (не даёт боту зайти)Нет
<meta name="robots" content="noindex">ИндексациюДа — мы скачиваем HTML и видим тег
HTTP X-Robots-TagИндексацию (в том числе PDF, изображений)В текущей версии не учитывается

Страницы с meta robots: noindex бот всё равно обходит — нужно же как-то узнать, что там стоит noindex. В отчёте они помечаются флагом и попадают в раздел «Индексация» на вкладке «Техническое». Это полезно для аудита: вы сразу видите, что, например, товарные карточки по ошибке стоят в noindex, или что /login зачем-то открыт для индексации.

Точечно проверить мета-теги конкретной страницы можно через инструмент анализа мета-тегов.

Тестирование своего robots.txt

Типичный рабочий сценарий — когда вы только что обновили robots.txt и хотите убедиться, что ничего лишнего не закрыли. Рекомендуемый порядок:

  1. Прогоните несколько URL через чекер в начале этой страницы. Подайте туда три-пять типовых адресов (главная, категория, товар, админка, сервисный URL). Чекер покажет, какое правило победило и почему.
  2. Запустите новый обход на дашборде. Если число обойдённых страниц в новом отчёте близко к предыдущему — ваш новый robots.txt не ломает индексацию. Если число резко упало — смотрите, что попало под Disallow.
  3. Сравните два обхода через отчёт «Сравнение» (доступен на тарифе Pro). Увидите, какие URL исчезли между двумя датами — это и есть страницы, которые только что попали под запрет.
  4. Убедитесь, что Sitemap указан директивой Sitemap: https://... — это помогает краулерам (включая нашего) найти все разделы сайта.

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

Disallow: / блокирует всё

Одна из самых частых ошибок — забытая строка Disallow: /, которую оставили после деплоя dev-окружения. Бот видит, что весь сайт закрыт, и обходит ровно ноль страниц. В отчёте будет статус «done», но pages crawled = 0. Если видите такое — первым делом смотрите свой robots.txt.

Забыли директиву Sitemap

Без Sitemap: https://example.com/sitemap.xml краулер (любой, не только наш) обходит сайт только по внутренним ссылкам. Если какой-то раздел слабо перелинкован — он не попадёт в аудит. Sitemap — обязательный пункт.

Кириллические URL без экранирования

Правило Disallow: /товары/ работать не будет — в robots.txt пути должны быть в percent-encoding: Disallow: /%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B/. Это требование RFC, и его соблюдают все крупные краулеры, включая Googlebot.

Пробелы и табуляции в начале строк

Парсер допускает пробелы, но некоторые CMS экспортируют robots.txt с BOM-меткой или экзотическими переводами строк — это ломает разбор. Откройте файл в обычном текстовом редакторе и убедитесь, что кодировка UTF-8 без BOM, переводы строк — LF.

Allow без Disallow

Писать просто Allow: / бессмысленно — по умолчанию всё и так разрешено. Allow имеет смысл только как перекрытие Disallow по longest-match.

Пример «правильного» robots.txt для сайта в SEO Crawler

User-agent: *
Disallow: /admin/
Disallow: /cart/
Disallow: /*?sort=
Disallow: /*?utm_
Allow: /admin/public/
Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml

В этом примере: закрыта админка (кроме /admin/public/), корзина и URL-параметры сортировки и UTM. Бот делает паузу 1 секунду между запросами. Sitemap указан.

Частые вопросы

Какой User-Agent использует бот SEO Crawler?

По умолчанию наш краулер представляется как SEOCrawler/1.0 (+https://seo-crawler.ru/bot). Это значение по умолчанию пресета «seocrawler». В настройках обхода можно также выбрать пресеты Chrome (без специального User-Agent, с TLS-импeрсонацией Chrome), Googlebot или Bingbot — тогда бот будет представляться соответствующей строкой. Секции с нашим именем пока обрабатываются через общую User-agent: *.

Как запретить только нашему боту, не трогая остальных?

В текущей версии SEO Crawler читает только секцию User-agent: *, поэтому персональная секция User-agent: SEOCrawler пока не имеет эффекта. Если нужно пустить нашего бота там, где всем запрещено, пропишите разрешение в секции User-agent: * через Allow. Для полного запрета используйте Disallow: / в этой же секции. Поддержка именных секций планируется.

Почему наш бот всё равно краулит страницу, которую я закрыл в robots.txt?

Проверьте три вещи. Во-первых, что секция написана для User-agent: *. Во-вторых, что правило совпадает по префиксу. В-третьих, что robots.txt отдаётся по адресу yoursite.ru/robots.txt с кодом 200 — если 404/5xx, у нас срабатывает fail-open. Для быстрой проверки используйте чекер в начале страницы.

Fail-open — это стандартное поведение или особенность SEO Crawler?

Это стандарт. По спецификации RFC 9309 (Robots Exclusion Protocol) при недоступности robots.txt краулер должен считать сайт полностью открытым. Так делают Googlebot, Bingbot и большинство SEO-инструментов. Ответ 404 тоже трактуется как «ограничений нет».

Поддерживаете ли вы Crawl-delay?

Да, если Crawl-delay указан в секции User-agent: *, наш бот добавляет паузу указанной длины (в секундах) между запросами. Если не задан — скорость определяется параметром «Скорость обхода» в настройках задачи (от 0,1 до 3 запросов в секунду).

Что с wildcards — звёздочка и знак доллара?

Поддерживаются. Звёздочка * заменяет любую последовательность символов, знак $ означает конец URL. Например, Disallow: /*?sort= заблокирует любые URL с параметром sort, а Disallow: /*.pdf$ — только файлы, оканчивающиеся на .pdf. Наша реализация совпадает с поведением Googlebot.

Как Allow работает внутри Disallow?

Побеждает правило с самым длинным совпадением по префиксу (longest-match wins). Если длина совпадений равна — побеждает Allow, как рекомендует спецификация Google. Пример: Disallow: /admin/ + Allow: /admin/public//admin/secret закрыт, /admin/public/page1 открыт.

Что с robots.txt на поддоменах?

Каждый поддомен — это отдельный robots.txt. Если вы обходите https://blog.example.com/, бот запросит https://blog.example.com/robots.txt, а не example.com/robots.txt. Наш краулер по умолчанию не уходит с домена, указанного в старте обхода.

Как протестировать свой robots.txt перед публикацией?

Выложите новый robots.txt, затем используйте чекер на этой странице: он покажет вердикт «Разрешено/Заблокировано» для любого URL и какое правило победило. Для массовой проверки запустите новый обход и сравните число обойдённых страниц с предыдущим.

Обрабатываются ли noindex и X-Robots-Tag?

Meta robots noindex в HTML обрабатывается: URL скачивается (потому что noindex не запрещает обход, он запрещает индексацию), но в отчёте помечается флагом «noindex». HTTP-заголовок X-Robots-Tag в текущей версии не учитывается. Если нужен полный запрет обхода, используйте именно robots.txt.