robots.txt: что он может и чего не может против ботов
Содержание
Поделиться
robots.txt может попросить автоматического клиента не ходить по части адресов и этим снизить обход у тех, кто файл читает. Против бота, который протокол не соблюдает, он не может ничего: правила не являются разрешением на доступ, а страница от запрета в файле недоступной не становится.

Подмена имени робота и скликивание рекламы — разные задачи. Кликфрод живёт в расходе объявлений. Файл в корне сайт от кликов не защищает. Кто нажимает объявления, разобрано в статье «Кто и зачем скликивает рекламу». Недействительные клики и возврат за скликивание считаются в рекламном кабинете, а не в строке Disallow.
Просьба, а не замок
RFC 9309 задаёт протокол исключения роботов: владелец сервиса просит автоматических клиентов соблюдать правила доступа к URI. Раздел 1 прямо пишет, что эти правила не являются формой авторизации доступа. Группа без правил в конце файла неявно разрешает всё. Если для токена робота нет своей группы и нет группы *, правила не применяются. URI самого /robots.txt разрешён неявно. RFC описывает клиентов, которые протокол соблюдают. Он не обещает, что произвольная программа его прочитает.
Документация Google разделяет обход и индексацию. Запрет Googlebot в robots.txt не мешает адресу появиться в результатах поиска. Чтобы адрес не индексировался, нужен noindex. Чтобы страницу не открыл ни робот, ни человек, нужна другая мера, например пароль. Блокировка Googlebot задевает Поиск, Discover, Картинки, Видео и Новости.
У Яндекса запрет тоже не вынимает страницу из поиска. Справка Вебмастера пишет, что файл ограничивает обход и может снизить нагрузку. Страницы, ограниченные в файле, могут участвовать в поиске. Чтобы убрать их, нужен noindex в HTML или HTTP-заголовке, и такие страницы как раз не надо закрывать в robots.txt: иначе робот не увидит указание. Если файл не выполняет требования (не больше 500 КБ, имя robots.txt в корне, ответ 200 либо редирект на другой robots.txt с ответом 200), сайт считается открытым для индексирования. Кириллица в файле и в HTTP-заголовках сервера запрещена: домен пишут в Punycode, путь — в кодировке сайта. Роботы других систем могут читать директивы иначе.
Что Google поддерживает, а что нет
Google поддерживает user-agent, allow, disallow и sitemap. Поля crawl-delay в списке нет. Файл больше 500 КиБ: всё после предела игнорируется. Ответ 4xx, кроме 429, Google читает так, будто годного robots.txt нет, то есть ограничений на обход нет. Коды 401 и 403 для снижения частоты обхода справка использовать не велит: на частоту они не влияют. Запрет обхода не даёт проиндексировать содержимое, но адрес может остаться в результатах без сниппета. Это правила Googlebot, не чужого парсера.
С 22 февраля 2018 года Яндекс тоже не учитывает Crawl-delay. Скорость задаётся в Вебмастере на странице «Скорость обхода», отдельно для основного домена и каждого поддомена. По умолчанию включено «Доверять Яндексу». Значение, заданное вручную, для робота рекомендация: фактическая скорость может отличаться.
Имя в заголовке ещё не робот
Документация Google пишет, что строку User-Agent робота Google часто подставляют другие краулеры. Проверять запрос нужно обратным DNS по IP или сверкой IP со опубликованными диапазонами, а не по тексту заголовка. Обычные краулеры Google при автоматическом обходе соблюдают robots.txt. Краулеры особых случаев могут его не соблюдать. Загрузчики, которые запускает сам пользователь, robots.txt игнорируют, потому что запрос инициировал человек.
Чужой робот может назваться и роботом Яндекса. Проверка из справки Вебмастера: IP из лога, обратный DNS, имя должно кончаться на yandex.ru, yandex.net или yandex.com, затем прямой DNS. Если прямой адрес не совпал с исходным, имя поддельное. Справка предпочитает этот способ списку IP, потому что внутренние сети Яндекса меняются. Часть роботов Яндекса качает документы не для индексации и может не слушаться User-agent: *. Отдельные ограничения robots.txt робот может обойти, если у Яндекса есть договор с владельцем сайта.
| Проверка | Что она показывает |
|---|---|
| Текст User-Agent | Только заявленное имя. Его подставляют и чужие краулеры |
| Обратный и прямой DNS | Совпало ли имя с адресом. Для Яндекса имя должно кончаться на yandex.ru, yandex.net или yandex.com |
Disallow | Просьба к клиенту, который её читает |
noindex | Просьба не индексировать. Страницу, закрытую в robots.txt, так не прячут: робот не увидит указание |
Закрытый путь как признак, не как замок
В разделе Honeypots памятка OWASP называет приём: в robots.txt закрывают приманку-путь, и запрос к этому пути считают признаком клиента, который директиву не соблюдает. Клиентов, которые протокол читают, страница относит к тем, кто на закрытый путь не пойдёт.
Правила по-прежнему не запирают страницу. Закрытый путь сам по себе доступ не отменяет: его можно открыть. Запрос к приманке — признак, что клиент файл не соблюдает, а не доказательство, что каталог уже защищён. Доли ложных срабатываний на странице нет. Как прятать путь и как его обходить, сюда не переносится.