唯一责任方应当是“最终写入网址的那一层”,而不是最早提出命名建议的编辑后台、CMS 模板或路由组件。若多个系统都能拼出 URL,就必须在链路上指定一个权威生成器,其余系统只输出标识符或参数,不再自行拼主机名和路径。判断标准很简单:谁掌握主机名、路径前缀和参数序列化的最终决定权,谁就对网址负责。
常见的变化场景是:原来只有一个内容系统生成网址,后来接入搜索、推荐、活动页或旧站迁移工具,多个系统开始各自拼二级域名。此时不要先改模板,而要先画出一条从内容标识到最终 URL 的链路,标出每个环节是否修改了主机名、路径或参数顺序。
这三种取舍的前提不同。保留的前提是链路可验证;改写的前提是能找到唯一写入点;退出的前提是确认旧规则不再承载有效流量或必要跳转。
定义责任方时,不要用“内容由谁创建”来判断,而要用“谁最后写主机名”。假设一个内容系统输出 article_id=42,路由层把它变成 https://news.example.com/a/42,那么路由层就是责任方。若另一个活动系统又把它拼成 https://m.example.com/a/42,冲突就出现了:两个系统都认为自己能生成最终网址。
实际动作是:在路由层增加一个校验步骤,只允许责任方输出完整 URL,其他系统输出 article_id 和必要参数。结果是,后续排查时只需检查一个生成器,而不是在每个系统里搜域名字符串。这个动作会直接影响下一步:如果校验发现仍有系统绕过责任方,就应把它降级为参数提供方,而不是继续给它写主机名的权限。
当唯一责任方发生变更,旧网址的处理不能只看“新规则是否更整齐”。要分别核查旧网址是否仍被内部系统引用、是否仍出现在站点地图、是否仍被 robots.txt 限制抓取。这里有一个容易误判的点:robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。因此,旧网址是否退出,不能仅凭抓取量归零或站点地图删除来判断。
更稳妥的做法是:先确认旧网址是否返回有效内容或跳转,再决定保留或改写。若旧网址仍返回 200 且内容与新版重复,应改写为指向新责任方生成的规范网址;若旧网址已无有效内容,且没有内部引用,才考虑退出。退出前还要确认没有其他系统仍在生成该旧主机名,否则退出动作会被重新写回。
当多个系统同时生成网址规则时,问题往往表现为同一内容出现多个主机名或路径。要区分原因,可以看三类证据:
这些证据只能说明“哪里发生了生成”,不能单独证明“哪个系统正确”。例如,请求量归零可能是因为旧网址被内部引用移除,也可能是因为抓取被限制,还可能是因为跳转链中断。需要结合生成记录和内部引用清单一起判断。
假设某站点有三个系统:内容后台、活动页工具和旧站迁移脚本。内容后台输出 article_id,活动页工具输出带活动参数的完整 URL,迁移脚本输出旧路径的完整 URL。此时唯一责任方不应是三个系统中的任意一个,而应是新增的路由层:它接收 article_id 和活动参数,统一决定主机名与路径前缀。
动作是:活动页工具和迁移脚本改为只传参数,不再写主机名。结果是,活动页和旧路径都能被路由层映射到同一主机名下的规范路径。下一步要检查的是,迁移脚本是否仍被定时任务调用;若仍被调用,就应停用其写主机名的权限,只保留参数输出。
若无法新增路由层,退而求其次的做法是:指定内容后台为唯一责任方,活动页工具只传活动 ID,迁移脚本只传旧路径 ID。前提是内容后台能覆盖所有需要生成网址的场景;若不能覆盖,就应先缩小迁移脚本的职责,而不是让它继续生成完整网址。
确定唯一责任方后,按以下顺序检查,可以避免把生成冲突误判为索引问题:
这个顺序的实际意义是:如果责任方没有收敛,先改站点地图或 robots.txt 只会掩盖冲突,不会解决冲突。反之,责任方收敛后,旧网址的保留、改写或退出才有稳定的判断基础。责任方一旦确定,后续所有网址规则变更都应经过它,其他系统只提供参数,不再自行拼装完整网址。