Спецификации файла robots.txt

О чем этот документ

В этом документе описаны методы обработки файла robots.txt роботами Google. Указанный файл позволяет веб-мастерам управлять поведением поисковых роботов Google при сканировании и индексировании общедоступных сайтов.

Что изменилось

1 июля 2019 г. мы объявили, что ведется работа над превращением протокола robots.txt в стандарт Интернета. Связанные с этим изменения отражены в данном документе.

Основные определения

Определения
Поисковый робот Поисковый робот – это служба или агент, которые сканируют сайты. Поисковый робот автоматически осуществляет рекурсивный доступ к известным URL хостов. Это должны быть страницы, доступные в обычном браузере. При обнаружении новых URL (например, с помощью ссылок на просканированных страницах или файлов Sitemap) их сканирование выполняется таким же образом.
Агент пользователя Средство идентификации одного или нескольких поисковых роботов.
Директивы Список действующих инструкций в файле robots.txt для одного или нескольких поисковых роботов.
URL Унифицированные адреса ресурсов по стандарту RFC 1738.
Только для Google Указанная информация касается особенностей обработки файла robots.txt поисковыми роботами Google. Она может быть неактуальна в других случаях.

Область применения

Инструкции, описанные в данном документе, выполняются всеми автоматическими поисковыми роботами Google. Эти инструкции не обязаны соблюдаться в тех случаях, когда агент осуществляет доступ к URL от имени пользователя (например, для перевода, при анализе вредоносного ПО или при обработке фидов, на которые пользователь подписался вручную).

Расположение файла и условия, при которых он действителен

Файл robots.txt должен находиться в каталоге верхнего уровня хоста и быть доступным при использовании нужного протокола и номера порта. В целом поддерживаются все протоколы на основе URI, а конкретно для Google Поиска (например, для сканирования сайтов) подходят HTTP и HTTPS. Получение файла robots.txt по последним двум протоколам осуществляется с помощью безусловного HTTP-запроса GET.

Google также принимает файлы robots.txt с FTP-серверов и следует указанным в них директивам. Доступ файлам robots.txt для FTP-сайтов осуществляется через протокол FTP с использованием анонимного входа.

Директивы, перечисленные в файле robots.txt, действительны только в отношении того хоста, протокола и номера порта, где расположен файл.

Примеры действительных URL файла robots.txt

Примеры URL файла robots.txt
http://example.com/robots.txt Действителен для:
  • http://example.com/
  • http://example.com/folder/file
Не действителен для:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Действителен для: http://www.example.com/

Не действителен для:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt Недействительный файл robots.txt. Поисковые роботы не ищут файлы robots.txt в подкаталогах.
http://www.müller.eu/robots.txt Действителен для:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

Недействителен для: http://www.muller.eu/

ftp://example.com/robots.txt

Действителен для: ftp://example.com/

Недействителен для: http://example.com/

Только для Google. Google использует файлы robots.txt для FTP-ресурсов.

http://212.96.82.21/robots.txt

Действителен для: http://212.96.82.21/

Недействителен для: http://example.com/ (даже при расположении по IP-адресу 212.96.82.21)

http://example.com:80/robots.txt

Действителен для:

  • http://example.com:80/
  • http://example.com/

Недействителен для: http://example.com:81/

http://example.com:8181/robots.txt

Действителен для: http://example.com:8181/

Недействителен для: http://example.com/

Обработка кодов ответа HTTP

Если поисковый робот получил файл robots.txt, далее возможны три сценария:

  • полный доступ – разрешение на сканирование всего содержания;
  • полный запрет – запрет на сканирование всего содержания;
  • частичный доступ – определение возможности сканирования содержания директивами в файле robots.txt.
Обработка кодов ответа HTTP
2xx (успешно) Коды ответов HTTP, свидетельствующие об успешном результате при сканировании с частичным доступом.
3xx (переадресация) Google выполняет пять переходов в цепочке переадресаций согласно рекомендациям в документе RFC 1945, посвященном HTTP/1.0. Затем поисковый робот прерывает операцию, как если бы возникла ошибка 404. Переадресации к заблокированным URL в robots.txt не приветствуются. Если файл robots.txt так и не удается найти после пяти переходов, роботы Google интерпретируют это как ошибку 404. Обработка логических переадресаций к файлу robots.txt на основе HTML-контента, возвращающего коды 2xx (переадресации с применением фреймов, JavaScript или метатегов обновления) – нерекомендуемый метод. Для поиска подходящих правил используется контент первой страницы.
4xx (ошибки клиента) В случае возникновения ошибок 4xx всегда считается, что действительный файл robots.txt отсутствует. При этом также предполагается, что ограничений в отношении контента нет, то есть разрешен полный доступ для сканирования.
5xx (ошибка сервера)

Ошибки сервера расцениваются как временные ошибки и полный запрет сканирования. Запрос будет отправляться повторно до тех пор, пока не поступит код ответа, отличный от кода ошибки сервера. При появлении ошибки 503 (недоступно) попытки будут повторяться достаточно часто. Если файл robots.txt недоступен более 30 дней, учитываются правила в его последней кешированной копии. Если такой копии нет, роботы Google будут действовать без ограничений. Чтобы страницы временно не сканировались, рекомендуется возвращать код ответа HTTP 503.

Касается только Google: если нам удается определить, что сайт настроен неправильно и в ответ на запросы отсутствующих страниц возвращает ошибку 5xx вместо 404, она будет обрабатываться как ошибка 404.

Неудачные запросы и неполные данные Если файл robots.txt невозможно получить из-за проблем с DNS или сетью (слишком долгого ожидания, недопустимых ответов, обрыва соединения, ошибка поблочной передачи данных по HTTP), это приравнивается к ошибке сервера.
Кеширование Содержание файла robots.txt обычно хранится в кеше не более суток, но может быть доступно и дольше в тех случаях, когда обновить кешированную версию невозможно (например, из-за истечения времени ожидания или ошибок 5xx). Сохраненный в кеше ответ может передаваться другим поисковым роботам. Google может увеличить или уменьшить срок действия кэша с учетом соответствующих HTTP-заголовков.

Формат файла

Файл должен содержать обычный текст в кодировке UTF-8 и состоять из строк, разделенных символами CR, CR/LF или LF.

Учитываются только действительные строки. Например, при получении HTML-страницы имеют значение только действительные текстовые строки, а остальные игнорируются без каких-либо предупреждений и сообщений об ошибках.

При использовании кодировки, в которой присутствуют символы, не входящие в таблицу UTF-8, синтаксический анализ файла может быть выполнен некорректно.

Иногда добавляемая в начало файла robots.txt метка порядка байтов (BOM) игнорируется.

Каждая действительная строка состоит из поля, двоеточия и значения. Использовать пробелы не обязательно, но рекомендуется для удобства чтения. Комментарии можно размещать в любом месте файла, обозначая их символом #. После этого знака весь контент до конца строки расценивается как комментарий и игнорируется. Стандартный формат: <field>:<value><#optional-comment>. Пробельные символы в начале и конце строки игнорируются.

Регистр символов в элементе <field> не учитывается. Элемент <value> (значение) может быть чувствительным к регистру в зависимости от элемента <field> (поля).

Элементы <field> с простыми ошибками или опечатками (useragent вместо user-agent и т. п.) не обрабатываются.

Иногда поисковый робот не рассматривает файлы больше определенного размера. Контент, расположенный вне допустимых пределов, игнорируется. В настоящее время максимальный размер файла, установленный Google, составляет 500 кибибайт (КиБ). Чтобы уложиться в эти рамки, применяйте более общие директивы. Например, поместите материалы, которые не нужно сканировать, в отдельный каталог.

Формальный синтаксис и определение

Ниже представлено определение по дополненной форме Бэкуса – Наура (ABNF), описанной в документе RFC 5234.

robotstxt = *(group / emptyline)
group = startgroupline                    ; We start with a user-agent
        *(startgroupline / emptyline)     ; ... and possibly more user-agents
        *(rule / emptyline)               ; followed by rules relevant for UAs

startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

; parser implementors: add additional lines you need (for example, Sitemaps), and
; be lenient when reading lines that don’t conform. Apply Postel’s law.

product-token = identifier / "*"
path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
empty-pattern = *WS

identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
comment = "#" *(UTF8-char-noctl / WS / "#")
emptyline = EOL
EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
NL = %x0D / %x0A / %x0D.0A
WS = %x20 / %x09

; UTF8 derived from RFC3629, but excluding control characters
UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
UTF8-2          = %xC2-DF UTF8-tail
UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                  %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                  %xF4 %x80-8F 2( UTF8-tail )
UTF8-tail       = %x80-BF

Группировка строк и правил

Группа содержит строку агента пользователя user-agent (или несколько таких строк), за которой следует одно или несколько правил, и заканчивается с переходом к новой строке user-agent или вместе с файлом. В последней группе может не быть правил, что будет подразумевать отсутствие в ней ограничений.

Примеры групп:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

Выше определены четыре отдельные группы. Первая предназначена для агента пользователя a, вторая – для b, третья – для e и f. В каждой из них есть внутренняя строка, в то время как четвертая группа пуста. Обратите внимание на то, как пробелы и пропуски между строками упрощают чтение.

Приоритеты агентов пользователей

Для отдельного поискового робота имеет силу только одна группа. Он должен найти ту, в которой наиболее конкретно указан агент пользователя из числа подходящих. Все остальные группы будут пропущены. В обозначении агента пользователя учитывается регистр. Весь неподходящий текст игнорируется. Например, googlebot/1.2 и googlebot* аналогичны варианту googlebot. Порядок групп в файле robots.txt не имеет значения.

Если определенному агенту пользователя соответствует несколько групп, правила в них применяются все вместе.

Пример

Предположим, что имеется следующий файл robots.txt:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

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

Соответствие групп роботам
Googlebot News Выбирается группа 1, в которой конкретнее всего указан подходящий агент пользователя. Остальные игнорируются.
Googlebot (веб-поиск) Выбирается группа 3.
Googlebot Images Выбирается группа 3, поскольку нет отдельной группы с конкретным указанием googlebot-images.
Googlebot News (при сканировании изображений) Выбирается группа 1, поскольку в данном случае изображения будут сканироваться именно роботом Googlebot News.
Otherbot (веб-поиск) Выбирается группа 2.
Otherbot (для новостей) Выбирается группа 2. Даже если бы имелась запись для робота, связанного с этим, она была бы действительна только при наличии соответствия.

Дополнительная информация доступна в Справочном центре.

Внутренние правила групп

В этом разделе рассматриваются только стандартные внутренние правила, которые также называются директивами для поисковых роботов. Такие правила вводятся в формате directive: [path], где [path] указывать не обязательно. По умолчанию нет никаких ограничений по сканированию для обозначенных поисковых роботов. Директивы без элемента [path] игнорируются.

Значение [path], если оно указано, относительно корневого каталога сайта, для которого был получен файл robots.txt (используется тот же протокол, номер порта, хост и имена доменов). Значение пути должно начинаться с символа / для обозначения корневого каталога. Путь чувствителен к регистру. Подробнее читайте в разделе "Соответствие значения пути конкретным URL" ниже.

disallow

Директива disallow определяет конкретные пути, которые должны быть недоступны указанным поисковым роботам. Если путь не указан, она игнорируется.

Использование:

disallow: [path]

allow

Директива allow определяет пути, которые должны быть доступны указанным поисковым роботам. Если путь не указан, она игнорируется.

Использование:

allow: [path]

Соответствие значения пути конкретным URL

Значение пути в директиве указывает, должно ли правило применяться к конкретному URL на сайте. За исключением подстановочных знаков путь должен совпадать с началом любого действующего и подходящего URL. Символы ASCII (кроме 7-битных), используемые в пути, могут быть добавлены как символы UTF-8 или как экранированные значения в кодировке UTF-8 (см. RFC 3986).

Google, Bing, Yahoo и Ask поддерживают определенные подстановочные знаки для путей. Вот какие решения при этом используются:

  • * обозначает 0 или более экземпляров любого действительного символа.
  • $ обозначает конец URL.
Примеры
/ Соответствует корневому каталогу и всем URL более низкого уровня.
/* Является эквивалентом /. Подстановочный знак игнорируется.
/fish

Соответствует:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Не соответствует:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish*

Является эквивалентом /fish. Подстановочный знак игнорируется.

Соответствует:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Не соответствует:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

Косая черта означает, что соответствуют все элементы в этой папке.

Соответствует:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Не соответствует:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

Соответствует:

  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Не соответствует:

  • / (даже если это /index.php)
  • /windows.PHP
/*.php$

Соответствует:

  • /filename.php
  • /folder/filename.php

Не соответствует:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Соответствует:

  • /fish.php
  • /fishheads/catfish.php?parameters

Не соответствует: /Fish.PHP

Поддерживаемые Google строки вне групп

Google, Ask, Bing, и Yahoo поддерживают строку sitemap (см. сайт sitemaps.org).

Использование:

sitemap: [absoluteURL]

[absoluteURL] указывает на файл Sitemap, файл индекса Sitemap или другой соответствующий URL, хост которого не обязательно должен быть тем же, что и у файла robots.txt. Записей sitemap может быть несколько. Они не связаны с конкретными агентами пользователя, поскольку не входят в группы, и поэтому доступны для всех поисковых роботов, если только в отношении этого нет специального запрета.

Порядок приоритетности для строк вне групп

На уровне группы, в частности если речь о директивах allow и disallow, самое точное правило (с наибольшей длиной пути [path]) важнее менее точного короткого. При наличии конфликтующих правил, в том числе с подстановочными знаками, выбирается то, которое предполагает наименьшие ограничения.

Примеры ситуаций
http://example.com/page

allow: /p

disallow: /

Результат: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Результат: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Результат: undefined

http://example.com/

allow: /$

disallow: /

Результат: allow

http://example.com/page.htm

allow: /$

disallow: /

Результат: disallow

Оставить отзыв о...

Текущей странице