唯一责任方不应按“谁写的规则”来定,而应按“谁能在故障时独立回滚并证明结果”来定。假设一个常见情境:CMS、商品中台和CDN边缘函数都会拼接URL,死链修复工具每天汇总的404里既有真实下线页面,也有被错误前缀拼出的地址。此时若让三个系统各自认领,通常没人能说清某条404该由谁改;正确做法是先指定一个“URL生成仲裁方”,其余系统只提交输入,不直接产出面向用户的最终链接。
把参与方按职责拆成角色,比按部门拆更容易落地。第一类是URL生成方,负责产出规范化后的链接;第二类是URL消费方,只读取链接并渲染,不自行拼接;第三类是死链观测方,也就是死链修复工具所在的监控环节,只负责汇总和分类,不直接改规则。唯一责任方就是生成方,且只能有一个。
判断某个系统该不该成为生成方,可以看两个条件:它是否掌握页面下线和改址的完整状态;它是否能在不依赖其他系统发布的情况下,独立修改并回滚规则。两个条件都满足,才适合当仲裁方。只满足一个,就应退为消费方或数据提供方。
假设某商品详情页在死链修复工具里连续出现404,地址形如 /p/12345?from=list,而实际有效地址是 /product/12345。按角色排查会得到三种可区分的原因:
/p/,同一规则下大量链接同时失效,错误模式高度一致。这三种原因的处置动作完全不同。第一种改生成方规则并全量重发;第二种删掉消费方的拼接逻辑;第三种修监控的归一化规则,不动线上链接。如果不先定义唯一责任方,团队很容易在第三种情况上改线上代码,把本来正常的页面改坏。
指定责任方之后,需要用约束把它固定下来,否则过一段时间又会被绕过。
这里要区分抓取限制和索引移除:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。责任方在验证修复时,应分别核查不同搜索引擎的支持情况,而不是用一份配置推断所有结果。
如果现在就要定责任方,可以先做一次链接来源归因:从死链修复工具导出最近一批404,按URL前缀和来源页面分组,标出每组链接是由哪个系统输出的。分组后通常会出现一个主导来源,它覆盖的错误模式最多,也最接近页面状态的完整视图,这个来源就应被指定为唯一生成方。
这个动作的结果会直接影响下一步:如果主导来源是CMS,那么中台和边缘函数要改成读取CMS输出的链接;如果主导来源是边缘函数,CMS就退为内容提供方,不再直接产出对外地址。归因完成前不要并行修改多个系统,否则错误模式会互相掩盖,后续无法判断哪次改动真正生效。责任方确定后,再让死链修复工具按新规则重新归类,用同一批样本对比修复前后的分组变化,作为是否继续调整的依据。