要追踪覆盖来源,先把线上 robots.txt 当作证据而不是结果:记录它当前的响应内容、响应头和生效时间,再按“发布产物 → 发布系统 → 边缘缓存 → 源站文件”的顺序逐层比对。哪一层的值与线上不一致,问题就落在那一层到线上之间,而不是继续修改规则本身。
从能复现问题的网络位置抓取 robots.txt,保存原始响应体、HTTP 状态码、Content-Type、Last-Modified、ETag 以及响应中的缓存相关头。同时记录抓取时间,并连续抓取两到三次,观察内容是否在短时间内变化。
如果多次抓取结果一致,说明当前是一个稳定状态,可以按静态文件追踪;如果结果来回跳变,说明存在多份产物或缓存竞争,此时先确定跳变周期,再对应发布记录和缓存刷新记录,而不是急着改规则。
这一步的实际动作是建立一份带时间戳的基线。它的结果决定下一步方向:稳定状态查文件与发布流水线,跳变状态查缓存、多实例和回滚机制。
把 robots.txt 可能经过的环节列出来,逐层取一份内容做对比。常见层级如下:
对每一层取内容时使用同一套判断依据:规则行、注释、空行、换行符和结尾是否有差异。旧值往往不是整段不同,而是某几行回退,因此逐行比对比整体对比更容易发现覆盖点。
如果发布产物已经正确,但源站文件是旧值,问题在发布或部署环节;如果源站正确而线上返回旧值,问题在缓存或代理层;如果源站文件本身就是旧值,问题在上游产物或人工改动。
拿到各层内容后,用时间做交叉验证。查看发布系统的任务记录、构建日志和部署日志,确认最近一次发布的时间、目标机器和发布结果;再查看文件系统上的修改时间,与发布记录是否吻合。
这里要区分几种解释:
时间只能提供线索,不能单独证明因果。比如文件修改时间未变,也可能因为发布工具保留了原时间戳,需要结合校验值或内容比对确认。
假设某站点在发布后,线上 robots.txt 的 Disallow 行回到了两周前的版本。仓库中的源文件已经是新规则,构建产物也是新规则,但源站文件是旧规则,且文件修改时间与两周前的一次发布吻合。
这时可以推断覆盖发生在“构建产物到源站”之间,而不是仓库或规则设计问题。下一步动作是检查发布系统是否有从备份目录同步的步骤,或是否有另一个任务在发布后写入旧模板。修正该步骤后,再重新发布并抓取线上文件验证,而不是直接改 robots.txt 内容。
如果同样的比对显示源站文件是新规则,而 CDN 返回旧规则,那么修正对象就变成缓存刷新或多节点同步,和上面的处理方向不同。
找到覆盖来源并修正后,不要只在自己常用的网络位置抓一次。用与最初相同的抓取路径复验,确认响应内容、状态码和缓存头都符合预期,并观察一段时间内是否再次回退。
复验通过只能说明当前这一路径返回正确,不能推断所有搜索引擎、所有地区节点或所有抓取端都拿到同一版本。如果站点使用多 CDN、多机房或多域名,需要分别核查。
另外,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;即使 robots.txt 恢复正确,也不应把它当作移除已收录页面的唯一手段。修复的目标是让配置回到预期状态,而不是承诺某种抓取或收录结果。