SEO 百科
allow 与 disallow
本页目录
allow 与 disallow
allow 与 disallow 是两条抓取控制指令,写在 robots.txt 里,Disallow 划出禁止抓取的路径,Allow 划出可以放行的路径[1]。
两条指令都写在某个分组里,作用范围限于该分组的爬虫。路径怎么匹配、谁盖过谁,决定了抓取范围落在哪里。写反或者写漏,轻则抓取过量,重则误拦了要收的页面[3]。
两条指令的作用
Disallow 的值是一条路径前缀,以这个前缀开头的网址都不许抓取。百度给了对照写法:Disallow: /help 会挡住 /help.html、/helpabc.html 和 /help/index.html;Disallow: /help/ 却放过前两个,只挡 /help/index.html[5]。
Allow 的匹配方式相同,只是把命中的网址放行。所有网址默认就允许抓取,所以 Allow 很少单独用,它多半用来给 Disallow 开一个口子[5]。
匹配规则与优先级
引擎按路径长短挑规则,前缀越长就越具体,命中的就是最短的那条具体规则[4]。Yandex 把规则按前缀长度从短到长排列再套用,冲突时 Allow 优先[1]。
下面这段放行 /catalog/auto,其余 /catalog 下的网址照挡[1]:
User-agent: *
Disallow: /catalog
Allow: /catalog/auto
Allow 想盖过 Disallow,路径必须比它更长。两条路径一样长时,Google 也按 Allow 处理[4]。反过来,如果 Allow 写得比 Disallow 短,放行就不会生效。
空值与 $ 的写法
值留空时,两条指令行为不同。Disallow: 后面不带路径,等于放开整站;Allow: 后面不带路径,会被忽略[1]。百度对空值的说法一致:Disallow: 表示允许抓取所有网址[5]。
User-agent: *
Disallow:
同一个分组里,Disallow 至少要有一条,文件才会生效;整份文件不存在或者是空文件,网站对所有爬虫开放[5]。
$ 是匹配结尾的符号。以 .php 结尾的网址会命中 Disallow: /*.php$,带参数的同类网址不受影响[1]。不加 $ 时,前缀匹配会一路命中后面所有路径。
与收录范围的区别
这两条指令管的是抓取,不是收录。Google 提醒站长,用 robots.txt 挡住抓取,网址仍可能出现在搜索结果里,只是结果不带页面说明[3]。
原因是外链。别的页面用文字指向这个网址,引擎不进页面也能把网址收进去[3]。Yandex 也写明,被 robots.txt 限制的页面仍可能参与搜索,要移出结果得用 noindex[2]。
所以想省流量,用 Disallow;想让页面不进结果,改用 noindex 或者给页面加密码。
常见误用
一种误用是拿 Disallow 挡搜索结果页却漏了多余网址。百度建议这类带参数的页面用 Disallow: /*?* 之类写法整体挡住,而不是逐个列参数[5]。
另一种误用是大小写混写。路径和爬虫名区分大小写,/Admin/ 和 /admin/ 是两条路径,写错那条不生效[5]。
还有一种误用是把 Allow 放在 Disallow 之前就以为能覆盖。覆盖看的是路径长度,不是先后顺序,两个分组的书写次序都不影响结果[1]。
附录
参见
参考资料
官方(境外)
- 《Disallow and Allow directives》,Yandex。
- 《Using robots.txt》,Yandex。
- 《robots.txt 简介与指南》,Google 搜索中心。
- 《Google 如何解读 robots.txt 规范》,Google 抓取基础设施。
官方(国内)
- 《平台工具使用手册(robots)》,百度搜索资源平台,2020-08-14 更新。
外部链接
无。