先给有条件的结论:如果发布系统每次上线都会把 robots.txt 覆盖回旧值,优先怀疑“配置源文件 + 发布流水线 + 运行时生成”三段中至少有一段没有以当前版本为准;只有先确认最终对外返回的内容由哪一段决定,追踪才不会停留在反复改文件、反复被覆盖的循环里。这个判断对多数自建发布流程成立,但有一个反例会让它失效——当 robots.txt 由边缘节点或缓存单独下发,而源站文件其实正确时,继续改仓库里的配置文件不会影响最终结果。
追踪来源的第一步,是区分三种可能:文件被写回、生成规则被写回、对外响应被缓存。它们表现相似,但排查方向完全不同。
一个实际动作是:在发布前后各取一次对外响应,同时取一次源站文件,并记录两者的差异与时间。这个动作的结果会直接决定下一步——如果两者不一致,问题在缓存或下发层;如果两者一致且都是旧值,问题在配置源或流水线。
确认层级后,需要找出是哪一步把旧值写进去。可用的线索包括文件修改时间、发布记录、配置仓库的提交历史,以及运行时注入的环境变量。
假设一个短例子:某次发布后 robots.txt 里的 Disallow 路径回到三个月前的版本,而提交历史显示最新提交是正确的。此时若源站文件确实是旧的,说明发布步骤用了旧产物或旧分支;若源站文件是新的,但对外响应是旧的,说明问题不在提交,而在缓存或边缘配置。这个例子只用于说明比较方法,不代表任何真实项目结果。
关键是把“最近一次正确值”和“最近一次错误值”之间的所有变更列出来,逐项排除,而不是只看最后一次改动。
前面结论成立的前提是:对外响应由源站文件或源站生成逻辑决定。如果 robots.txt 由 CDN、反向代理或边缘函数单独下发,源站文件正确并不能保证对外正确。
这时继续在发布系统里改配置,只会让源站和对外结果继续分叉。判断方法是:直接请求源站地址,绕开边缘层,比较返回内容。如果源站是新值、对外是旧值,追踪目标应转向边缘配置和缓存刷新策略,而不是发布流水线。
在动手改配置前,先固定三类证据:对外响应、源站响应、发布记录。三者对齐后,再决定修改对象。
需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录;不同搜索引擎对规则的支持情况须分别核查。追踪覆盖来源的目标是让对外配置可解释、可复现,而不是承诺某种抓取或收录结果。