先给结论:不要急着改发布流程,也不要立刻回退整次发布。先判断这是“配置来源被重新读取”还是“旧值被重新写入”。前者通常只需修正生效顺序,后者才需要追到具体提交。判断依据是覆盖发生的时间点与发布动作是否同步:如果每次发布都稳定复现,多半是来源优先级问题;如果只在特定分支、特定环境或特定时间出现,更可能是有人或某个任务把旧值写了回去。
这两种情况的追踪路径完全不同,选错方向会浪费大量时间。
来源被重读的典型特征是:仓库里的目标文件其实是最新值,但线上生效的是旧值。常见原因是发布时加载了另一份配置,比如环境变量、配置中心的旧命名空间、构建缓存里的旧产物。此时文件内容没有变,变的是“谁被读到了”。追踪重点是发布脚本的加载顺序和产物来源。
旧值被写入的典型特征是:线上生效的旧值确实来自某次提交,且这份旧值在仓库里真实存在过。追踪重点是提交历史和触发者。
一个可操作的区分动作:在发布前后各取一次线上生效配置的原始内容,与仓库当前分支的同名文件做逐字节比较。如果线上值等于某个历史提交的内容,偏向“被写入”;如果线上值等于另一份配置源的内容,偏向“被重读”。这个比较结果直接决定下一步查提交还是查加载顺序。
确认是旧值被写入后,常见有三种处理方式,代价差别很大。
如果旧值来自一个仍在运行、只是没人记得的定时任务,那么“加覆盖”只会让问题延后复发,此时改写流程或退出自动化更合理。反过来,如果旧值来自一次性的手工操作,加覆盖并记录来源就够用。
当证据指向“旧值被写入”时,按以下顺序缩小范围:
这里有一个容易误判的点:如果某次发布后百度收录情况查询的结果出现波动,不能直接归因于配置被覆盖。抓取量或查询结果的变化还可能来自抓取配额调整、页面本身的内容变动、外链变化,或者只是数据统计的延迟。配置覆盖只是可能原因之一,需要先确认配置确实回到了旧值,再谈它对收录的影响。
假设某站点把 robots.txt 的生成规则放在发布系统里,规则中包含对某些路径的抓取限制。某次发布后,线上 robots.txt 又出现了早已删除的限制行。
如果时间线显示:每次发布后约一分钟内该限制行出现,且发布日志里有一步“同步基础配置”,那么这是来源被重读,应优先改加载顺序,保留自动发布。如果时间线显示:限制行只在每周某个定时任务运行后出现,与发布无固定关系,那么这是旧值被写入,加覆盖没有意义,应停掉或改写那个定时任务。如果时间线无法区分,就先做一次只改配置、不改代码的发布,观察旧值是否复现——复现则偏向来源重读,不复现则偏向外部写入。
无论哪种结论,都要注意:robots.txt 的抓取限制并不等于可靠的索引移除,改回正确配置也不保证已收录页面立刻变化。这一步的作用是排除配置这个变量,而不是把它当成收录问题的唯一解释。