先给结论:当 robots txt 的修复引出另一类异常,不要继续在 robots txt 文件本身找原因,而要把“抓取准入”和“索引状态”当成两条独立链路分别验证。修复 robots txt 通常只改变爬虫能否访问某条路径,它不会直接改变已经存在的索引结果;如果修复后出现新的异常,多半是原先被 robots txt 挡住的那条链路重新暴露了出来。下面用一个假设情境把拆链过程写清。
假设一个站点原先在 robots txt 中屏蔽了 /old/ 目录,后来因为业务调整,需要让该目录重新可抓取,于是删除了对应的 Disallow 行。修复动作本身正确,但随后监控显示:该目录下大量旧页面开始出现在抓取日志中,同时站点地图里的新页面抓取频次似乎下降。表面看是“修好一个、坏了另一个”,实际是两条链路被同时激活。
这里要区分两个事实:robots txt 的限制只作用于抓取,不等于索引移除;被 Disallow 挡住的 URL 仍可能因为外链等原因留在索引里。所以放开目录后出现的“旧页面被大量抓取”,不是新问题,而是旧问题重新可见。
拆链的关键是承认 robots txt 只处在最上游。可以按下面的顺序分段,每段单独取证据:
如果三段混在一起看,就会把“旧页面重新被抓”误判成修复的副作用。实际动作是:先对一条代表性 URL 做抓取测试,记录返回状态;再检查该 URL 是否出现在站点地图或内链中。这两步的结果会直接决定下一步查哪一段。
同样是“抓取量变化”,原因不同,处理方向完全相反。可以用下面这组证据做区分:
需要提醒的是,抓取量或请求量归零,本身不能单独证明修复正确或错误。它还可能来自服务器响应变慢、站点整体改版、外链减少等合理解释。把单一指标当作结论,容易在错误的链路上反复修改。
关键前提发生变化时,决策条件也应不同。可以这样划分:
换句话说,robots txt 的修复是否算完成,不取决于文件本身是否改对,而取决于它所服务的那条业务链路是否真的需要被暴露。若不需要,最小改动是恢复原状并记录原因;若需要,就要接受旧页面重新被抓的代价,并单独处理索引段。
假设放开 /old/ 后,发现旧页面被抓取但新页面抓取下降。动作是:对一条旧页面 URL 和一条新页面 URL 分别做抓取测试。若两条都可访问,说明准入段没问题,接着检查新页面是否在站点地图中、是否被内链指向。若新页面缺少发现入口,那么真正要修的是发现段,而不是把 robots txt 再改回去。这个判断会决定下一步是补内链和站点地图,还是调整抓取优先级。
不同搜索引擎对 robots txt 的支持情况需要分别核查,站点地图也不保证收录。因此拆开依赖链后,每一步都要用对应链路的证据来确认,而不是用 robots txt 的修改动作去推断整条链路的结果。