Как Google интерпретирует спецификацию robots.txt

Роботы Google бывают двух типов. Одни (поисковые) действуют автоматически и поддерживают стандарт исключений для роботов (REP). Это означает, что перед сканированием сайта они скачивают и анализируют файл robots.txt, чтобы узнать, какие разделы сайта для них открыты. Другие контролируются пользователями (например, собирают контент для фидов) или обеспечивают их безопасность (например, выявляют вредоносное ПО). Они не следуют этому стандарту.

Что такое файл robots.txt

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

Расположение и области действия файла

Файл robots.txt должен находиться в каталоге верхнего уровня и передаваться по поддерживаемому протоколу. Google Поиск поддерживает протоколы HTTP, HTTPS и FTP. Для HTTP и HTTPS используется безусловный HTTP-запрос GET, а для FTP – стандартная команда RETR (RETRIEVE) и анонимный вход.

Правила, перечисленные в файле 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.exämple.com/robots.txt Действителен для:
  • http://www.exämple.com/
  • http://xn--exmple-cua.com/

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

ftp://example.com/robots.txt

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

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

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

От того, какой код статуса HTTP вернет сервер при обращении к файлу robots.txt, зависит, как дальше будут действовать поисковые роботы Google.

Обработка ошибок и коды статуса HTTP
2xx (успешно) Получив один из кодов статуса HTTP, которые сигнализируют об успешном выполнении, робот Google начинает обрабатывать файл robots.txt, предоставленный сервером.
3xx (переадресация)

Google выполняет пять переходов в цепочке переадресаций согласно спецификации протокола HTTP/1.0 RFC 1945. Затем поисковый робот прерывает операцию и интерпретирует ситуацию как ошибку 404, относящуюся к файлу robots.txt. Это также относится к любым заблокированным URL в цепочке переадресаций, поскольку из-за них поисковый робот не может получить правила.

Google не обрабатывает логические перенаправления в файлах robots.txt (фреймы, JavaScript или метатеги refresh).

4xx (ошибки клиента)

Поисковые роботы Google воспринимают все ошибки 4xx так, как если бы действительный файл robots.txt отсутствовал. При этом сканирование выполняется без ограничений.

5xx (ошибка сервера)

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

Если нам удается определить, что сайт настроен неправильно и в ответ на запросы отсутствующих страниц возвращает ошибку 5xx вместо 404, она будет обрабатываться как ошибка 404, а не 5xx. Например, если на странице, которая возвращает код статуса 5xx, есть сообщение "Страница не найдена", это будет восприниматься как код статуса 404 (not found).

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

Кеширование

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

Формат файла

В файле robots.txt должен быть обычный текст в кодировке UTF-8. В качестве разделителей строк следует использовать символы CR, CR/LF и LF.

Добавляемая в начало файла robots.txt метка порядка байтов Unicode BOM игнорируется, как и недопустимые строки. Например, если вместо правил robots.txt Google получит HTML-контент, система попытается проанализировать контент и извлечь правила. Все остальное будет проигнорировано.

Если для файла robots.txt используется не UTF-8, а другая кодировка, Google может проигнорировать символы, не относящиеся к UTF-8. В таком случае правила из файла robots.txt не будут работать.

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

Синтаксис

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

Google поддерживает следующие поля:

  • user-agent: агент пользователя робота, для которого применяется правило.
  • allow: путь URL, который можно сканировать.
  • disallow: путь URL, который запрещено сканировать.
  • sitemap: полный URL файла Sitemap.

Поля allow и disallow также называются директивами. Они всегда задаются в формате directive: [path], где значение [path] указывать не обязательно. По умолчанию роботы могут сканировать весь контент. Они игнорируют директивы без [path].

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

user-agent

Строка user-agent определяет, для какого робота применяется правило. Полный список поисковых роботов Google и строк для различных агентов пользователя, которые можно добавить в файл robots.txt, вы можете найти здесь.

Значение строки user-agent обрабатывается без учета регистра.

disallow

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

Значение директивы disallow обрабатывается с учетом регистра.

Синтаксис:

disallow: [path]

allow

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

Значение директивы allow обрабатывается с учетом регистра.

Синтаксис:

allow: [path]

sitemap

Google, Bing и другие крупные поисковые системы поддерживают поле sitemap из файла robots.txt. Дополнительную информацию вы можете найти на сайте sitemaps.org.

Значение поля sitemap обрабатывается с учетом регистра.

Синтаксис:

sitemap: [absoluteURL]

Строка [absoluteURL] указывает на расположение файла Sitemap или файла индекса Sitemap. URL должен быть полным, с указанием протокола и хоста. Нет необходимости кодировать URL. Хост URL не обязательно должен быть таким же, как и у файла robots.txt. Вы можете добавить несколько полей sitemap. Эти поля не связаны с каким-либо конкретным агентом пользователя. Если их сканирование не запрещено, они доступны для всех поисковых роботов.

Пример:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

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

Вы можете группировать правила, которые применяются для разных агентов пользователя. Просто повторите строки 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";
  • четвертая – для агента пользователя "h".

Техническое описание группы вы можете найти в разделе 2.1 этого документа.

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

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

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

Примеры

Сопоставление полей user-agent

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

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

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

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

Если в файле robots.txt есть несколько групп для определенного агента пользователя, выполняется внутреннее объединение этих групп. Пример:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

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

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

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

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

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

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

Соответствует всем путям, которые начинаются с /fish.

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

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

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

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/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/
  • /animals/fish/
  • /fish/?id=anything
  • /fish/salmon.htm

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

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

Соответствует всем путям, которые содержат .php.

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

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

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

  • / (хотя и соответствует /index.php)
  • /windows.PHP
/*.php$

Соответствует всем путям, которые заканчиваются на .php.

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

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

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

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

Соответствует всем путям, которые содержат /fish и .php (именно в таком порядке).

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

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

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

Порядок применения правил

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

Ознакомьтесь с примерами ниже.

Примеры
http://example.com/page

allow: /p
disallow: /

Применяемое правило: allow: /p, поскольку оно наиболее строгое.

http://example.com/folder/page

allow: /folder
disallow: /folder

Применяемое правило: allow: /folder, поскольку при наличии конфликтующих правил используется наименее строгое.

http://example.com/page.htm

allow: /page
disallow: /*.htm

Применяемое правило: disallow: /*.htm, поскольку оно точнее совпадает с символами в URL и поэтому является более строгим.

http://example.com/page.php5

allow: /page
disallow: /*.ph

Применяемое правило: allow: /page, поскольку при наличии конфликтующих правил используется наименее строгое.

http://example.com/

allow: /$
disallow: /

Применяемое правило: allow: /$, поскольку оно наиболее строгое.

http://example.com/page.htm

allow: /$
disallow: /

Применяемое правило: disallow: /, поскольку правило allow действует только для корневого URL.