唯一责任方应当是“最终把URL写入对外可达HTML或响应头的一方”,而不是最早提出URL规则的系统。判断标准很具体:哪个系统在返回给爬虫的响应里决定了链接的href、重定向目标或状态码,哪个系统就对死链负责。若多个系统都能改这一层,就必须先收敛写入权,再谈死链清理。
多个系统同时生成网址规则,常见于旧CMS、商品中心、路由网关、CDN边缘规则和前端框架并存的环境。它们可能都在拼URL,但真正暴露给爬虫的只有一层。责任方定义要落在这层上:
/old/{id}。它不直接对爬虫可见。<a href>、写入Location响应头,或决定返回404/410/301。它直接决定死链是否出现。因此,唯一责任方是“对外写入方”。如果两个系统都能写,就不是责任不清,而是写入权没有收敛,需要先指定一个系统作为唯一出口,另一个降级为输入源。
旧内容、旧系统或旧合作关系退出时,不是所有死链都值得救。可按下面条件分档,再做取舍:
不要靠开会争论,直接取一个死链URL,检查对外响应:
robots.txt只限制了抓取,而URL仍可被外部链接访问,这不等于索引移除,不能把责任推给robots规则。假设一个场景:商品中心生成/p/123,网关把它重写到/product/123,前端又用JS拼出/p/123?from=old。爬虫看到的是前端输出的链接,那么前端所属系统就是对外写入方。若网关同时也能改Location,则需指定网关为唯一重定向出口,前端只负责输出最终href。这个假设说明:责任方不是按系统重要性排,而是按“谁最后写进响应”定。
定义完责任方后,要让它对死链处理有实际控制权:
Location。如果多个系统都声称自己只生成规则、不负责对外写入,那就要检查是否存在隐式写入,例如JS路由、边缘函数或旧缓存。只要某个环节能让爬虫拿到旧URL,它就在事实上参与了对外写入,必须纳入唯一责任方的约束范围。HTTPS不解决死链责任问题,它只保证传输层加密,不保证URL规则正确。
唯一责任方不是行政头衔,而是对“保留、改写、退出”三种结果负责的角色。保留适用于有外链且有等价新内容的URL;改写适用于语义接近且目标页能承接意图的URL;退出适用于无价值且无外链的URL。三者不能同时套用,否则责任方无法判断该输出301还是410。先锁定对外写入方,再按链接价值和内容等价性做取舍,死链处理才不会在多个系统之间反复摇摆。