← Все статьи

SEO · Разработка

Настройка robots.txt: полное руководство со всеми директивами

Анна

Анна

Контент-менеджер, SEO11 минут чтения
Настройка 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 Использование контента для обучения моделей 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

  1. Откройте файл напрямую в браузере: ваш-сайт.ru/robots.txt — самый быстрый способ увидеть, что реально отдает сервер.
  2. Google Search Console. Раздел «robots.txt report» показывает, когда Google в последний раз скачивал файл, какие в нем ошибки и предупреждения, и позволяет запросить повторное сканирование файла.
  3. Яндекс.Вебмастер. Раздел «Инструменты → Анализ robots.txt» показывает построчный разбор файла и позволяет проверить, разрешен ли конкретный адрес для конкретного робота, до публикации изменений.
  4. Проверка конкретного бота через curl:
curl -A "GPTBot" -I https://site.ru/robots.txt

Итог

Robots.txt — не инструмент для «спрятать страницу из поиска», а способ подсказать роботам, куда не стоит тратить ресурс на сканирование, и где искать карту сайта. Самые дорогие ошибки — забытый Disallow: / после разработки и блокировка ресурсов, нужных для отрисовки страницы. Проверяйте файл в панелях вебмастеров после любых изменений и решайте отдельно, каким ИИ-ботам стоит давать доступ, а каким — нет: последствия у этого решения совсем не абстрактные.

Если нужна помощь с настройкой robots.txt, sitemap.xml или техническим аудитом сайта — обсудим в Telegram или загляните в раздел SEO-продвижения.

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

Ничего катастрофического: и Google, и Яндекс в этом случае считают сайт полностью открытым для сканирования — как будто в файле написано «Disallow:» без пути. Но без robots.txt вы теряете управление тем, что краулеры обходят, и не можете подсказать им адрес sitemap.xml.

Связаться с нами

Опишите вашу задачу, и мы предложим решение!