Robots.txt - 多个用户代理的爬行延迟应该使用什么格式?

20
以下是一个示例的robots.txt文件,允许多个用户代理,并为每个用户代理设置不同的爬行延迟。Crawl-delay值仅用于说明目的,在实际的robots.txt文件中会有所不同。
我在网上搜索了很多答案,但没有找到合适的答案。有太多混合的建议,我不知道哪种是正确/合适的方法。
问题:
(1)每个用户代理都可以有自己的爬行延迟吗? (我认为是的)
(2)在Allow / Dissallow行之前还是之后放置每个用户代理的crawl-delay行?
(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个回答

26
(1) 每个用户代理是否可以有自己的爬行延迟?
是的。每个记录由一个或多个“User-agent”行开始,可以有一个“Crawl-delay”行。请注意,“Crawl-delay”不是原始robots.txt规范的一部分。但是,对于那些理解它的解析器来说,包含它们并没有问题,因为规范定义
未被识别的标头将被忽略。
因此,旧的robots.txt解析器将简单地忽略您的“Crawl-delay”行。

(2) 每个用户代理的爬行延迟行应该放在Allow / Dissallow行之前还是之后?

无所谓。


(3) 每个用户代理组之间是否需要有空行?

是的。每个记录必须由一个或多个换行符分隔。请参见原始规范

文件由一个或多个记录组成,每个记录由一个或多个空行分隔(以CR、CR/NL或NL结尾)。


(4) 如果我想将所有用户代理的爬行延迟设置为10秒,以下内容是否正确? 不正确。机器人会寻找与其用户代理匹配的记录。只有当他们找不到记录时,才会使用“User-agent:*”记录。因此,在您的示例中,所有列出的机器人(如Googlebot、MSNBot、Yahoo!Slurp等)都将没有Crawl-delay。

请注意,您不能有使用User-agent: *的多个记录

如果值为“*”,则该记录描述了任何未匹配其他记录的机器人的默认访问策略。 不允许在“/robots.txt”文件中有多个这样的记录。

因此,解析器(如果没有其他记录匹配)可能会查找第一个具有User-agent: *的记录并忽略其后续记录。对于您的第一个示例,这意味着以/ads//cgi-bin//scripts/开头的URL将不会被阻止。

即使您只有一个带有User-agent: *的记录,这些Disallow行也仅适用于没有其他记录匹配的机器人!正如您的注释# Block Directories for all spiders所建议的那样,您希望这些URL路径被所有蜘蛛阻止,因此您必须为每个记录重复Disallow行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接