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

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

В этой статье рассказывается о том, как Google интерпретирует стандарт REP.

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

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

# This robots.txt file controls crawling of URLs under https://example.com.
# All crawlers are disallowed to crawl files in the "includes" directory, such
# as .css, .js, but Google needs them for rendering, so Googlebot is allowed
# to crawl them.
User-agent: *
Disallow: /includes/

User-agent: Googlebot
Allow: /includes/

Sitemap: https://example.com/sitemap.xml

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

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

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

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

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

Примеры URL файла robots.txt и путей URL, для которых они действительны, приведены в таблице ниже. В первом столбце указан URL файла robots.txt, а во втором – домены, к которым может или не может относиться этот файл.

Примеры URL файла robots.txt
https://example.com/robots.txt

Вот общий пример. Такой файл не действует в отношении других субдоменов, протоколов и номеров портов. При этом он действителен для всех файлов во всех подкаталогах, относящихся к тому же хосту, протоколу и номеру порта.

Действителен для:
  • https://example.com/
  • https://example.com/folder/file
Не действителен для:
  • https://other.example.com/
  • http://example.com/
  • https://example.com:8181/
https://www.example.com/robots.txt

Файл robots.txt в субдомене действителен только для этого субдомена.

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

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

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt Недействительный файл robots.txt. Поисковые роботы не ищут файлы robots.txt в подкаталогах.
https://www.exämple.com/robots.txt

Эквивалентами IDN являются их варианты в кодировке Punycode. Ознакомьтесь также с документом RFC 3492.

Действителен для:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

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

ftp://example.com/robots.txt

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

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

https://212.96.82.21/robots.txt

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

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

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

https://example.com:443/robots.txt

Если URL указан со стандартным портом (80 для HTTP, 443 для HTTPS, 21 для FTP), такая запись эквивалентна имени хоста по умолчанию.

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

  • https://example.com:443/
  • https://example.com/

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

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

Файлы robots.txt, размещенные не по стандартным номерам портов, действительны только для контента, который доступен по этим номерам портов.

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

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

Обработка ошибок и коды статуса HTTP

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

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

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

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

4xx (client errors)

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

5xx (server errors)

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

Если вам необходимо временно остановить сканирование, рекомендуем передавать код статуса HTTP 503 для каждого URL на сайте.

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

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

Кеширование

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

Формат файла

В файле 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 не будут работать.

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

Синтаксис

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

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

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

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

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

user-agent

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

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

disallow

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

Google не может индексировать контент страниц, сканирование которых запрещено, однако может индексировать URL и показывать его в результатах поиска без фрагмента. Подробнее о том, как запретить индексирование

Значение правила 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.
Google StoreBot Storebot-Google выбирает группу 2, поскольку конкретной группы Storebot-Google нет.
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

Парсер для файлов robots.txt игнорирует все правила, кроме следующих: allow, disallow, user-agent. В результате указанный фрагмент файла robots.txt обрабатывается как единая группа и правило disallow: / влияет как на user-agent a, так и на b:

user-agent: a
sitemap: https://example.com/sitemap.xml

user-agent: b
disallow: /

При обработке правил в файле robots.txt поисковые роботы игнорируют строку sitemap. Например, вот как роботы обработали бы приведенный выше фрагмент файла robots.txt:

user-agent: a
user-agent: b
disallow: /

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

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

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

  • * обозначает 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
  • /desert/fish
/fish/

Соответствует любым элементам в папке /fish/.

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

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

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

  • /fish
  • /fish.html
  • /animals/fish/
  • /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, они используют самое строгое правило (с более длинным значением пути). При наличии конфликтующих правил (в том числе с подстановочными знаками) выбирается то, которое предполагает наименьшие ограничения.

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

Примеры
https://example.com/page
allow: /p
disallow: /

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

https://example.com/folder/page
allow: /folder
disallow: /folder

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

https://example.com/page.htm
allow: /page
disallow: /*.htm

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

https://example.com/page.php5
allow: /page
disallow: /*.ph

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

https://example.com/
allow: /$
disallow: /

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

https://example.com/page.htm
allow: /$
disallow: /

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