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, чтобы убрать его из поиска, — а страницы висят в выдаче месяцами. Яндекс в справке прямо пишет, что закрытые в 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: какое правило победит
Робот не читает правила сверху вниз. Он сортирует их по длине префикса — от короткого к длинному — и применяет последнее подходящее.
- Берёт все правила своей секции, которые подходят к адресу.
- Сортирует по длине:
/короче, чем/catalog/, а тот короче, чем/catalog/sale/. - Побеждает самое длинное, то есть самое точное правило.
- Если длина одинаковая и правила спорят — побеждает 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 — разные параметры.
Что закрывать, а что нет
Корзина, оформление заказа, личный кабинет, сравнение, избранное.
Результаты поиска по сайту.
Сортировки и вид отображения, если под них нет отдельного спроса.
Служебные разделы, админка, тестовые копии, выгрузки.
Людям из поиска это не нужно, а робот тратит на такие адреса время, которое мог бы отдать товарам.
Стили, скрипты и картинки, без которых страница выглядит иначе.
Страницы пагинации, через которые робот доходит до товаров.
Фильтры со спросом: «диваны с ортопедическим матрасом» — это посадочная страница.
Страницы, которые нужно убрать из поиска, — для них 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. Её проще всего скопировать из адресной строки браузера.
Как проверить результат
- Песочница выше — быстрая проверка до выкладки: какая секция действует и какие адреса закрыты.
- Вебмастер → Инструменты → Анализ robots.txt. Здесь видно, как файл прочитал сам Яндекс, и можно проверить список адресов. Тут же — история изменений файла.
- Вебмастер → Индексирование → Страницы в поиске → Исключённые. Если важные страницы помечены как запрещённые в robots.txt — ищите, какое правило их закрыло.
- Регулярная проверка. 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 с картой сайта: если важная страница оказалась закрыта, это сразу появится в задачах со списком адресов. Демо — бесплатно и без срока.
