先给结论:多次跳转的友情链接一旦失效,维护责任不在“最终落地页”的站长,而在直接对外承诺该链接可访问的那一方。要找出这一方,不能看跳转终点,而要把每一跳拆开,记录“谁控制这一段、谁改动了这一段”。如果中间某一跳由第三方短链或统计跳转服务控制,责任通常落在使用该服务的链接提供方,而不是接收方。
友情链接交换里常见的跳转链是:对方页面 → 对方站内跳转页 → 短链服务 → 你的落地页。直觉上,谁最后显示 404,谁就该负责;但实际控制权是分段转移的。对方站内跳转页由对方编辑,短链服务由对方注册,落地页由你维护。若短链过期,问题出在对方注册的那一段,但浏览器最终停在你这里,看起来像你的页面坏了。
可核对的证据不是“链接能不能打开”,而是三样东西:每一跳的 HTTP 状态码、跳转目标的域名归属、最后一次改动时间。这三样能把“谁控制”和“谁改动”分开。如果只有最终页 404,而中间跳转全部 301,那责任在最终页一方;如果中间某一跳返回 302 到陌生域名,责任在使用该跳转的一方。
这时你控制中间段,应优先检查自己的跳转配置。动作是:用 curl -I 逐跳请求,记录每段返回的 Location 头。结果会告诉你哪一跳把流量送去了错误目标。若错误目标是你配置的,下一步是修正跳转规则并通知对方重新核验;若错误目标来自对方页面上的旧地址,则把证据发回对方,要求其更新对外承诺的那一段。
这时你无法直接修改中间段,排查顺序应反过来:先确认最终落地页本身是否正常,再要求对方提供每一跳的控制方。动作是:请对方给出跳转链的完整列表,并标注每一跳由谁维护。若对方无法说明某一跳的控制方,默认该段责任在对方,因为对外承诺链接可访问的是对方。此时你不应自行修改落地页去迎合一个不稳定的跳转,否则会把对方的维护缺口转嫁给自己。
假设 A 站与 B 站交换友情链接。B 站提供的链接是 https://b.example/go/a,该地址 302 到 https://t.example/abc,再 301 到 A 站首页。某天 t.example/abc 返回 404。此时:
b.example/go/a,它仍在正常跳转,B 站这一段没有失效。t.example/abc 由 B 站注册的短链服务控制,B 站是使用方,责任在 B 站。如果 B 站声称“短链服务是第三方,不归我管”,这不能免除其对外承诺的责任;B 站可以选择更换短链或直接给出最终地址。A 站能做的实际动作是:把 404 的跳转链截图和状态码记录发给 B 站,要求其在约定时间内修正或替换为稳定地址。若 B 站不处理,A 站可暂时撤下对方链接,避免把失效跳转继续暴露给访问者。
有三种情况不能按上述分段直接归责。第一,若跳转链中某一跳是双方共同约定的统计跳转,且双方都能登录该服务后台,则责任共担,需要双方同时确认改动记录。第二,若跳转目标被第三方劫持或域名过期,而使用方已尽到续费和监控义务,责任判断应看合同或交换时的书面约定,而不是只看控制权。第三,若链接从未正式上线,只是测试地址,则不存在对外承诺,维护责任不成立。
判断时还要注意:跳转次数多并不等于责任复杂,复杂的是控制权是否随跳转转移。只要每一跳都能对应到一个可联系的控制方,责任就能落地。反之,如果某一跳无人认领,默认由提供该跳转的一方承担,直到其能证明该段由对方控制。
交换链接时,除了记录对方页面地址,还应记录跳转链的每一跳和控制方。动作是:在交换记录里增加三列——跳转序号、当前目标、控制方。结果是你以后排查时不必重新猜测,直接按控制方联系。若对方拒绝提供跳转链明细,你可以要求对方直接给出最终落地地址,跳过所有中间跳转。这样做会牺牲一部分统计便利,但换来的是责任边界清晰。
定期核验时,不要只测最终页是否能打开。用逐跳请求记录状态码和跳转目标,才能发现中间段是否被替换。若发现某一跳的目标域名与交换时记录不一致,先联系该跳的控制方确认改动,再决定是否继续保留该链接。把每一次核验结果追加到交换记录里,下一次出问题时就能对照时间线判断是哪一方先改动。