当页面内容由功能开关控制时,死链接修复不能只靠改一次链接就结束。你需要把“开关状态”和“页面输出”绑定记录:同一个URL在开关A开启时返回200,关闭时可能变成404或410。假设某电商站把“旧分类入口”放在一个开关后面,关闭开关后入口链接消失,但导航和站点地图仍指向它,于是爬虫和用户都会撞上死链接。此时正确的修复动作不是直接删链接,而是先记录开关版本、页面响应和链接来源,再决定是恢复开关、改链接还是做重定向。
普通死链接修复记录通常只保存URL、状态码和修复时间。功能开关引入后,同一个URL的响应会随开关状态变化,旧记录就不再代表当前线上状态。比如你上周记录“/old-category/ 返回200”,但本周开关关闭后它返回404;如果只看旧记录,会误判为链接正常。
更麻烦的是,开关可能只影响页面的一部分。假设某个商品列表页的“推荐位”由开关控制,关闭后推荐位里的链接不再输出,但页面主体仍返回200。此时页面没有死链接,但推荐位链接的抓取入口消失了。你需要区分“页面级死链接”和“链接输出级消失”,否则会把正常页面误判为故障。
记录版本状态时,至少要把开关名称、开关值、记录时间、URL、HTTP状态码和链接来源放在同一条记录里。这样当死链接出现时,你能判断是开关变化导致,还是链接本身被删除。
假设一个内容站有“专题聚合页”功能开关,开启时输出专题入口链接,关闭时入口链接不再出现在首页。某天你发现首页上原先的专题链接变成404。先不要直接改首页模板,按下面步骤记录:
如果记录显示开关从开启变为关闭,且专题页本身仍可访问,那么死链接的根因是“入口链接被开关隐藏”,不是页面被删除。此时可选动作有两个:
这两个选择成立的条件不同:如果开关只是临时灰度,恢复开关更直接;如果开关是长期策略,改链接或重定向更稳。记录版本状态的价值就在这里——它让你知道该改开关还是改链接。
规模化后,例外往往出现在记录粒度上。只记录页面级状态,会漏掉“页面200但内部链接404”的情况;只记录链接级状态,又可能忽略开关变化导致的批量消失。建议把记录分成三层:
当三层记录对齐后,你可以快速回答:是开关关闭导致链接消失,还是目标页面真的返回404。假设某次记录显示开关未变,但目标页面返回404,那么问题不在开关,而在页面本身;如果开关变了且多个页面同时出现死链接,优先检查开关影响范围。
这里有一个容易忽略的边界:robots.txt 的抓取限制不等于可靠的索引移除。即使你用robots.txt挡住某个路径,已经存在的死链接仍可能被用户或外部引用访问。记录版本状态时,不要把robots.txt当成修复手段,它只影响抓取,不改变链接是否可访问。
记录完成后,修复动作要能改变下一步的判断。比如你选择“恢复开关”,下一步就是重新抓取受影响URL,确认状态码从404变为200,并记录新的开关值。如果你选择“做301重定向”,下一步是检查重定向链是否只有一跳,以及目标页面是否与原始链接主题一致。假设重定向目标返回200,但内容与原始链接无关,用户仍会认为这是错误跳转,死链接问题没有真正解决。
站点地图不保证收录,所以不要把“把URL放回站点地图”当作修复完成的标志。你需要用实际抓取结果确认链接可访问。对于开关控制的页面,建议在开关变更时自动记录一次版本快照,至少包含开关值、页面状态和链接输出。这样下次出现死链接时,你能直接对比变更前后的记录,而不是从零排查。
最后,规模化后的例外通常来自开关组合。单个开关关闭时页面可能正常,两个开关同时关闭时页面才返回404。记录版本状态时,如果只记一个开关,就会漏掉组合条件。假设某页面依赖开关A和开关B同时开启才输出内容,那么记录里要同时保存A和B的值,否则无法复现死链接出现的条件。