robots.txt для Яндекса: как он работает и как не закрыть лишнее

Разбираем, как робот Яндекса выбирает секцию и правило, почему закрытая страница может остаться в поиске, что делать с метками и параметрами и какие директивы давно не работают. Вставьте свой robots.txt в песочницу — она покажет, какие адреса закрыты и каким правилом.

  • Песочница: какие адреса закрыты для Яндекса и какой строкой
  • Почему секция «*» перестаёт работать, когда есть секция «Yandex»
  • Шаблоны для магазина и сайта услуг
Коротко

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

  • Если в файле есть секция «User-agent: Yandex», общая секция «*» для Яндекса не действует вовсе.
  • Из Allow и Disallow побеждает правило с более длинным префиксом, а при равной длине — Allow. Порядок строк не важен.
  • Чтобы убрать страницу из поиска, нужен noindex, а не Disallow: закрытая страница может остаться в выдаче.

Песочница: проверьте свой robots.txt

Слева — файл, справа — адреса. В примере уже есть типичные ловушки: попробуйте найти, почему поиск по сайту оказался открыт для Яндекса, хотя в файле есть Disallow: /search. Затем вставьте свой robots.txt и адреса важных страниц: каталога, карточки товара, страницы с фильтром.

Для YandexBot действует секция User-agent: Yandex (строка 6). Закрыто 4 из 7.

  • Открыта/catalog/divany/
    Ни одно правило не подошло — страница открыта
  • Закрыта/catalog/divany/?sort=price
    Сработало Disallow: /*? — строка 9
  • Открыта/catalog/divany/?page=2
    Сработало Allow: /*?page= — строка 10
  • Открыта/search/
    Ни одно правило не подошло — страница открыта
  • Закрыта/cart/
    Сработало Disallow: /cart — строка 7
  • Закрыта/catalog/divany/?utm_source=yandex&utm_medium=cpc
    Сработало Disallow: /*? — строка 9. Clean-param (строка 12) отбросит utm_source, utm_medium: для робота это адрес /catalog/divany/
  • Закрыта/files/price.pdf
    Сработало Disallow: /*.pdf$ — строка 11

Что поправить в файле

  • Для YandexBot действует секция «User-agent: Yandex», а секция «*» не применяется вовсе. Правила из неё, которых нет в секции Яндекса, не работают: Disallow: /search, Disallow: /*?sort=.
  • Строка 13: Яндекс больше не учитывает Host. Главное зеркало определяется 301-редиректом со всех вариантов адреса на основной.
  • Строка 14: Crawl-delay Яндекс не учитывает с 22 февраля 2018 года. Скорость обхода настраивают в Вебмастере — «Скорость обхода сайта».

Проверка идёт в браузере, файл никуда не отправляется. Логика — по справке Яндекса; окончательный ответ даёт «Анализ robots.txt» в Вебмастере.

Что делает robots.txt, а чего не делает

Файл лежит в корне сайта — site.ru/robots.txt — и робот читает его перед обходом. В нём перечислено, куда ходить не нужно.

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

Отсюда главная путаница. Владелец закрывает раздел в robots.txt, чтобы убрать его из поиска, — а страницы висят в выдаче месяцами. Яндекс в справке прямо пишет, что закрытые в robots.txt страницы могут оставаться в поиске. Чтобы страница ушла, на ней нужен noindex в метатеге или заголовке ответа, и при этом она не должна быть закрыта в robots.txt: иначе робот не зайдёт на неё и не увидит запрет. Подробно — в статье «Редирект, canonical или noindex».

Требования к самому файлу

  • Имя — строго robots.txt, в корне сайта, обычный текстовый файл.
  • Сервер отдаёт его с кодом 200. Допустим редирект на другой robots.txt, который тоже отвечает 200.
  • Размер — не больше 500 КБ.
  • Без кириллицы: домены — в Punycode, адреса — в URL-кодировке.

Если хотя бы одно требование нарушено, Яндекс считает сайт открытым для индексирования. Например, robots.txt отвечает ошибкой 404 — для робота ограничений нет.

Какая секция сработает для Яндекса

Файл делится на секции. Каждая начинается со строки User-agent — для какого робота правила ниже.

Что есть в файлеЧто применит основной робот Яндекса
Секция User-agent: YandexBotТолько её. Секции «Yandex» и «*» не используются.
Секции Yandex и *, своей нетТолько «Yandex». Секция «*» не учитывается полностью — не дополняет, а исчезает.
Только *Секцию «*».
Ничего подходящегоОграничений нет.

Это самая частая ловушка. Разработчик добавляет в файл секцию для Яндекса, чтобы закрыть пару разделов, а общие правила оставляет в «*». В результате для Яндекса открывается всё, что было закрыто только в общей секции: поиск по сайту, сортировки, служебные страницы. Именно это происходит с /search в примере песочницы.

Пути в правилах чувствительны к регистру: /Catalog/ и /catalog/ для робота разные адреса. А в названиях директив регистр не важен: disallow и Disallow равнозначны.

Allow и Disallow: какое правило победит

Робот не читает правила сверху вниз. Он сортирует их по длине префикса — от короткого к длинному — и применяет последнее подходящее.

  1. Берёт все правила своей секции, которые подходят к адресу.
  2. Сортирует по длине: / короче, чем /catalog/, а тот короче, чем /catalog/sale/.
  3. Побеждает самое длинное, то есть самое точное правило.
  4. Если длина одинаковая и правила спорят — побеждает Allow.
ПравилаАдресИтог
Disallow: /catalog/
Allow: /catalog/sale/
/catalog/sale/divany/Открыт — Allow длиннее
Disallow: /*?
Allow: /*?page=
/catalog/?page=2Открыт — пагинация разрешена
Disallow: /*?
Allow: /*?page=
/catalog/?sort=priceЗакрыт — подходит только Disallow
Allow: /$
Disallow: /
/ и /about/Открыта только главная

Спецсимволы * и $

  • * — любая последовательность символов, в том числе пустая. Disallow: /*print закроет и /print, и /catalog/item?print=1.
  • К концу каждого правила робот мысленно добавляет *. Поэтому Disallow: /cart закрывает и /cart/, и /cartoon/ — помните об этом.
  • $ в конце отменяет эту звёздочку. Disallow: /*.pdf$ закроет файлы PDF, но не адрес /price.pdf?v=2.
  • # начинает комментарий. Строка Disallow: /# читается как Disallow: / — закрыт весь сайт.
  • Disallow: без значения разрешает всё, а пустой Allow: робот просто пропускает.

Clean-param: дубли из-за меток и параметров

Директива только для Яндекса. Она говорит: адреса, которые отличаются этими параметрами, — одна и та же страница.

Clean-param: utm_source&utm_medium&utm_campaign
Clean-param: sort&view /catalog/

Первая строка действует на весь сайт: /divany/?utm_source=yandex робот будет считать адресом /divany/, а не отдельной страницей. Вторая — только для адресов, начинающихся с /catalog/. Параметры перечисляют через &, путь пишут вторым словом через пробел.

Почему не Disallow: закрыв адреса с метками, вы запретите роботу заходить по ссылкам с UTM вообще. Clean-param сводит все копии к одному адресу — робот не тратит обход на дубли, а сама страница остаётся доступной. Директива межсекционная: её можно писать в любом месте файла. Длина правила — до 500 символов, регистр важен: UTM_source и utm_source — разные параметры.

Что закрывать, а что нет

Закрывать в robots.txt

Корзина, оформление заказа, личный кабинет, сравнение, избранное.

Результаты поиска по сайту.

Сортировки и вид отображения, если под них нет отдельного спроса.

Служебные разделы, админка, тестовые копии, выгрузки.

Людям из поиска это не нужно, а робот тратит на такие адреса время, которое мог бы отдать товарам.

Не закрывать

Стили, скрипты и картинки, без которых страница выглядит иначе.

Страницы пагинации, через которые робот доходит до товаров.

Фильтры со спросом: «диваны с ортопедическим матрасом» — это посадочная страница.

Страницы, которые нужно убрать из поиска, — для них noindex.

Закрытый ресурс робот не видит. Закрытую страницу он не может переобойти и заметить на ней noindex.

Шаблоны для двух типов сайта

Берите как основу и сверяйте с адресами своей CMS — пути у всех разные. После правки прогоните адреса через песочницу выше.

Интернет-магазин

User-agent: *
Disallow: /cart
Disallow: /checkout
Disallow: /personal/
Disallow: /compare/
Disallow: /search
Disallow: /*?sort=
Disallow: /*&sort=
Disallow: /*?view=

User-agent: Yandex
Disallow: /cart
Disallow: /checkout
Disallow: /personal/
Disallow: /compare/
Disallow: /search
Disallow: /*?sort=
Disallow: /*&sort=
Disallow: /*?view=
Clean-param: utm_source&utm_medium&utm_campaign&utm_content&utm_term

Sitemap: https://shop.ru/sitemap.xml

Сайт услуг или компании

User-agent: *
Disallow: /admin/
Disallow: /search
Disallow: /thanks/
Clean-param: utm_source&utm_medium&utm_campaign&utm_content&utm_term

Sitemap: https://company.ru/sitemap.xml

Во втором шаблоне нет отдельной секции для Яндекса — она и не нужна, если правила одинаковые для всех. Clean-param при этом работает: остальные роботы его просто пропускают. Страница «Спасибо за заявку» закрыта, чтобы робот не ходил на неё; если она уже попала в поиск, сначала снимите её через noindex, а закрывайте после.

Host и Crawl-delay больше не работают

Host

Раньше так указывали главное зеркало: с www или без, http или https. Яндекс от директивы отказался. Главное зеркало определяется 301-редиректом со всех вариантов адреса на основной. Строку Host можно удалить — вреда от неё нет, пользы тоже.

Crawl-delay

Пауза между запросами робота. Яндекс перестал её учитывать 22 февраля 2018 года. Если робот нагружает сервер, скорость обхода меняют в Вебмастере: раздел «Скорость обхода сайта».

Ошибки, которые встречаются чаще всего

Robots.txt с тестовой копии

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

Правила только в секции «*»

Есть секция «Yandex» с парой строк — и всё, что закрыто в общей секции, для Яндекса снова открыто.

Закрыли, чтобы убрать из поиска

Disallow не удаляет страницу. Робот перестаёт её посещать и не видит, что вы поставили noindex или редирект.

Правило шире, чем задумано

Disallow: /cat закрывает и /catalog/. Добавляйте слеш в конце раздела или $ для точного адреса.

В карте сайта закрытые адреса

Sitemap приглашает робота на страницу, robots.txt запрещает. Противоречивые сигналы: в карте должны быть только страницы, которые вы хотите видеть в поиске.

Кириллица в адресах

Disallow: /корзина — ошибка. Нужна URL-кодировка: /%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B0. Её проще всего скопировать из адресной строки браузера.

Как проверить результат

  1. Песочница выше — быстрая проверка до выкладки: какая секция действует и какие адреса закрыты.
  2. Вебмастер → Инструменты → Анализ robots.txt. Здесь видно, как файл прочитал сам Яндекс, и можно проверить список адресов. Тут же — история изменений файла.
  3. Вебмастер → Индексирование → Страницы в поиске → Исключённые. Если важные страницы помечены как запрещённые в robots.txt — ищите, какое правило их закрыло.
  4. Регулярная проверка. robots.txt меняется незаметно: обновление CMS, плагин, выкладка с тестового сервера. Ошибку лучше поймать в день, когда она появилась, а не когда упал трафик.

Если страница пропала из поиска, а robots.txt тут ни при чём, — пройдите пошаговую проверку причин.

Чек-лист

Проверьте страницу по пунктам

0 из 10

Отметки сохраняются только в этом браузере.

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

Удалит ли Disallow страницу из поиска Яндекса?

Не обязательно. robots.txt запрещает обход, а не показ: Яндекс пишет, что закрытые в robots.txt страницы могут оставаться в поиске. Чтобы убрать страницу, поставьте на неё noindex в метатеге или заголовке X-Robots-Tag и не закрывайте её в robots.txt — иначе робот не увидит запрет.

Нужна ли отдельная секция User-agent: Yandex?

Только если правила для Яндекса отличаются, например нужен Clean-param или другой набор запретов. Если секция есть, общая секция «*» для Яндекса не действует совсем, поэтому все нужные правила придётся повторить в секции Яндекса.

Что важнее — Allow или Disallow?

Порядок строк не важен. Яндекс сортирует правила по длине префикса и применяет самое длинное подходящее. Если правила одинаковой длины противоречат друг другу, побеждает Allow.

Работают ли Host и Crawl-delay?

Нет. Главное зеркало Яндекс определяет по 301-редиректу, а Crawl-delay не учитывает с 22 февраля 2018 года — скорость обхода меняют в Вебмастере в разделе «Скорость обхода сайта».

Что будет, если robots.txt отдаёт ошибку 404?

Если файл недоступен или не соответствует требованиям — например, сервер не отвечает кодом 200 или файл больше 500 КБ, — Яндекс считает сайт открытым для индексирования.

Как закрыть UTM-метки?

Через Clean-param, а не Disallow: «Clean-param: utm_source&utm_medium&utm_campaign». Тогда робот считает адреса с метками той же страницей, что и без них, и не тратит обход на копии.

Можно ли писать в robots.txt кириллицу?

Нет. Кириллические домены записывают в Punycode, а адреса страниц — в URL-кодировке. Проще всего скопировать адрес из адресной строки браузера: он уже будет закодирован.

Проверяйте robots.txt после каждого релиза

СеоГард регулярно обходит сайт и сверяет robots.txt, noindex и canonical с картой сайта: если важная страница оказалась закрыта, это сразу появится в задачах со списком адресов. Демо — бесплатно и без срока.

Проверить сайт бесплатноТарифы

Ещё материалы

Индексирование · 14 минут чтения

Почему страницы нет в поиске Яндекса: проверка за 15 минут

Страница не индексируется или выпала из Яндекса? Пошаговая проверка: код ответа, robots.txt, noindex, canonical, дубли, зеркала, «малоценная или маловостребованная». Что значит каждый статус в Вебмастере и что делать.

Мета-теги · 18 минут чтения

Title и description для Яндекса: как написать, чтобы показали и кликнули

Как написать title и description, которые Яндекс покажет и по которым кликнут: длина в символах и пикселях, формулы для каталога, товара, услуги и статьи, почему Яндекс меняет заголовок. Проверка сниппета онлайн.