先给结论:当死链接检测结果在发布后突然回到旧值,最有效的做法不是重扫一遍,而是把“检测快照、发布产物、配置来源”三者的时间戳对齐,找出是哪一步把旧配置重新写回了生效位置。下面用一个假设情境说明具体追踪顺序,以及样本成立但规模化后失效的边界。
假设某站点把一批已下线的旧路径写入死链接检测的忽略清单,发布后扫描结果确实减少。两周后再次发布,检测结果又出现同一批旧路径。此时不能直接断言“配置被回滚”,因为还有几种合理解释:扫描缓存未刷新、发布产物未包含新配置、多环境配置互相覆盖,或检测任务读取的路径与人工查看的路径不一致。请求量或抓取量归零也不能单独证明处理正确,它可能只是任务未运行。
把最近三次检测快照的生成时间、发布流水线的构建时间、配置文件的最后修改时间列成一条时间线。若检测结果的变化点早于构建时间,说明问题可能出在检测侧而非发布侧;若变化点紧随构建之后,则优先怀疑发布产物。这个动作的结果决定下一步方向:指向检测侧就查任务调度与缓存,指向发布侧就查构建产物内容。
仓库里是最新值,不代表运行环境里是最新值。需要分别确认三处:
三者任意一处是旧值,都会让检测结果回到旧状态。若只有检测任务读取旧值,问题在任务侧;若部署环境是旧值,问题在发布或环境变量注入环节。
配置被覆盖通常发生在多个层级,且规模化后例外更多。可按以下顺序排查:
在少量样本上,人工核对的配置往往与生效值一致,所以问题不明显;当环境数量、发布频率增加后,覆盖路径才会暴露。这就是不能把单次样本结论直接照搬到全站的原因。
假设确认是发布脚本在部署前重新生成了旧配置,那么修复动作是让脚本读取单一配置源,并在构建产物中记录配置版本号。修复后再次执行死链接检测,观察结果是否按新规则变化:如果检测结果随配置版本号同步变化,说明覆盖路径已切断;如果仍回到旧值,则继续检查是否存在第二个写入点。这个判断只说明当前路径已处理,不能据此推断所有环境都已同步。
上述追踪顺序适用于配置来源可枚举、发布流程可追溯的站点。若站点存在多个团队各自维护配置、或发布系统与检测系统由不同人员管理,时间戳对齐可能无法覆盖全部写入点,此时需要先统一配置入口,再重复上述步骤。robots.txt 的抓取限制不等于可靠的索引移除,站点地图不保证收录,这些都不能替代对配置覆盖来源的追踪。不同搜索引擎对配置与索引的处理方式须分别核查,不能用一个平台的结果推断另一个平台。