先回答核心问题:当一次 robots.txt 修复在解决旧异常的同时引发新异常,不要继续在同一个文件里叠加规则,而要把“抓取准入”“页面可访问”“索引状态”三层依赖拆开,逐层确认哪一层先发生变化。关键前提是:你手上已有一个实际可访问的 robots.txt,且能观察到修复前后的抓取或收录差异。如果站点尚未上线或没有历史抓取记录,这套拆法不适用。
把读者手里的资料固定为三样:当前 robots.txt 全文、修复前后各一条抓取记录、目标 URL 的返回状态。依赖链通常按这个顺序传导:robots.txt 决定爬虫能否请求,服务器状态决定请求是否成功,页面标签与站点地图影响后续发现和索引。
区分原因时看证据组合:
这三组证据指向不同动作。若把第三层问题误判成第一层,放宽 robots 只会扩大抓取面,不会带来索引,反而可能让更多无价值 URL 被请求。
假设一个场景:原本用 Disallow: /search 屏蔽站内搜索页,后来发现某个栏目页 URL 恰好以 /search 开头,被一并挡住,于是删除该行。删除后栏目页恢复抓取,但站内搜索页开始大量进入抓取队列,服务器响应变慢,栏目页抓取频率又下降。
此时不要恢复整行,也不要立刻加更多规则。可行动作是缩小匹配范围,把路径限定到实际需要屏蔽的目录,例如只写 Disallow: /search/ 并确认站内搜索页确实位于该目录下。改完后观察两件事:栏目页是否恢复请求,搜索页请求是否回落。若只有前者恢复、后者未回落,说明还有别的入口在暴露搜索页,依赖链的下一环在链接结构或站点地图,而不是 robots 文件。
同一份 robots.txt,在前提不同时处理方式相反:
判断依据是目标:要控制“是否被请求”用 robots,要控制“是否被索引”用页面级信号。混用会让依赖链更难拆。
每次只改一处,改完后按下表读结果:
这些现象都可能有其他解释,例如抓取预算波动、缓存、CDN 行为或爬虫调度变化,不能仅凭单项统计归零就断定处理正确。
确认生效后,在 robots.txt 中保留注释说明该规则的边界与原因,例如注明屏蔽范围仅限某个目录。下次再出现异常时,先比对注释与当前 URL 结构是否仍一致;若业务已改版、目录迁移,原规则的前提就失效,应重新评估而不是沿用。必要条件是:每次修改都能对应到一条可观察的抓取记录,否则拆链缺少依据,容易在两层之间反复改动。