结论先说:当死链接检测工具的结果因功能开关而变化,最可靠的做法不是立刻删掉旧记录,而是为每次开关状态建立可对照的版本快照。具体记录三项:开关配置、抓取时间、以及该状态下返回的状态码或重定向链。这样当结果反常时,你能判断是链接真的坏了,还是开关让页面进入了另一种渲染路径。
功能开关常控制页面是否输出某段内容、是否启用重定向、是否展示某个模块。开关一关,原本存在的链接可能不再渲染,检测工具就会报 404 或抓取不到。这不等于链接被删除,只说明当前状态下的页面里没有它。
要区分这两种解释,需要保留对照证据。至少记录:
feature_x=on 或 feature_x=off;如果开关关闭时返回 404、打开时返回 200,那么问题出在渲染条件,而不是链接目标失效。下一步应先检查开关的默认值和回滚方式,而不是直接修改链接。
不是所有历史记录都值得长期保留。按以下取舍处理:
当开关仍可能被切换,或页面仍在灰度发布中,应保留每个开关状态下的快照。保留的最小集合是:开关名、值、抓取时间、状态码、重定向链。这样在开关回滚后,你能快速判断旧问题是否复现。
当开关已永久移除,且页面结构稳定,可以把旧记录改写为“历史状态”并标注失效原因。改写时要写清:该状态对应的开关已下线,当前状态以最新一次抓取为准。不要让旧状态码继续参与当前问题的判断。
当开关只影响非链接内容,且多次抓取都返回相同状态码,可以退出该状态的版本记录,只保留当前有效版本。退出前应确认:该开关不会再次启用,且没有其他页面依赖同一开关。
假设某分类页由开关 show_related=on 控制是否输出“相关链接”模块。检测工具在开关为 on 时抓到 20 个内链,在 off 时只抓到 12 个,并报告其中 8 个为死链接。此时不要直接删除这 8 个链接。先记录两次抓取的开关值和时间,再分别用同一工具复查。如果 off 状态下这 8 个链接确实返回 404,而 on 状态下返回 200,那么它们属于条件渲染链接,处理方式是调整开关逻辑或增加回退路径,而不是删链接。
这个例子的关键假设是:开关切换后页面内容确实发生变化。如果切换开关后状态码不变,那么死链接报告与开关无关,应转向检查链接目标本身。
抓取量或请求量归零,不能单独证明链接已被移除。它还可能来自:抓取被 robots.txt 限制、站点地图未更新、服务器临时不可达、或工具自身的抓取配额变化。要排除这些解释,需要同时看状态码、响应头和开关配置。
另外,robots.txt 的抓取限制不等于可靠的索引移除;站点地图也不保证收录。版本记录只解决“开关变化时如何对照”的问题,不解决索引状态。若开关影响的是页面是否可被抓取,应单独核查各搜索引擎的支持情况,而不是把死链接检测结果直接当作索引结论。
每次调整功能开关前,先跑一次当前状态的抓取并保存结果。调整后再跑一次,把两次结果并排比较。如果状态码或链接集合发生变化,先记录差异,再决定是保留、改写还是退出该版本。这个动作的结果会直接影响下一步:差异集中在开关控制的模块,就修开关逻辑;差异分散在多个无关 URL,就检查服务器或抓取配置。只有把开关状态和抓取证据绑定在一起,死链接检测工具的输出才可用于判断,而不是制造新的误操作。