Коротко. Robots.txt читается роботом сверху вниз построчно, но при конфликте директив побеждает не порядок в файле, а длина пути: у Яндекса и Google действует правило — чем длиннее и точнее совпадение маски с адресом страницы, тем выше её приоритет, независимо от того, Allow это или Disallow. Например, Allow: /catalog/shoes/ перебьёт стоящий выше Disallow: /catalog/, потому что путь у Allow длиннее и точнее. Синтаксис у файла простой — четыре основные директивы, регистрозависимые пути и один блок правил на каждого User-agent — но именно порядок разбора конфликтов чаще всего понимают неверно.
Из чего состоит файл: четыре директивы, которые нужны почти всегда
Robots.txt — обычный текстовый файл в корне сайта (site.ru/robots.txt), без HTML-разметки, кодировка UTF-8. Он состоит из блоков правил, каждый блок начинается со строки User-agent и включает директивы, которые к нему относятся:
- User-agent — указывает, к какому роботу относится следующий блок правил. Звёздочка
*означает «все роботы»; можно задать отдельный блок для конкретного, напримерUser-agent: Yandex. - Disallow — запрещает сканирование указанного пути. Пустое значение (
Disallow:без пути) означает «ничего не запрещено», это не то же самое, что отсутствие директивы вовсе. - Allow — явно разрешает сканирование пути, обычно используется, чтобы открыть исключение внутри более широкого запрета.
- Sitemap — указывает полный адрес карты сайта. В отличие от остальных директив, не привязана к конкретному User-agent и может стоять в любом месте файла.
Формально в файле встречаются и другие директивы вроде Crawl-delay или Clean-param, но Google их давно игнорирует, а Яндекс — только частично поддерживает и рекомендует настраивать через панель вебмастера, а не через файл. Полагаться на них как на основной инструмент не стоит.
Как строится один блок правил
Блок начинается со строки User-agent и включает все директивы Disallow и Allow до следующей строки User-agent или конца файла. Пустая строка между директивами внутри одного блока не обязательна, но пустая строка между блоками разных User-agent улучшает читаемость и рекомендуется как практика:
User-agent: Yandex
Disallow: /search/
Allow: /search/help/User-agent: *
Disallow: /admin/
Важный нюанс: если для конкретного робота задан отдельный блок (например, User-agent: Yandex), этот робот будет следовать только правилам своего блока и полностью проигнорирует блок с User-agent: * — правила не складываются друг с другом. Значит, если нужно и общее правило для всех, и отдельное для Яндекса, в блок для Яндекса придётся продублировать все общие запреты, которые должны на него распространяться.
Приоритет директив: не порядок в файле, а точность совпадения
Это правило понимают неверно чаще всего. Интуитивно кажется, что если Disallow стоит раньше Allow в тексте файла — сработает именно он, потому что «был первым». На деле оба поисковика — Google и Яндекс — используют другой принцип: побеждает директива с более длинным и точным совпадением по пути, независимо от её позиции в файле и от того, Allow это или Disallow.
| Правила в файле | URL страницы | Что победит | Почему |
|---|---|---|---|
| Disallow: /catalog/ Allow: /catalog/shoes/ |
/catalog/shoes/nike | Allow | Путь /catalog/shoes/ длиннее и точнее, чем /catalog/ |
| Allow: /catalog/ Disallow: /catalog/*?sort= |
/catalog/shoes/?sort=price | Disallow | Маска с параметром точнее совпадает с конкретным URL |
| Disallow: / | /catalog/shoes/nike | Disallow | Нет более точного Allow, который бы это перебивал |
Практический вывод: если нужно закрыть весь раздел, но открыть в нём одну конкретную папку, порядок строк в файле можно не менять специально под приоритет — важно только, чтобы путь в Allow был длиннее и точнее пути в Disallow. Тем не менее хорошим стилем считается располагать разрешающие Allow-правила после запрещающих Disallow — это не влияет на итог обработки, но облегчает чтение файла человеком.
Символы подстановки: * и $
Звёздочка * внутри пути заменяет любую последовательность символов, в том числе пустую. Она подразумевается в конце любого правила автоматически, даже без явного знака — то есть Disallow: /catalog/ закрывает и /catalog/, и /catalog/shoes/, и /catalog/anything/дальше. Символ $ отменяет это подразумеваемое продолжение и обозначает конец строки:
Disallow: /catalog/*.pdf$
Это правило закроет /catalog/price.pdf, но не тронет /catalog/price.pdf.old или /catalog/pdf-instructions/ — знак доллара жёстко фиксирует, что путь должен заканчиваться именно на .pdf, а не просто содержать эту подстроку.
Регистр и точность написания путей
Пути в robots.txt регистрозависимы: Disallow: /Catalog/ и Disallow: /catalog/ — два разных правила, и если реальные адреса сайта используют строчные буквы, правило с заглавной буквы просто не сработает никогда. Это частая техническая ошибка при копировании файла с другого сайта или при миграции CMS, где регистр URL мог измениться — с такими нестыковками нередко сталкиваются при переносе сайта на новую платформу. Также важно, что путь в Disallow и Allow всегда указывается от корня домена и должен начинаться со слэша — запись без начального слэша считается некорректной и роботом может игнорироваться или трактоваться непредсказуемо в зависимости от поисковика.
Что не регулируется через robots.txt
Файл управляет только сканированием — правом робота заходить на страницу. Он не может: удалить уже проиндексированную страницу из базы (для этого нужен noindex или запрос на удаление через панель вебмастера), запретить переход по ссылке живому пользователю (файл не ограничивает доступ, это не защита от посторонних), и не гарантирует, что закрытая страница не появится в выдаче — подробнее это противоречие разобрано в материале об ошибках в robots.txt. Понимание этой границы экономит время: если задача — убрать страницу из поиска, а не сэкономить ресурс сканирования, правильный инструмент — не robots.txt, а настройки индексации в рамках общего SEO-продвижения сайта.
FAQ
Обязательно ли в файле должна быть строка User-agent: *?
Нет, но её отсутствие означает, что часть роботов, для которых нет отдельного блока, не найдёт применимых к себе правил и будет сканировать сайт без ограничений. Практически всегда стоит иметь общий блок с этой строкой.
Читает ли робот комментарии в файле?
Строки, начинающиеся со знака #, роботы игнорируют — это комментарии для человека, который потом будет редактировать файл. Использовать их для пояснений — хорошая практика на сложных файлах с десятками правил.
Можно ли указать несколько строк Sitemap в одном файле?
Да, это допустимо и полезно на крупных сайтах, где карта сайта разбита на несколько файлов по разделам — например, отдельно для каталога и отдельно для блога.
Что произойдёт, если в файле есть синтаксическая ошибка?
Обычно роботы игнорируют непонятную строку и продолжают разбор остальных директив, а не отказываются от всего файла целиком. Но полагаться на это не стоит — проверка через панель вебмастера покажет, какие строки не распознаны.
Нужно ли отдельно прописывать правила для GPTBot и других ИИ-краулеров?
Если нужно ограничить использование контента нейросетями для обучения — да, для них задаются отдельные блоки User-agent (GPTBot, ClaudeBot и подобные), поскольку общий блок с * на них может не распространяться в зависимости от политики конкретного краулера.
Проверить, правильно ли настроен robots.txt
Бесплатный аудит разберёт синтаксис файла и покажет, какие правила реально применяются на страницах сайта.
Готовый robots.txt для WordPress
Базовый набор правил: закрываем служебные каталоги, оставляем открытым ajax-обработчик и указываем карту сайта.
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-includes/
Disallow: /?s=
Disallow: /*?replytocom
Allow: /wp-content/uploads/
Sitemap: https://example.ru/sitemap_index.xml