Robots.txt - Каков правильный формат для задержки сканирования для нескольких агентов пользователя?

Ниже приведен пример файла robots.txt для разрешения нескольких пользовательских агентов с несколькими задержками обхода для каждого пользовательского агента. Значения Crawl-delay предназначены для иллюстрации и будут отличаться в реальном файле robots.txt.

Я искал по всему Интернету правильные ответы, но не смог найти его. Слишком много смешанных предложений, и я не знаю, какой из них правильный/правильный.

Вопросы:

(1) Может ли каждый пользовательский агент иметь собственную задержку обхода? (Я предполагаю, что да)

(2) Где вы помещаете линию задержки обхода для каждого пользовательского агента до или после строки Разрешить/Запретить?

(3) Должен быть пустой пробел между каждой группой пользовательских агентов.

Литература:

http://www.seopt.com/2013/01/robots-text-file/

http://help.yandex.com/webmaster/?id=1113851#1113858

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

Спасибо заранее.

# Allow only major search spiders    
User-agent: Mediapartners-Google
Disallow:
Crawl-delay: 11

User-agent: Googlebot
Disallow:
Crawl-delay: 12

User-agent: Adsbot-Google
Disallow:
Crawl-delay: 13

User-agent: Googlebot-Image
Disallow:
Crawl-delay: 14

User-agent: Googlebot-Mobile
Disallow:
Crawl-delay: 15

User-agent: MSNBot
Disallow:
Crawl-delay: 16

User-agent: bingbot
Disallow:
Crawl-delay: 17

User-agent: Slurp
Disallow:
Crawl-delay: 18

User-agent: Yahoo! Slurp
Disallow:
Crawl-delay: 19

# Block all other spiders
User-agent: *
Disallow: /

# Block Directories for all spiders
User-agent: *
Disallow: /ads/
Disallow: /cgi-bin/
Disallow: /scripts/

(4) Если я хочу, чтобы все пользовательские агенты имели задержку обхода 10 секунд, было бы правильно?

# Allow only major search spiders
User-agent: *
Crawl-delay: 10

User-agent: Mediapartners-Google
Disallow:

User-agent: Googlebot
Disallow:

User-agent: Adsbot-Google
Disallow:

User-agent: Googlebot-Image
Disallow:

User-agent: Googlebot-Mobile
Disallow:

User-agent: MSNBot
Disallow:

User-agent: bingbot
Disallow:

User-agent: Slurp
Disallow:

User-agent: Yahoo! Slurp
Disallow:

# Block all other spiders
User-agent: *
Disallow: /

# Block Directories for all spiders
User-agent: *
Disallow: /ads/
Disallow: /cgi-bin/
Disallow: /scripts/

Ответ 1

(1) Может ли каждый пользовательский агент иметь собственную задержку обхода?

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

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

Таким образом, старшие партизаны robots.txt просто игнорируют ваши строки Crawl-delay.


(2) Где вы помещаете линию задержки обхода для каждого пользовательского агента до или после строки Разрешить/Запретить?

Не имеет значения.


(3) Должен быть пустой пробел между каждой группой пользовательских агентов.

Да. Записи должны быть разделены одной или несколькими новыми строками. См. оригинальная спецификация:

Файл состоит из одной или нескольких записей, разделенных одной или несколькими пустыми строками (завершается CR, CR/NL или NL).


(4) Если я хочу, чтобы все пользовательские агенты имели задержку обхода 10 секунд, было бы правильно?

Нет. Боты ищут записи, соответствующие их пользовательскому агенту. Только если они не найдут запись, они будут использовать запись User-agent: *. Поэтому в вашем примере все перечисленные боты (например, Googlebot, MSNBot, Yahoo! Slurp и т.д.) Не будут иметь Crawl-delay.


Также обратите внимание, что у вас нет нескольких записей с User-agent: *:

Если значение равно '*', запись описывает политику доступа по умолчанию для любого робота, который не соответствует ни одной из других записей. Невозможно иметь несколько таких записей в файле "/robots.txt".

Таким образом, синтаксические анализаторы могут выглядеть (если никакая другая запись не соответствует) для первой записи с User-agent: * и игнорировать следующие. Для вашего первого примера это означает, что URL-адреса, начинающиеся с /ads/, /cgi-bin/ и /scripts/, не блокируются.

И даже если у вас есть только одна запись с User-agent: *, эти строки Disallow предназначены только для ботов, у которых нет другого соответствия записи! Как и ваш комментарий # Block Directories for all spiders, вы хотите, чтобы эти пути URL были заблокированы для всех пауков, поэтому вам нужно повторить строки Disallow для каждой записи.