在robots.txt中处理“允许”和“禁止”的正确方法是什么?


8

我运行了相当大规模的Web搜寻器。我们会努力在公认的社区标准内操作爬虫,其中包括尊重robots.txt。我们对爬虫的投诉很少,但大多数情况下都是关于robots.txt的处理。网站管理员通常会在他的robots.txt文件中犯一个错误,我们很乐意指出错误。但是,我们将定期碰上涉及的处理灰色地带AllowDisallow

robots.txt的页面没有覆盖Allow。我看过其他页面,其中一些说爬虫使用“第一个匹配”规则,而另一些没有指定。这导致一些混乱。例如,Google关于robots.txt的页面曾经有以下示例:

User-agent: Googlebot
Disallow: /folder1/
Allow: /folder1/myfile.html

显然,这里的“第一个匹配”规则不起作用,因为搜寻器会看到Disallow和消失,而不会搜寻明确允许的文件。

如果我们忽略所有Allow行,我们就一清二楚了,但是我们可能不会对我们允许进行爬网的内容进行爬网。我们会错过的事情。

Allow首先检查Disallow,然后再进行检查,我们已经取得了巨大的成功,其Allow目的是要比更加具体Disallow。这是因为,默认情况下(即在没有相反说明的情况下),允许所有访问。但是然后我们遇到了这样的事情:

User-agent: *
Disallow: /norobots/
Allow: /

这里的意图很明显,但是这Allow: /将导致一个机器人进行检查Allow,认为它可以爬网该网站上的任何内容。

在这种情况下,即使可以解决。我们可以将匹配项Allow与匹配项进行比较,Disallow并确定不允许我们在/ norobots /中抓取任何内容。但这在通配符的情况下无法解决:

User-agent: *
Disallow: /norobots/
Allow: /*.html$

那么问题是,机器人可以爬网/norobots/index.html吗?

“首次匹配”规则消除了所有歧义,但是我经常看到网站显示类似旧的Google示例的内容,而在Allow 后面放置了更具体的内容Disallow。该语法需要机器人进行更多处理,并导致无法解决的歧义。

那么,我的问题是做事情的正确方法是什么?当涉及到robots.txt处理时,网站管理员对行为良好的bot有何期待?


简单地按顺序(从上到下)处理所有指令似乎可以消除所有歧义(包括处理通配符 URL模式,这是正式的“未定义”)。但是,主要的搜索引擎机器人(Googlebot,Bingbot等)无法像这样工作,因此不可行。
怀特先生

Answers:


4

一个非常重要的注意事项:允许语句应位于禁止语句之前,无论您的语句有多具体。因此,在您的第三个示例中-不,机器人不会爬行。/norobots/index.html

通常,作为个人规则,我首先放置allow语句,然后列出不允许的页面和文件夹。


因此,您建议我遵循“第一匹配规则”标准?也就是说,漫游器读取robots.txt并采用与所讨论网址匹配的第一个Allow或Disallow吗?
Jim Mischel

1
但是您知道这是否是robots.txt的公认解释吗?也就是说,如果我要实施“第一匹配规则”标准,那将是大多数网站管理员所期望的吗?
Jim Mischel

4
-在robots.txt文件中的维基百科文章中允许的描述en.wikipedia.org/wiki/Robots_exclusion_standard#Allow_directive - (和其他几个网站)说:“第一个匹配规则”为标准。因为那是100%明确,易于实现和证明正确的,所以我就是这样做的。
Jim Mischel

1
感谢您回答您自己的问题:)我不确定该如何回答。我不知道普遍接受的方法,但是自从我开始担任SEO专家以来,这就是我一直在使用它的方式,并且它始终能够正常工作。
Vergil Penkov 2010年

1
“允许”和“禁止”语句的顺序对Googlebot来说没有什么区别,Googlebot着眼于特定性。必应也可以,但对其他搜索引擎一无所知。
pelms

2

这是我在这三个示例中看到的内容。

示例1
我将忽略文件之外的整个/folder1/目录。由于他们明确允许这样做,因此我认为阻止整个目录并明确允许该文件相对于列出他们希望阻止的每个文件都更加容易。如果该目录包含很多文件和子目录,robots.txt文件可能很快就会变得笨拙。myfile.html

示例2
我假设/norobots/目录已超出限制,并且其他所有内容都可以进行爬网。我将其读取为“抓取/ norobots /目录以外的所有内容”。

示例3
与示例2相似,我将假定/norobots/目录已超出限制,并且该目录中所有.html未包含的文件都可以被爬网。我将其读取为“抓取所有.html文件,但不抓取/ norobots /目录中的任何内容”。

希望您的漫游器的用户代理包含一个URL,他们可以在其中找到有关您的爬网习惯的更多信息并提出删除请求,或者为您提供有关他们如何解释robots.txt的反馈。


1
您的答案可能符合目的,但最后一个答案除外,我认为这有些疑问。在那些特定的情况下,我可以对机器人正确处理的代码进行编码,但是还有其他一些难以确定的模糊情况。更多,我正在寻找一个通用的解决方案。而且,是的,我们的用户代理字符串具有指向“常见问题”页面的链接。尽管我们可以描述如何处理robots.txt,但如果不需要的话,对于所有相关人员来说都是最好的选择。也就是说,如果每个人都以相同的方式处理事情。但是事实并非如此。
Jim Mischel

以上是Googlebot处理示例的方式,可以在其robots.txt测试工具(网站站长工具>阻止的网址)上进行测试。Google不在乎您是否将“允许”或“不允许”放在首位,而是拥有一种确定特异性的算法,这会导致一些不明显的结果。例如,如果在第三个示例中将'/*.html$'替换为'/*myfile.html$',则允许'myfile.html'而不是被阻止,或者如果您丢失了' / norobots /',也允许使用.html文件。
pelms

啊哈!根据Wikipedia的说法,Google只是查看字符数来确定要使用的指令,如果是“ draw”,则将其与“ Allow”一起使用。
pelms
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.