Использование robots.txt

Как создать robots.txt

  1. В текстовом редакторе создайте файл с именем robots.txt и заполните его в соответствии с представленными ниже правилами.
  2. Проверьте файл в сервисе Яндекс.Вебмастер (пункт меню Анализ robots.txt).
  3. Загрузите файл в корневую директорию вашего сайта.

Директива User-agent

Робот Яндекса поддерживает стандарт исключений для роботов с расширенными возможностями, которые описаны ниже.

В роботе Яндекса используется сессионный принцип работы, на каждую сессию формируется определенный пул страниц, которые планирует загрузить робот.

Сессия начинается с загрузки файла robots.txt. Если файл отсутствует, не является текстовым или на запрос робота возвращается HTTP-статус отличный от 200 OK, робот считает, что доступ к документам не ограничен.

В файле robots.txt робот проверяет наличие записей, начинающихся с User-agent:, в них учитываются подстроки Yandex (регистр значения не имеет) или * . Если обнаружена строка User-agent: Yandex, директивы для User-agent: * не учитываются. Если строки User-agent: Yandex и User-agent: * отсутствуют, считается, что доступ роботу не ограничен.

Следующим роботам Яндекса можно указать отдельные директивы:

Если обнаружены директивы для конкретного робота, директивы User-agent: Yandex и User-agent: * не используются.

Пример:

User-agent: YandexBot # будет использоваться только основным индексирующим роботом  Disallow: /*id=    User-agent: Yandex # будет использована всеми роботами Яндекса  Disallow: /*sid= # кроме основного индексирующего    User-agent: * # не будет использована роботами Яндекса  Disallow: /cgi-bin

Директивы Disallow и Allow

Чтобы запретить доступ робота к сайту или некоторым его разделам, используйте директиву Disallow.

Примеры:

User-agent: Yandex  Disallow: / # блокирует доступ ко всему сайту    User-agent: Yandex  Disallow: /cgi-bin # блокирует доступ к страницам,                       # начинающимся с '/cgi-bin'

В соответствии со стандартом перед каждой директивой User-agent рекомендуется вставлять пустой перевод строки.

Символ # предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается.

Чтобы разрешить доступ робота к сайту или некоторым его разделам, используйте директиву Allow

Примеры:

User-agent: Yandex  Allow: /cgi-bin  Disallow: /  # запрещает скачивать все, кроме страниц   # начинающихся с '/cgi-bin'
Примечание. Недопустимо наличие пустых переводов строки между директивами User-agent, Disallow и Allow.

Совместное использование директив

Директивы Allow и Disallow из соответствующего User-agent блока сортируются по длине префикса URL (от меньшего к большему) и применяются последовательно. Если для данной страницы сайта подходит несколько директив, то робот выбирает последнюю в порядке появления в сортированном списке. Таким образом, порядок следования директив в файле robots.txt не влияет на использование их роботом. Примеры:

# Исходный robots.txt:  User-agent: Yandex  Allow: /catalog  Disallow: /  # Сортированный robots.txt:  User-agent: Yandex  Disallow: /  Allow: /catalog  # разрешает скачивать только страницы,  # начинающиеся с '/catalog'
# Исходный robots.txt:  User-agent: Yandex  Allow: /  Allow: /catalog/auto  Disallow: /catalog  # Сортированный robots.txt:  User-agent: Yandex  Allow: /  Disallow: /catalog  Allow: /catalog/auto  # запрещает скачивать страницы, начинающиеся с '/catalog',  # но разрешает скачивать страницы, начинающиеся с '/catalog/auto'.
Примечание. При конфликте между двумя директивами с префиксами одинаковой длины приоритет отдается директиве Allow.

Директивы Allow и Disallow без параметров

Если директивы не содержат параметры, учитывает данные следующим образом:

User-agent: Yandex  Disallow: # то же, что и Allow: /    User-agent: Yandex  Allow: # не учитывается роботом

Использование спецсимволов * и $

При указании путей директив Allow и Disallow можно использовать спецсимволы * и $, задавая, таким образом, определенные регулярные выражения. Спецсимвол * означает любую (в том числе пустую) последовательность символов. Примеры:

User-agent: Yandex  Disallow: /cgi-bin/*.aspx # запрещает '/cgi-bin/example.aspx'                            # и '/cgi-bin/private/test.aspx'  Disallow: /*private # запрещает не только '/private',                      # но и '/cgi-bin/private'

Спецсимвол $

По умолчанию к концу каждого правила, описанного в файле robots.txt, приписывается спецсимвол *. Пример:

User-agent: Yandex  Disallow: /cgi-bin* # блокирует доступ к страницам                       # начинающимся с '/cgi-bin'  Disallow: /cgi-bin # то же самое

Чтобы отменить * на конце правила, можно использовать спецсимвол $, например:

User-agent: Yandex  Disallow: /example$ # запрещает '/example',                       # но не запрещает '/example.html'
User-agent: Yandex  Disallow: /example # запрещает и '/example',                      # и '/example.html'

Спецсимвол $ не запрещает указанный  * на конце, то есть:

User-agent: Yandex  Disallow: /example$  # запрещает только '/example'  Disallow: /example*$ # так же, как 'Disallow: /example'                        # запрещает и /example.html и /example

Директива sitemap

Если вы используете описание структуры сайта с помощью файла sitemap, укажите путь к файлу в качестве параметра директивы sitemap (если файлов несколько, укажите все). Пример:

User-agent: Yandex  Allow: /  sitemap: http://example.com/site_structure/my_sitemaps1.xml  sitemap: http://example.com/site_structure/my_sitemaps2.xml

Робот запомнит путь к файлу, обработает данные и будет использовать результаты при последующем формировании сессий загрузки.

Директива Host

Если у вашего сайта есть зеркала, специальный робот зеркальщик (Mozilla/5.0 (compatible; YandexBot/3.0; MirrorDetector; +http://yandex.com/bots) ) определит их и сформирует группу зеркал вашего сайта. В поиске будет участвовать только главное зеркало. Вы можете указать его для всех зеркал в файле robots.txt: имя главного зеркала должно быть значением директивы Host.

Директива ‘Host’ не гарантирует выбор указанного главного зеркала, тем не менее, алгоритм при принятии решения учитывает ее с высоким приоритетом. Пример:

#Если www.glavnoye-zerkalo.ru главное зеркало сайта, то  #robots.txt для всех сайтов из группы зеркал выглядит так   User-Agent: *  Disallow: /forum  Disallow: /cgi-bin  Host: www.glavnoye-zerkalo.ru

В целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву Host необходимо добавить в группу, которая начинается с записи User-Agent, непосредственно после директив Disallow и Allow). Аргументом директивы Host является доменное имя с номером порта (по умолчанию 80), отделенным двоеточием.

#Пример корректно составленного robots.txt, при обработке  #которого директива Host учитывается    User-Agent: *  Disallow:  Host: www.myhost.ru

Тем не менее директива Host является межсекционной, поэтому будет использоваться роботом вне зависимости от места в файле robots.txt, где она указана.

Примечание. Для каждого файла robots.txt обрабатывается только одна директива Host. Если в файле указано несколько директив, робот использует первую.

Пример:

Host: myhost.ru # используется    User-agent: *  Disallow: /cgi-bin    User-agent: Yandex  Disallow: /cgi-bin  Host: www.myhost.ru # не используется

Директива Host должна содержать:

  • Указание на протокол HTTPS, если зеркало доступно только по защищенному каналу (Host: https://myhost.ru).
  • Одно корректное доменное имя, соответствующего RFC 952 и не являющегося IP-адресом.
  • Номер порта, если необходимо (Host: myhost.ru:8080).

Некорректно составленные директивы Host игнорируются.

# Примеры игнорируемых директив Host    Host: www.myhost-.com  Host: www.-myhost.com  Host: www.myhost.com:100000  Host: www.my_host.com  Host: .my-host.com:8000  Host: my-host.com.  Host: my..host.com  Host: www.myhost.com:8080/  Host: 213.180.194.129  Host: www.firsthost.ru,www.secondhost.com  Host: www.firsthost.ru www.secondhost.com

Примеры использования директивы Host:

# domen.myhost.ru является главным зеркалом   # www.domen.myhost.com, тогда корректное использование   # директивы Host такое:    User-Agent: *  Disallow:  Host: domen.myhost.ru

Директива Crawl-delay

Если сервер сильно нагружен и не успевает отрабатывать запросы на загрузку, воспользуйтесь директивой Crawl-delay. Она позволяет задать поисковому роботу минимальный период времени (в секундах) между окончанием загрузки одной страницы и началом загрузки следующей.

В целях совместимости с роботами, которые не полностью следуют стандарту при обработке robots.txt, директиву Crawl-delay необходимо добавить в группу, которая начинается с записи User-Agent (непосредственно после директив Disallow и Allow).

Поисковый робот Яндекса поддерживает дробные значения Crawl-Delay, например, 0.5. Это не гарантирует, что поисковый робот будет заходить на ваш сайт каждые полсекунды, но позволяет ускорить обход сайта.

Примеры:

User-agent: Yandex  Crawl-delay: 2 # задает таймаут в 2 секунды    User-agent: *  Disallow: /search  Crawl-delay: 4.5 # задает таймаут в 4.5 секунды

Директива Clean-param

Если адреса страниц сайта содержат динамические параметры, которые не влияют на их содержимое (например: идентификаторы сессий, пользователей, рефереров и т. п.), вы можете описать их с помощью директивы Clean-param.

Робот Яндекса, используя эту информацию, не будет многократно перезагружать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер.

Например, на сайте есть страницы:

www.example.com/some_dir/get_book.pl?ref=site_1&book_id=123  www.example.com/some_dir/get_book.pl?ref=site_2&book_id=123  www.example.com/some_dir/get_book.pl?ref=site_3&book_id=123

Параметр ref используется только для того, чтобы отследить с какого ресурса был сделан запрос и не меняет содержимое, по всем трем адресам будет показана одна и та же страница с книгой book_id=123. Тогда, если указать директиву следующим образом:

User-agent: Yandex  Disallow:  Clean-param: ref /some_dir/get_book.pl

робот Яндекса сведет все адреса страницы к одному:

www.example.com/some_dir/get_book.pl?ref=site_1&book_id=123,

Если на сайте доступна страница без параметров:

www.example.com/some_dir/get_book.pl?book_id=123

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

www.example.com/some_dir/get_book.pl?ref=site_2&book_id=123  www.example.com/some_dir/get_book.pl?ref=site_3&book_id=123

Синтаксис директивы

Clean-param: p0[&p1&p2&..&pn] [path]

В первом поле через символ & перечисляются параметры, которые нужно не учитывать. Во втором поле указывается префикс пути страниц, для которых нужно применить правило.

Примечание. Директива Clean-Param является межсекционной, поэтому может быть указана в любом месте файла robots.txt. В случае, если директив указано несколько, все они будут учтены роботом.

Префикс может содержать регулярное выражение в формате, аналогичном файлу robots.txt, но с некоторыми ограничениями: можно использовать только символы A-Za-z0-9.-/*_. При этом * трактуется так же, как в robots.txt. В конец префикса всегда неявно дописывается символ *. Например:

Clean-param: s /forum/showthread.php

означает, что параметр s будет считаться незначащим для всех URL, начинающихся с /forum/showthread.php. Второе поле указывать необязательно, в этом случае правило будет применяться для всех страниц сайта. Регистр учитывается. Действует ограничение на длину правила — 500 символов. Например:

Clean-param: abc /forum/showthread.php  Clean-param: sid&sort /forum/*.php  Clean-param: someTrash&otherTrash

Дополнительные примеры

#для адресов вида:  www.example1.com/forum/showthread.php?s=681498b9648949605&t=8243  www.example1.com/forum/showthread.php?s=1e71c4427317a117a&t=8243    #robots.txt будет содержать:  User-agent: Yandex  Disallow:  Clean-param: s /forum/showthread.php
#для адресов  вида:  www.example2.com/index.php?page=1&sort=3a&sid=2564126ebdec301c607e5df  www.example2.com/index.php?page=1&sort=3a&sid=974017dcd170d6c4a5d76ae    #robots.txt будет содержать:  User-agent: Yandex  Disallow:  Clean-param: sid /index.php
#если таких параметров несколько:  www.example1.com/forum_old/showthread.php?s=681498605&t=8243&ref=1311  www.example1.com/forum_new/showthread.php?s=1e71c417a&t=8243&ref=9896    #robots.txt будет содержать:  User-agent: Yandex  Disallow:  Clean-param: s&ref /forum*/showthread.php
#если параметр используется в нескольких скриптах:  www.example1.com/forum/showthread.php?s=681498b9648949605&t=8243  www.example1.com/forum/index.php?s=1e71c4427317a117a&t=8243    #robots.txt будет содержать:  User-agent: Yandex  Disallow:  Clean-param: s /forum/index.php  Clean-param: s /forum/showthread.php

Дополнительная информация

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

Результат использования расширений формата robots.txt может отличаться от результата без них, а именно:

User-agent: Yandex   Allow: /  Disallow: /  # без расширений все запрещалось так как 'Allow: /' игнорировалось,   # с поддержкой расширений все разрешается    User-agent: Yandex  Disallow: /private*html  # без расширений запрещалось '/private*html',   # а с поддержкой расширений и '/private*html',   # и '/private/test.html', и '/private/html/test.aspx' и т. п.    User-agent: Yandex  Disallow: /private$  # без расширений запрещалось '/private$' и '/private$test' и т. п.,   # а с поддержкой расширений только '/private'    User-agent: *  Disallow: /  User-agent: Yandex  Allow: /  # без расширений из-за отсутствия перевода строки,   # 'User-agent: Yandex' было бы проигнорировано и   # результатом стало бы 'Disallow: /', но робот Яндекса   # выделяет записи по наличию в строке 'User-agent:',   # результат для робота Яндекса в данном случае 'Allow: /'    User-agent: *  Disallow: /  # комментарий1...  # комментарий2...  # комментарий3...  User-agent: Yandex  Allow: /  # аналогично предыдущему примеру (см. выше)

Примеры использования расширенного формата robots.txt:

User-agent: Yandex  Allow: /archive  Disallow: /  # разрешает все, что содержит '/archive', остальное запрещено    User-agent: Yandex  Allow: /obsolete/private/*.html$ # разрешает html файлы                                   # по пути '/obsolete/private/...'  Disallow: /*.php$  # запрещает все '*.php' на данном сайте  Disallow: /*/private/ # запрещает все подпути содержащие                        # '/private/', но Allow выше отменяет                        # часть запрета  Disallow: /*/old/*.zip$ # запрещает все '*.zip' файлы, содержащие                           # в пути '/old/'    User-agent: Yandex  Disallow: /add.php?*user=   # запрещает все скрипты 'add.php?' с параметром 'user'

При формировании файла robots.txt необходимо помнить, что у робота есть разумное ограничение на его размер. Если размер файла превышает 32 Кб, робот считает его полностью разрешающим, то есть рассматриваются аналогично:

User-agent: Yandex  Disallow:

Также разрешающим считается robots.txt, который не удалось загрузить (например, не правильно настроены HTTP-заголовки или возвращается HTTP-статус 404 Not found).

Исключения

Некоторые роботы Яндекса скачивают документы не для их последующей индексации, а для других специфичных целей. Для избежания непреднамеренной блокировки владельцами сайтов они могут не следовать ограничивающим директивам файла robots.txt, предназначенным для произвольных роботов (User-agent: *).

Также частичное игнорирование ограничений robots.txt определенных сайтов возможно при наличии соответствующей договоренности между компанией «Яндекс» и владельцами этих сайтов.

Внимание. Если такой робот скачивает документ, не доступный основному роботу Яндекса, этот документ никогда не будет проиндексирован и не попадет в поисковую выдачу.

Список роботов Яндекса, не следующих общим запрещающим правилам в robots.txt:

  • YaDirectFetcher скачивает целевые страницы рекламных объявлений для проверки их доступности и уточнения тематики, что необходимо для их размещения в поисковой выдаче и на сайтах-партнерах. При обходе сайта робот не использует файл robots.txt, поэтому игнорирует директивы, установленные для него.
  • YandexCalendar регулярно скачивает файлы календарей по инициативе пользователей, которые часто располагаются в запрещенных для индексации каталогах.
  • YandexDirect скачивает информацию о контенте сайтов-партнеров Рекламной сети, чтобы уточнить их тематику для подбора релевантной рекламы.
  • YandexDirectDyn — робот генерации динамических баннеров.
  • YandexMobileBot скачивает документы для последующего их анализа на наличие верстки, подходящей под мобильные устройства.
  • YandexAccessibilityBot скачивает страницы для проверки их доступности пользователям.
  • YandexScreenshotBot делает снимок страницы.
  • YandexMetrika — робот Яндекс.Метрики.
  • YandexVideoParser — индексатор Яндекс.Видео.
  • YandexMedianaBot — робот сервиса Яндекс.Медиана.
  • YandexSearchShop регулярно скачивает YML-файлы каталогов товаров (по инициативе пользователей), которые часто располагаются в запрещенных для индексации каталогах.
  • YandexOntoDBAPI — робот объектного ответа, скачивающий динамические данные.

Если вас не устраивает данное поведение, можно ограничить им доступ к своему сайту или его части с помощью директив специально для них, например:

User-agent: YandexCalendar  Disallow: /
User-agent: YandexMobileBot  Disallow: /private/*.txt$