搜索抓取

robots.txt 写宽了会挡掉哪片目录:URL 发现前的第一道闸门

robots.txt 决定蜘蛛能不能抓,却常被写成大范围屏蔽。本文梳理 Disallow 的前缀匹配规则、几种常见误伤场景,以及被挡目录与 Sitemap、抓取日志之间的关系,并给出一套自查和调整步骤,帮你避免 URL 发现在入口处被无意掐断。

搜索抓取

robots.txt 写宽了会挡掉哪片目录:URL 发现前的第一道闸门

robots.txt 是蜘蛛进站前读的第一个文件,它不负责让页面被收录,只负责告诉蜘蛛哪些路径可以抓、哪些先别抓。很多人把它当成一个随手开关,写两行就上线,结果整片目录的 URL 发现被掐断,自己还找不到原因。

先分清发现和抓取

URL 发现指的是蜘蛛从某个地方拿到了这个地址;抓取指的是它真的去请求了这个地址。robots.txt 的 Disallow 挡的是后半段。

于是会出现一种情况:别的页面链接到了 A 地址,蜘蛛确实看到了这个 URL,但请求被拒绝,它不会读取 A 的内容,也无法顺着 A 页面里的链接继续往下走。一条本来能延伸的抓取路径,就断在这一步。

被 robots.txt 屏蔽的 URL 仍有可能出现在搜索结果里,通常没有摘要或摘要陈旧。但这不是内容被正常收录,页面更新也不会被及时反映。

匹配规则是按前缀,不是按目录

Disallow: /search 不只挡住 /search/ 这个目录,还会挡住 /search-tips、/searchbox.html 这类开头相同的地址。写规则时习惯性省略结尾斜杠,就会误伤一批本来正常的页面。

  • Disallow: /tag 会连带挡住 /tags/ 下的页面和 /tag-cloud 这类入口
  • Disallow: /*? 常用来挡参数页,但也可能把带必要参数的详情页一起挡掉
  • Disallow: / 属于极端场景,等于让整站退出抓取
  • 规则里的通配符和结尾符号用得不统一,容易和实际目录范围对不上

建议把要屏蔽的路径写到能明确区分的最小粒度,例如 /search/、/search-result/,而不是一个笼统的单词。

被屏蔽的目录里不要再放 URL

如果 Sitemap 文件里列了一批已经被 Disallow 的地址,相当于一边递名单一边关门。蜘蛛会反复遇到名单里有点、但请求被拒的情况,对这批地址的抓取安排没有正面作用。把 Sitemap 中已屏蔽的 URL 清掉,或者把不需要抓取的路径从 Sitemap 移除,让两边保持一致。

自查与调整步骤

  1. 在浏览器打开 /robots.txt,确认返回 200 且是纯文本,而不是因为路由或防火墙返回 404、403
  2. 逐条读 Disallow,把每条规则和实际目录对照一遍,确认没有误伤相邻路径
  3. 列出站点真正不希望被抓的路径,比如后台、站内搜索结果页、购物车、无意义的大参数分页
  4. 挑一个不该被挡的深层页地址做验证,观察一段时间日志里是否还有蜘蛛请求
  5. 修改后继续观察抓取日志,看被挡路径的请求量是否下降、目标路径是否恢复

屏蔽不等于删除

如果页面已经不需要存在,更合适的做法是返回 410,或者 301 跳转到相关地址,而不是用 robots.txt 挡住。挡住只是让蜘蛛抓不到,地址本身还在,历史索引也可能长期保留一个空壳。这两个动作解决的不是同一个问题。

把 robots.txt 当成一份需要维护的路径清单,每条规则都能说清对应的目录范围,并定期和日志、Sitemap 对照一次。它不会直接带来更多抓取,但能避免那些本不该发生的抓取断裂。