20

下面是一个示例robots.txt文件,用于允许多个用户代理对每个用户代理多个抓取延迟。Crawl-delay 值用于说明目的,在真实的 robots.txt 文件中会有所不同。

我在网上搜索了正确的答案,但找不到一个。有太多混合的建议,我不知道哪个是正确/正确的方法。

问题:

(1) 每个用户代理都可以有自己的抓取延迟吗?(我假设是的)

(2) 你把每个用户代理的 crawl-delay 行放在 Allow / Dissallow 行之前还是之后?

(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/
4

1 回答 1

26

(1) 每个用户代理都可以有自己的抓取延迟吗?

是的。每条记录,由一行或多User-agent行开始,可以有Crawl-delay一行。请注意,这Crawl-delay不是原始 robots.txt 规范的一部分。但是对于那些理解它的解析器来说,包含它们是没有问题的,正如规范所定义的那样:

无法识别的标头将被忽略。

所以较旧的 robots.txt 解析器将简单地忽略您的Crawl-delay行。


(2) 你把每个用户代理的 crawl-delay 行放在 Allow / Dissallow 行之前还是之后?

没关系。


(3) 每个用户代理组之间是否必须有空格。

是的。记录必须由一个或多个新行分隔。请参阅原始规格

该文件由一个或多个由一个或多个空行(以 CR、CR/NL 或 NL 终止)分隔的记录组成。


(4) 如果我想将所有用户代理的抓取延迟设置为 10 秒,以下是否正确?

不会。机器人会寻找与其用户代理匹配的记录。只有当他们没有找到记录时,他们才会使用该User-agent: *记录。因此,在您的示例中,所有列出的机器人(如GooglebotMSNBotYahoo! Slurp)都没有 Crawl-delay.


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

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

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

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

于 2013-07-14T10:00:32.477 回答