Robots.txt: полное руководство по настройке для SEO

Как robots.txt влияет на сканирование, где он не управляет индексацией и как проверять директивы, не закрыв от поиска нужные страницы.

robots.txt — это текстовый файл в корне сайта. Он подсказывает поисковым роботам, какие разделы можно посещать, а какие лучше пропускать. Это первое, что читает краулер, когда заходит на сайт. Файл существует с 1994 года и до сих пор остаётся де-факто стандартом управления сканированием.

robots.txt — это рекомендация, а не запрет. Добросовестные боты (Googlebot, Yandex) соблюдают директивы. Вредоносные краулеры и скрейперы игнорируют файл полностью. Чтобы защитить конфиденциальные данные, используйте серверный контроль доступа и авторизацию, а не robots.txt.

Главное ограничение: страница, закрытая через Disallow, сама по себе не уходит из индекса. Если на неё ссылаются другие сайты, Google может проиндексировать URL, не заходя на него, и показать пустой сниппет в выдаче. Чтобы полностью убрать страницу из индекса, нужны другие инструменты.

Дерево решений Googlebot: robots.txt управляет сканированием, meta noindex — индексацией. Вместе они дают четыре разных результата.

Что такое robots.txt и его ограничения

Файл robots.txt должен лежать в корне домена: https://example.com/robots.txt. У поддоменов свои файлы: robots.txt для blog.example.com находится по адресу https://blog.example.com/robots.txt. Стандарт Robots Exclusion Standard (REP) описывает базовые директивы, а Google и Яндекс расширили его своими возможностями.

Управление сканированием

Не даёт ботам заходить в отдельные разделы: снижает лишнюю нагрузку на сервер и бережёт краулинговый бюджет для важных страниц.

Указывает на сайтмап

Директива Sitemap помогает поисковикам сразу найти XML-сайтмап без дополнительной настройки.

Не защищает контент

robots.txt открыт для всех. Он не шифрует и не скрывает содержимое страниц — только просит ботов их не посещать.

Формат и синтаксис

Файл состоит из блоков, которые называются записями. Каждая запись начинается с одной или нескольких директив User-agent и может содержать любое количество строк Disallow, Allow, Crawl-delay и Sitemap. Записи отделяются пустой строкой. Комментарии начинаются с #.

ДирективаПоддержкаОписание
User-agentВсеИдентификатор бота. * означает «все краулеры». В одном блоке может быть несколько строк User-agent.
DisallowВсеПуть, сканирование которого запрещено. Пустое значение означает «ничего не закрыто» (разрешено всё).
AllowGoogle, ЯндексЯвно разрешает путь внутри закрытого раздела. Имеет приоритет над Disallow.
Crawl-delayЯндекс, BingМинимальная пауза в секундах между запросами бота. Google её игнорирует.
SitemapGoogle, Яндекс, BingАбсолютный URL XML-сайтмапа. Можно указать несколько строк Sitemap.

Подстановочные знаки: * и $

Google и Яндекс поддерживают два символа-подстановки в путях Disallow и Allow. Звёздочка * совпадает с любой последовательностью символов, включая пустую. Знак доллара $ фиксирует конец URL: правило срабатывает только на точное совпадение до последнего символа.

text
# Block all URLs with the ?sort= parameter
Disallow: /*?sort=

# Block only /page (exact match, not /page/child)
Disallow: /page$

# Block all PDFs across the entire site
Disallow: /*.pdf$
Если Disallow и Allow конфликтуют, побеждает более конкретное правило, то есть то, у которого больше символов. При равной длине выигрывает Allow. Такое поведение характерно для Google; другие боты могут работать иначе.

Директиву Sitemap можно поставить в любом месте файла: она не обязана стоять внутри блока конкретного User-agent. Всегда указывайте полный абсолютный URL:

text
Sitemap: https://example.com/sitemap.xml
Если используется индекс сайтмапов, достаточно одной строки Sitemap с адресом индексного файла. Перечислять каждый дочерний сайтмап не нужно: поисковик найдёт их все через индекс.

Готовые примеры для разных сценариев

Сценарий 1: простой публичный сайт

Для небольшого сайта без закрытых разделов хватит минимального файла: всё разрешить, закрыть админку и технические пути и указать сайтмап.

text
# robots.txt for example.com — simple public site
User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/

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

Сценарий 2: крупный интернет-магазин с каталогом и параметрическими страницами

Интернет-магазин порождает сотни тысяч URL через фильтры, сортировку и пагинацию. Большинство из них — дубли или страницы без самостоятельной ценности. Закройте параметрические URL через Disallow с подстановочными знаками, а чистые страницы категорий и товаров оставьте доступными.

text
# robots.txt for e-commerce example.com
User-agent: *

# Technical and admin sections
Disallow: /admin/
Disallow: /checkout/
Disallow: /cart
Disallow: /account/
Disallow: /api/

# Parametric catalogue duplicates
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?page=
Disallow: /*?ref=
Disallow: /search

# Explicitly allow a useful parameter in one section
Allow: /catalog/shoes?size=

Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml
Для параметрических страниц с уникальным содержимым, например для товара с конкретным размером или цветом, лучше использовать тег canonical, а не Disallow. Так вы экономите краулинговый бюджет и не отрезаете страницу полностью.

Сценарий 3: сайт с тестовыми и временными страницами

Лендинги вебинаров, черновики, шаблонные страницы и разделы для тестирования лучше закрыть от сканирования. Используйте Disallow по префиксу пути и, если нужно, отдельный блок для конкретных ботов.

text
# robots.txt for example.com — main site with staging sections
User-agent: *
Disallow: /webinar-drafts/
Disallow: /templates/
Disallow: /staging/
Disallow: /_preview/
Disallow: /thank-you-test

# Block the entire site for a specific bot (e.g. an aggressive crawler)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
Закрытие раздела через robots.txt не делает его содержимое конфиденциальным. URL тестовых страниц всё равно могут попасть в индекс, если на них ссылаются внешние сайты. Для настоящей изоляции используйте HTTP Basic Auth или ограничение по IP на уровне сервера.

Disallow, meta robots noindex и X-Robots-Tag

Это три разных инструмента с разными задачами. Их путают, и отсюда типичная ошибка: страница закрыта в robots.txt и при этом имеет мета-тег noindex. Google не может прочитать этот тег, потому что страница закрыта от сканирования, и директива noindex не выполняется.

ИнструментГде находитсяЧто делаетКогда использовать
Disallow в robots.txtrobots.txtНе даёт боту зайти на URL. Не удаляет URL из индекса, если он там уже есть.Закрыть служебные разделы и не тратить краулинговый бюджет впустую.
meta robots noindexHTML <head>Позволяет боту зайти на страницу, но запрещает добавлять её в индекс. Бот читает тег и следует директиве.Убрать из индекса конкретную страницу: «спасибо»-страницы, пагинацию, страницы фильтров.
X-Robots-TagHTTP-заголовок ответаРаботает как meta robots, но для любых типов файлов: PDF, изображений, документов.Управлять индексацией нестраничных ресурсов: PDF, DOCX, изображений.
Никогда не комбинируйте Disallow и noindex для одной страницы. Если страница закрыта в robots.txt, Google не видит её noindex и может оставить URL в индексе с пустым сниппетом. Используйте noindex только на страницах, которые краулер может посещать.

Пример X-Robots-Tag в заголовке HTTP-ответа (настраивается в Nginx или в коде приложения):

text
# Nginx: prevent indexation of all PDFs
location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

Как тестировать robots.txt

Проверяйте изменения до выкладки. Одна опечатка может закрыть весь сайт от краулеров.

  • Google Search Console → robots.txt Tester: встроен прямо в GSC. Введите URL, чтобы проверить, разрешён он или заблокирован для Googlebot и других ботов Google.
  • Яндекс Вебмастер → Анализ robots.txt: аналог для Яндекса. Показывает, как Яндекс-бот понимает ваш файл.
  • Screaming Frog SEO Spider → Configuration → Robots.txt: сканирует сайт с учётом robots.txt и выводит в отчёте закрытые URL.
  • curl: быстрая проверка из командной строки. Читает файл и показывает HTTP-статус.
Пример robots.txt с учётом приведённых рекомендаций:
bash
# Fetch robots.txt and inspect its contents
curl -s https://example.com/robots.txt

# Check HTTP status (must be 200)
curl -I https://example.com/robots.txt

Частые ошибки и как их исправить

ОшибкаСимптомИсправление
Disallow: / для всего сайтаGooglebot перестаёт сканировать всё. В GSC страницы помечены как «заблокировано в robots.txt».Удалите строку или замените её конкретным путём. Такое нередко попадает в файл при выкладке.
Лишний пробел в путиDisallow: /admin / (с пробелом): бот читает путь буквально, и ничего не закрывается.Уберите пробелы. Пути чувствительны к регистру и к пробелам.
noindex + Disallow на одной страницеСтраница остаётся в индексе; директива noindex не выполняется.Уберите Disallow и оставьте только noindex. Бот должен иметь возможность зайти на страницу, чтобы прочитать тег.
Нет User-agent перед правиламиСинтаксическая ошибка: правила не относятся ни к одному боту.Добавьте User-agent: * перед блоком Disallow/Allow.
robots.txt отдаёт 404 или 500404 трактуется как «ограничений нет»; 500 временно останавливает сканирование.Убедитесь, что статус HTTP 200. Пустой файл означает «разрешено всё».

Рекомендации по безопасности

robots.txt публичен и индексируется поисковиками: его может прочитать любой. Если указать в нём пути к админке, бэкапам, внутренним API или конфигам, вы фактически передадите атакующему карту сайта.

Не полагайтесь на robots.txt как на единственную защиту закрытых разделов. Путь вида Disallow: /internal-api/v2/keys/ прямо показывает злоумышленнику, где искать.
  • Не публикуйте чувствительные пути: бэкапы (.zip, .sql), конфиги (.env, config.php), внутренние API.
  • Защищайте закрытые разделы на уровне сервера: HTTP Basic Auth, IP-ограничения, OAuth, а не robots.txt.
  • Держите список Disallow коротким: только пути, которые действительно нужно исключить из сканирования по SEO-причинам.
  • Регулярно проверяйте robots.txt в GSC: убедитесь, что после выкладки не появился Disallow: /.

Чеклист и итоговый пример

  • Файл открывается по адресу https://example.com/robots.txt и отдаёт HTTP 200
  • Кодировка UTF-8, без BOM (метки порядка байтов)
  • Каждый блок начинается с User-agent
  • Пустая строка отделяет блоки для разных User-agent
  • Нет комбинации Disallow и noindex на одной странице
  • Чувствительные пути не открыты публично
  • Для Яндекса задан Crawl-delay, если нагрузка на сервер высокая
  • Директива Sitemap указывает на корневой индексный файл
  • Файл проверен в GSC и Яндекс Вебмастере
  • Screaming Frog показывает ожидаемое количество закрытых URL

Итоговый robots.txt для example.com с комментариями. Это универсальный шаблон для большинства сценариев:

text
# robots.txt for example.com
# Updated: 2026-05-15

# Rules for all crawlers
User-agent: *

# Admin and auth sections
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/
Disallow: /account/

# Technical paths
Disallow: /api/
Disallow: /_next/
Disallow: /cdn-cgi/

# Parametric duplicates (e-commerce)
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?ref=
Disallow: /search

# Staging and temporary pages
Disallow: /staging/
Disallow: /webinar-drafts/
Disallow: /templates/

# Explicit allow for a useful API path
Allow: /api/og-image/

# Crawl rate for Yandex
User-agent: Yandex
Crawl-delay: 1

# Aggressive SEO bots (optional)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

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

FAQ

Влияет ли robots.txt на позиции?
Косвенно. Сам файл не является сигналом ранжирования, но закрытие страниц через Disallow снижает их сканирование. Закроете важные страницы — они потеряют видимость. Закроете дублирующиеся параметрические URL — освободите краулинговый бюджет для ценных страниц.
Что будет, если robots.txt отдаёт 404?
Google трактует отсутствие robots.txt (404) как «ограничений нет» и сканирует весь сайт. Ошибка 500 или таймаут воспринимается как временная блокировка: Google приостанавливает сканирование, пока файл не восстановлен.
Можно ли задать разные правила для Googlebot и Яндекса в одном файле?
Да. Создайте два отдельных блока User-agent: Googlebot читает только свой блок, Яндекс — только свой. Блок User-agent: * относится ко всем ботам, у которых нет отдельного блока.
Disallow: / закрывает весь сайт. Как быстро это исправить?
Замените или удалите строку Disallow: / в блоке User-agent: *. После выкладки проверьте исправление в GSC через проверку URL. Обычное сканирование возобновляется в течение нескольких дней после исправления.
Как закрыть один файл, но не его папку?
Используйте точный путь без завершающего слеша: Disallow: /private-doc.pdf. Чтобы закрыть расширение файла по всему сайту, используйте подстановочный знак: Disallow: /*.pdf$

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it