搜索抓取

robots.txt 里的拦截规则:蜘蛛按什么顺序读,写错会漏掉哪些路径

robots.txt 不决定收录,却决定蜘蛛能不能走到某个 URL。本文梳理规则匹配顺序、通配符与常见误写,说明被拦页面在日志和抓取统计里的表现,并给出与 Sitemap、内链交叉核对的维护顺序。

搜索抓取

robots.txt 里的拦截规则:蜘蛛按什么顺序读,写错会漏掉哪些路径

robots.txt 是站点给爬虫的第一份说明文件。它不决定收录,却决定蜘蛛能不能走到某个 URL。很多被归到“蜘蛛不来抓”的问题,最后追到根上,只是这个文件里有一条规则写歪了。

蜘蛛读 robots.txt 的顺序

爬虫在请求一个 URL 之前,会先取一次 robots.txt,然后拿路径去匹配规则。匹配不是从上往下“命中即停”,而是比较规则的具体程度。

  • 路径越长、越具体的规则优先。Disallow: / 和 Allow: /news/ 同时存在时,/news/a.html 会走 Allow 那条。
  • 长度相同时,Google 等爬虫按 Allow 优先处理,但不同爬虫的实现并不一致。关键路径的放行不要建立在“长度相等靠 Allow”这种假设上。
  • User-agent 分组匹配的是最贴近的那一段。写了多个分组时,蜘蛛只读与自己最匹配的那组,其余组会被直接忽略。
  • * 代表任意字符序列,$ 代表结尾。/private* 会拦住 /private/ 和 /privateabc;/file$ 只拦住恰好以 file 结尾的路径。

几种把蜘蛛挡在门外的写法

  • Disallow 后面写完整 URL,而不是以斜杠开头的路径。规则不会按预期生效,也可能误伤别的路径。
  • 测试环境屏蔽了整站,上线后忘了删掉 Disallow: /。
  • 把 /css/、/js/ 一起屏蔽。渲染抓取拿不到样式和脚本,蜘蛛看到的是一个半成品页面,内容判断容易失真。
  • 用一个通配符把带参数的路径全拦掉,结果分页、筛选和列表翻页一起被挡在门外。
  • 忽略大小写差异。/News/ 与 /news/ 在规则里是两条不同路径。
  • 对同一批页面同时用 noindex 和 Disallow。被屏蔽的页面蜘蛛读不到 noindex,反而可能因为外链被索引成一个没有描述的结果。
  • crawl-delay 设得过大,等于主动给抓取降速。除非服务器确实扛不住,否则不建议依赖这个字段。

被拦住的页面,在数据里长什么样

robots 拦截不会产生 404。访问日志里通常能看到 robots.txt 本身的请求,但目标 URL 根本不出现;在抓取统计里会显示为“被 robots.txt 屏蔽”。如果用的是 403 加 noindex 的组合,蜘蛛拿到的是禁止访问,它对页面的判断就只剩外链和锚文本了。

判断标准很简单:希望被收录的页面,就必须先能被抓取。noindex 只有在蜘蛛读得到页面时才起作用。

核对与维护的顺序

  1. 用官方的 robots.txt 测试工具或站内模拟,逐条验证关键路径是放行还是拦截。
  2. 把屏蔽规则和 Sitemap 里的 URL 做一次交叉比对,看有没有重要页面被挡住。
  3. 看服务器日志里 robots.txt 的请求频率与状态码。稳定返回 200,说明蜘蛛在读;长期 5xx 会被按失败处理,规则更新也跟着延迟。
  4. 改版、换目录、上线语言站之后,重新跑一遍上面的流程。目录变了,规则里的路径也要同步改。

和 Sitemap、内链的分工

Sitemap 负责告诉蜘蛛有哪些 URL,内链负责给蜘蛛一条走得通的路,robots.txt 负责说明哪些别走。三者冲突时,蜘蛛的反应往往很直接:Sitemap 里提交但被规则拦住的 URL,会被当成无效提交;内链指向被拦路径,等于白送一次链接传递。规则、Sitemap、内链指向同一批 URL,抓取才会顺。

最后一句提醒:robots.txt 是一份蜘蛛随时可读的公开文件,改动后不需要提交,但生效有延迟。删规则比加规则更值得谨慎,先把要放行的路径测通,再考虑收紧。