搜索抓取

robots.txt 与 URL 发现:被自己的规则挡住的入口怎么排查

robots.txt 决定蜘蛛能不能抓,也间接决定了它能不能顺着页面继续发现 URL。本文先讲清职责边界,再梳理几种典型的自我封禁写法,并给出一套从通读规则、对照目录、抽样 sitemap 到观察抓取痕迹的核对顺序,同时说明日志里看不到被拦请求时该如何判断。

搜索抓取

robots.txt 与 URL 发现:被自己的规则挡住的入口怎么排查

很多抓取异常不是蜘蛛不来,而是站点自己在 robots.txt 里把入口关掉了。robots.txt 决定的是能不能抓,不决定知不知道,但一旦某个目录被禁止抓取,蜘蛛就无法顺着这个目录里的链接继续发现更深的 URL——发现路径会断在入口这一步。

先分清 robots.txt 的职责边界

它是一份抓取许可声明,不是 URL 发现清单。把地址写进 sitemap 或内链,蜘蛛可能知道它存在;但只要 robots.txt 不允许抓取,它就取不到内容,也不会继续跟进页面里的链接。所以排查 URL 发现异常时,robots.txt 应该放在靠前的位置,而不是等日志翻完再看。

几种典型的自我封禁写法

  • 测试残留的全站封禁。上线前写的「禁止所有」忘了删,或者只删了一半,表现是抓取覆盖面突然收窄。
  • 把 sitemap 放在被禁目录里。声明了 sitemap 地址,但该路径本身落在禁止范围内,声明形同虚设。
  • 通配符误伤列表页。用通配符挡参数,本意是清理重复 URL,却把翻页、正常需要发现的页面一起挡掉。
  • 封掉静态资源目录。样式表和脚本被禁止抓取时,依赖脚本渲染的页面在蜘蛛眼里可能是空的,正文里的链接自然也看不到。
  • 放行与禁止规则混用后顺序混乱。规则越长,越容易漏掉某条更具体的禁止项。

逐条核对的顺序

  1. 完整打开 robots.txt,从第一行读到最后一行,不要只看自己记得的那几条。
  2. 列出所有禁止与放行规则,对照站点目录结构,标出会被命中的路径。
  3. 抽取 sitemap 里的 URL 做抽样,看有多少落在被禁范围内。
  4. 检查声明 sitemap 的地址能否访问、是否被自己的规则覆盖。
  5. 确认样式表、脚本、图片目录没有被误封,尤其是内容靠前端渲染的页面。
  6. 核对放行目录里是否还有真实存在的内链入口,别让放行目录变成空壳。

日志里看不到的那部分

被 robots.txt 拦下的请求通常到不了服务器,日志里只会安静一片。所以「日志没有异常」并不等于「发现正常」,这两件事要分开看。如果某个目录长期没有任何抓取记录,又找不到 404 或超时的痕迹,先怀疑规则,再怀疑其他原因。

和 noindex 的区别

禁止抓取是不让取内容,noindex 是取到之后不让收录。想下线内容时,两者不能互相替代:只写禁止抓取,蜘蛛进不来,也就看不到 noindex,判断会一直停在原地。

改完规则之后怎么观察

规则调整不必一步到位。可以先放开一层目录,观察一段时间里该目录的抓取请求量、返回状态分布,以及更深层 URL 是否开始出现抓取痕迹。放开的节奏取决于服务器承受能力和内容规模,没必要一次性全开。

robots.txt 只管抓取许可,不管 URL 是否被记录。被禁止抓取的地址仍可能以缺少描述的形式出现在结果里,所以别把它当成内容下线的工具。

把 robots.txt 当作一条需要定期复核的通道规则,而不是一次写完就不动的文件,URL 发现路径上的堵点会少很多。