robots.txt 主要就是通过 Allow 指令与 Disallow 指令来分别告诉搜索引擎的爬虫程序哪些 URL 中的内容可以被爬取,而哪些 URL 中的内容不可以被爬取。
正常情况下的优先级
robots.txt 中指令的读取顺序是从上至下,所以说在正常情况下,或者说对于 robots.txt 标准来说,Allow 与 Disallow 谁先被读取,谁的规则就会优先生效:
User-agent: *
Allow: /article/hot
Disallow: /article
在上面的指令中,因为指令的读取顺序是从上至下的,所以 " Allow: /article/hot " 命令将会比 " Disallow: /article " 命令优先生效,所以即便 Disallow 把 /article 下的目录都禁止爬取了,但是因为 Allow 优先允许了 /article/hot 下的目录可以被爬取,所以最后指令的结果就是所有的搜索引擎都将被允许爬取 /article/hot 目录下的内容,但是无法爬取其他 /article 目录下的内容。
但是如果把 Allow 与 Disallow 的顺序颠倒一下的话,结果就会发生变化:
User-agent: *
Disallow: /article
Allow: /article/hot
在上面的命令中,Disallow 命令将会优先被读取,所以这个时候 Disallow 先禁止了所有的搜索引擎去爬取 /article 下的所有内容,所以后面即便 Allow 命令允许所有的搜索引擎去爬取 /article/hot 下的内容也无法改变现状了。所以最后指令的结果就是所有的搜索引擎的爬虫都将被禁止爬取 /article 目录下的所有内容。
所以说,在标准情况下,Allow 命令与 Disallow 命令的顺序是会影响最后搜索引擎的爬虫结果的。
Google 以及 Bing 的优先级
Google 或者 Bing 的爬虫程序在识别 Allow 与 Disallow 命令的规则的时候就稍微与 robots.txt 的标准有些区别。
对于 Google 或者 Bing 的爬虫程序而言,Allow 与 Disallow 之间的顺序是不会影响最后的爬虫结果的。它们所遵守的规则为:
- Allow 与 Disallow 拥有字符数最多的一方优先执行
- 如果 Allow 与 Disallow 拥有的字符数一样多的话,Allow 将会优先执行(Bing 是否也是这样还有待确定,不敢保证)
所以说对于 Google 以及 Bing 而言的话,下面两种的写法都是一样的:都是禁止所有的搜索引擎爬取除了 /article/hot 之外的其他 /article 目录下的内容
User-agent: *
Allow: /article/hot
Disallow: /article
User-agent: *
Disallow: /article
Allow: /article/hot
但是,为了让 robots.txt 兼容所有搜索引擎的爬虫程序,最好还是要将 Allow 命令放在 Disallow 命令之前。