SEO · Разработка
Настройка robots.txt: полное руководство со всеми директивами
Анна

Robots.txt — маленький текстовый файл, но ошибка в нем способна закрыть от Google и Яндекса весь сайт одной строкой. Мы регулярно находим такие файлы на аудитах: забытый Disallow: / после разработки, заблокированные стили, устаревшие директивы, которые роботы давно не читают. В этой статье собрали все директивы, спецсимволы, актуальный список ботов и готовые примеры — от банальных до тех случаев, которые проверяют редко.
Что такое robots.txt
Robots.txt — текстовый файл в корне сайта, который сообщает поисковым роботам и другим автоматическим краулерам, какие разделы сайта можно сканировать, а какие — нет. Он работает по принципу Robots Exclusion Protocol — соглашению, которому на практике следуют больше 30 лет, а в 2022 году его закрепили официальным интернет-стандартом RFC 9309.
Важно понимать границы: robots.txt — это рекомендация для добросовестных роботов, а не защита. Вредоносные боты и парсеры его просто игнорируют, а сам файл лежит в открытом доступе — значит, перечислять в нем чувствительные адреса (например, /admin-panel-secret) не стоит: вы буквально укажете на них всем, кто откроет файл.
Как работает: правила, которые нужно знать до синтаксиса
- Только один файл на сайт, и строго в корне. Файл должен лежать по адресу
https://site.ru/robots.txt. Файлhttps://site.ru/blog/robots.txtроботы не найдут и не учтут. - Свой файл на каждый хост.
https://site.ruиhttps://www.site.ru— разные хосты с точки зрения robots.txt, как иhttp://иhttps://, и поддомены (shop.site.ru). Формально каждому нужен собственный файл (или как минимум одинаковое содержимое, отдаваемое с каждого адреса). - Кодировка — UTF-8. Кириллицу в путях и доменах нужно преобразовывать в Punycode/percent-encoding, а не писать как есть.
- Регистр важен для путей, но не для названий директив.
Disallow: /BasketиDisallow: /basket— это разные правила. А вотDISALLOW,disallowиDisallowроботы поймут одинаково. - Ответ сервера должен быть 200 OK. По данным Google, при кодах 4xx (кроме 429) сайт считается полностью открытым для сканирования; при 5xx в первые 12 часов сканирование останавливается, а затем используется последняя рабочая версия файла до 30 дней. У Яндекса логика похожая: если файл недоступен, сайт по умолчанию считается открытым для индексирования.
- Ограничение по размеру — 500 КБ и у Google, и у Яндекса. Это большой запас, но переусердствовать с автогенерируемыми списками параметров не стоит.
- Файл кэшируется. Google обычно перечитывает файл не чаще раза в 24 часа, Яндекс — с похожей периодичностью. Изменения не применяются мгновенно.
Синтаксис: все директивы
User-agent — к какому роботу относится правило
Обязательная директива, с нее начинается каждая секция правил.
User-agent: *
* означает «для всех роботов, для которых нет отдельной секции». Можно указать конкретного бота — тогда более специфичная секция полностью перекрывает общую для этого робота (секции не суммируются):
User-agent: Googlebot
Disallow — что запретить сканировать
Disallow: /basket/
Запрещает обход указанного пути и всего, что находится глубже. Пустое значение означает «ничего не запрещено»:
Disallow:
Allow — что явно разрешить
Allow: /basket/wishlist/
Нужен, когда внутри закрытого раздела есть отдельная страница или подпапка, которую нужно оставить открытой (примеры — ниже, в разделе про приоритет правил).
Sitemap — где искать карту сайта
Sitemap: https://flowweb.ru/sitemap.xml
Единственная директива, которую можно (и стоит) указывать вне секций User-agent — она относится ко всему файлу сразу. Адрес указывается полностью, с протоколом и доменом. Директив Sitemap может быть несколько, если у сайта не одна карта сайта.
Clean-param — только для Яндекса
User-agent: Yandex
Clean-param: utm_source&utm_medium&utm_campaign /catalog/
Указывает, что get-параметры в адресе (метки, идентификаторы сессии, сортировки) не меняют содержимое страницы, и их можно игнорировать при индексации — так несколько адресов с разными параметрами объединяются в один документ вместо создания дублей. Формат: Clean-param: параметр1&параметр2 [префикс пути], до 500 символов на правило, допустимые символы — A-Za-z0-9.-/*_. По документации Яндекса, директива межсекционная (можно разместить в любом месте файла), но проще держать её в отдельной секции User-agent: Yandex. У Google аналога нет — там дубли по параметрам решаются через canonical.
Crawl-delay — директива больше не действует
Crawl-delay: 2
Раньше задавала минимальную паузу между запросами робота в секундах. Google эту директиву не поддерживал никогда, а Яндекс отказался от нее 22 февраля 2018 года — сейчас скорость обхода настраивается в разделе «Скорость обхода» Яндекс.Вебмастера. Указывать эту строку не вредно, но и бессмысленно — оба поисковика её проигнорируют. (Bing и некоторые другие системы Crawl-delay всё ещё читают, если у вас есть трафик оттуда.)
Host — директива отменена
Host: flowweb.ru
Указывала на главное зеркало сайта. Яндекс отказался от неё в марте 2018 года — сейчас для смены домена используют раздел «Переезд сайта» в Вебмастере и постоянный редирект 301. Если строка осталась в старом robots.txt — можно смело удалять, эффекта она давно не дает.
# — комментарии
# Закрываем корзину от индексации
Disallow: /basket/
Всё после # до конца строки робот игнорирует — удобно оставлять пояснения для будущих себя или коллег.
Спецсимволы: * и $
*— любое количество любых символов (в том числе ноль). По умолчанию у Яндекса*неявно подразумевается в конце каждого правила, если явно не закрыть его знаком$.$— конец адреса, отменяет неявную звездочку в конце.
Разница хорошо видна на примере:
| Правило | /product |
/product.html |
/product/123 |
|---|---|---|---|
Disallow: /product |
закрыт | закрыт | закрыт |
Disallow: /product$ |
закрыт | открыт | открыт |
Disallow: /*.html$ |
открыт | закрыт | открыт |
Практический пример — закрыть все PDF-файлы на сайте, где бы они ни лежали:
Disallow: /*.pdf$
Приоритет правил: что будет, если Allow и Disallow пересеклись
И Google, и Яндекс выбирают самое специфичное правило — то есть с самым длинным совпадающим путем, а не то, что стоит выше или ниже в файле. При равной длине совпадения побеждает Allow.
User-agent: *
Disallow: /catalog/
Allow: /catalog/promo/
Здесь /catalog/promo/landing будет открыт: путь в Allow длиннее и совпадает точнее, чем Disallow: /catalog/. Дальше это правило можно комбинировать сколько угодно глубоко — приоритет всегда у самого длинного и точного совпадения, а не у порядка строк в файле.
Полный список команд с примерами
Ниже — конструктор из готовых блоков: собирайте нужный robots.txt из этих кусочков.
Закрыть сайт целиком (использовать только на этапе разработки, не на боевом домене):
User-agent: *
Disallow: /
Открыть сайт целиком:
User-agent: *
Disallow:
Закрыть один раздел:
Disallow: /basket/
Закрыть один файл:
Disallow: /price-old.pdf
Закрыть все файлы определенного типа:
Disallow: /*.pdf$
Закрыть страницы с определенным параметром в адресе (например, ?sort=):
Disallow: /*?sort=
Закрыть раздел, но оставить открытой одну страницу внутри:
Disallow: /catalog/
Allow: /catalog/popular/
Закрыть страницы поиска и служебные разделы:
Disallow: /search/
Disallow: /cart/
Disallow: /*?
Разные правила для разных роботов:
User-agent: *
Disallow: /admin/
User-agent: Googlebot-Image
Disallow: /photos/private/
User-agent: GPTBot
Disallow: /
Несколько карт сайта:
Sitemap: https://site.ru/sitemap.xml
Sitemap: https://site.ru/sitemap-images.xml
Боты, которых стоит знать
Поисковые роботы
| Бот | Что делает |
|---|---|
| Googlebot | Основной робот Google (сайты для десктопа и мобильных) |
| Googlebot-Image | Индексация изображений Google |
| Googlebot-Video | Индексация видео Google |
| AdsBot-Google | Проверка качества посадочных страниц для Google Реклама |
| YandexBot | Основной робот Яндекса |
| YandexImages | Индексация изображений Яндекса |
| YandexVideo | Индексация видео Яндекса |
| YandexMetrika | Обход страниц по заданию Яндекс.Метрики |
| YandexDirect | Проверка объявлений и посадочных страниц Яндекс.Директа |
ИИ-краулеры
Отдельная и быстро растущая категория — боты, которые собирают контент для обучения языковых моделей или отвечают на запросы пользователей в реальном времени. Это разные боты одной компании с разными задачами: блокировка одного не влияет на другого.
| Бот | Компания | Задача |
|---|---|---|
| GPTBot | OpenAI | Сбор данных для обучения моделей |
| OAI-SearchBot | OpenAI | Показ сайта в живом поиске ChatGPT |
| ChatGPT-User | OpenAI | Переход по ссылке, когда пользователь сам просит открыть сайт в ChatGPT |
| ClaudeBot | Anthropic | Сбор данных для обучения моделей |
| Claude-SearchBot | Anthropic | Индекс для поиска в Claude |
| Claude-User | Anthropic | Запрос по инициативе пользователя в Claude |
| PerplexityBot | Perplexity | Индексация для ответов Perplexity |
| Google-Extended | Использование контента для обучения моделей Google (не влияет на обычный поиск) | |
| Applebot-Extended | Apple | Использование контента для обучения моделей Apple |
| Amazonbot | Amazon | Сбор данных, в том числе для Alexa |
| Meta-ExternalAgent | Meta | Сбор данных для обучения моделей Meta |
| CCBot | Common Crawl | Открытый архив веба, которым пользуются многие ИИ-компании |
| Bytespider | ByteDance | Сбор данных для моделей ByteDance (TikTok) |
Мы подробно разбирали, как это решение влияет на видимость бренда в ответах нейросетей, в статье про GEO-оптимизацию интернет-магазина — коротко: если эти боты заблокированы, сайт физически не может быть процитирован в ChatGPT, Claude или Perplexity.
Готовые примеры под разные сайты
Минимальный универсальный
User-agent: *
Disallow:
Sitemap: https://site.ru/sitemap.xml
Интернет-магазин на Webasyst
User-agent: *
Disallow: /cart/
Disallow: /account/
Disallow: /search/
Disallow: /*?sort=
Disallow: /*?filter=
User-agent: Yandex
Clean-param: utm_source&utm_medium&utm_campaign&from
Disallow: /cart/
Disallow: /account/
Sitemap: https://site.ru/sitemap.xml
Сайт на WordPress
Классический пример из официальных рекомендаций WordPress — закрывает служебные файлы движка, но не трогает то, что нужно для оформления сайта:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://site.ru/sitemap.xml
Наш собственный пример: Next.js
На flowweb.ru robots.txt не статический файл, а генерируется кодом — app/robots.js, который Next.js на лету превращает в текстовый ответ по адресу /robots.txt. Вот он целиком:
export default function robots() {
return {
rules: {
userAgent: "*",
allow: "/",
disallow: ["/AuthForm", "/personalAccount"],
},
sitemap: "https://flowweb.ru/sitemap.xml",
};
}
Так же на лету у нас собирается и сам файл sitemap.xml — при публикации новой статьи в блоге или кейса он обновляется без ручного вмешательства. Подробно про то, как устроена такая автоматизация, можно почитать в статье про llms.txt и llms-full.txt — там разобран соседний по смыслу файл, который тоже отдается динамически.
Сайт, который хочет попасть в ответы нейросетей
User-agent: *
Disallow: /cart/
Disallow: /account/
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
Sitemap: https://site.ru/sitemap.xml
Сайт, который хочет ограничить обучение ИИ на своем контенте
User-agent: *
Disallow: /cart/
Disallow: /account/
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: CCBot
Disallow: /
Sitemap: https://site.ru/sitemap.xml
Обратите внимание: в этом варианте боты для поиска в реальном времени (OAI-SearchBot, Claude-SearchBot, PerplexityBot) не заблокированы отдельно — если не указать для них правило, они попадут под общую секцию User-agent: *, где сканирование разрешено. Решайте осознанно для каждого бота, а не полагайтесь на то, что общее правило само разберется правильно.
Частые ошибки
Disallow: /остался после запуска сайта. Самая дорогая ошибка: на тестовом домене строку добавили специально, чтобы черновик не попал в индекс, а после переноса на боевой домен забыли убрать. Сайт может месяцами не индексироваться, и владелец узнает об этом не сразу.- Заблокированы CSS и JS. Роботу нужен доступ к стилям и скриптам, чтобы отрисовать страницу и оценить, как она выглядит для посетителя. Блокировка этих файлов может помешать корректной оценке сайта.
- Попытка «убрать страницу из поиска» через Disallow. Как уже говорили выше — это не работает так: сканирование запрещается, но не индексация уже известной поисковику страницы. Для удаления нужен
noindexили инструмент удаления URL в панели вебмастера. - Кириллица в адресах без Punycode. Такие строки робот может не распознать как валидное правило.
- Файл не в корне домена.
site.ru/site/robots.txtне будет прочитан. - Расчет на то, что Crawl-delay и Host все еще работают. Как показано выше, это давно не так.
- robots.txt используется как единственная защита закрытого раздела. Файл публично читается кем угодно — для реальной защиты нужна авторизация, а не строчка в текстовом файле.
- Опечатка
DisalowвместоDisallow. Директиву с опечаткой роботы не распознают и просто проигнорируют — правило тихо перестанет работать.
Как проверить свой robots.txt
- Откройте файл напрямую в браузере:
ваш-сайт.ru/robots.txt— самый быстрый способ увидеть, что реально отдает сервер. - Google Search Console. Раздел «robots.txt report» показывает, когда Google в последний раз скачивал файл, какие в нем ошибки и предупреждения, и позволяет запросить повторное сканирование файла.
- Яндекс.Вебмастер. Раздел «Инструменты → Анализ robots.txt» показывает построчный разбор файла и позволяет проверить, разрешен ли конкретный адрес для конкретного робота, до публикации изменений.
- Проверка конкретного бота через curl:
curl -A "GPTBot" -I https://site.ru/robots.txt
Итог
Robots.txt — не инструмент для «спрятать страницу из поиска», а способ подсказать роботам, куда не стоит тратить ресурс на сканирование, и где искать карту сайта. Самые дорогие ошибки — забытый Disallow: / после разработки и блокировка ресурсов, нужных для отрисовки страницы. Проверяйте файл в панелях вебмастеров после любых изменений и решайте отдельно, каким ИИ-ботам стоит давать доступ, а каким — нет: последствия у этого решения совсем не абстрактные.
Если нужна помощь с настройкой robots.txt, sitemap.xml или техническим аудитом сайта — обсудим в Telegram или загляните в раздел SEO-продвижения.