Robots.txt - 多个用户代理的抓取延迟的正确格式是啥?
Posted
技术标签:
【中文标题】Robots.txt - 多个用户代理的抓取延迟的正确格式是啥?【英文标题】:Robots.txt - What is the proper format for a Crawl Delay for multiple user agents?Robots.txt - 多个用户代理的抓取延迟的正确格式是什么? 【发布时间】:2013-06-27 00:02:46 【问题描述】:以下是一个示例 robots.txt 文件,用于允许多个用户代理,每个用户代理具有多个抓取延迟。抓取延迟值仅用于说明目的,在真实的 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/
【问题讨论】:
【参考方案1】:(1) 每个用户代理可以有自己的抓取延迟吗?
是的。每条记录,由一个或多个User-agent
行开始,可以有一个Crawl-delay
行。请注意,Crawl-delay
不是original robots.txt specification 的一部分。但是对于那些理解它的解析器来说,包含它们是没有问题的,作为规范defines:
无法识别的标头会被忽略。
所以较旧的 robots.txt 解析器将简单地忽略您的 Crawl-delay
行。
(2) 您将每个用户代理的 crawl-delay 行放在 Allow / Dissallow 行之前还是之后?
没关系。
(3)每个用户代理组之间是否必须有空格。
是的。 记录必须用一个或多个新行分隔。见original spec:
文件由一个或多个记录组成,由一个或多个空行分隔(以 CR、CR/NL 或 NL 结尾)。
(4) 如果我想将所有用户代理的抓取延迟设置为 10 秒,以下是否正确?
没有。机器人寻找与其用户代理匹配的记录。只有当他们没有找到记录时,他们才会使用User-agent: *
记录。因此,在您的示例中,所有列出的机器人(如 Googlebot
、MSNBot
、Yahoo! Slurp
等)都将具有 no Crawl-delay
。
另请注意,您不能拥有several records with User-agent: *
:
如果值为“*”,则该记录描述了未匹配任何其他记录的任何机器人的默认访问策略。 “/robots.txt”文件中不允许有多个这样的记录。
因此解析器可能会查找(如果没有其他记录匹配)User-agent: *
的第一条记录并忽略以下记录。对于您的第一个示例,这意味着以 /ads/
、/cgi-bin/
和 /scripts/
开头的 URL没有被阻止。
即使您只有 一个 记录与 User-agent: *
,那些 Disallow
行仅适用于没有其他记录匹配的机器人!正如您的评论# Block Directories for all spiders
建议的那样,您希望为所有 蜘蛛阻止这些URL 路径,因此您必须为每个 记录重复Disallow
行。
【讨论】:
以上是关于Robots.txt - 多个用户代理的抓取延迟的正确格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章