处理死链时,真正的难点往往不是删掉那个返回 404 的地址,而是确认它前后依赖了哪些环节:谁在链接它、它是否被跳转规则接管、它有没有进入站点地图、robots.txt 是否仍允许抓取、日志里是否还有抓取请求。检查依赖的可行方法是:先固定一个死链样本,再按“入口—跳转—状态码—抓取与索引信号”的顺序逐层验证,每层只改变一个条件,观察结果是否随之变化。
假设某站点把旧产品页 /product/a 下线,服务器直接返回 404。运营人员只把这个地址从站点地图删除,就认为处理完成。几周后,站内搜索、旧文章正文和外部链接仍然指向它,用户点击后落到 404 页面。
这个例子里的依赖至少包括四层:
常见错误是只检查其中一层。例如看到浏览器能打开新页面,就认定跳转正常,却没有确认返回的是 301 还是 302,也没有检查跳转目标是否又链回死链,形成循环。另一个错误是只看页面显示,不看 HTTP 状态码,把自定义 404 页面误判为正常页面。
下面步骤适合已经定位到具体死链、需要判断影响范围的场景。若只是全站普查,应先抽样,再对样本执行同样流程。
Location 指向哪里,以及是否存在多次跳转。判断结果时,可以按以下条件区分:如果返回 404 且无跳转,依赖主要在链接来源和索引清理;如果返回 301 但目标也是 404,问题在跳转目标;如果返回 200 但内容是错误页,说明服务器把死链伪装成了正常页,需要修正状态码;如果 robots.txt 禁止抓取,则要先判断是否应放开,再谈索引变化。
这三者常被混为一谈,实际职责不同。301 跳转用于把用户和抓取工具带到新地址,适合内容永久迁移;302 表示临时跳转,不适合长期替代。robots.txt 用于限制抓取范围,不能当作删除索引的工具。站点地图用于提交可发现地址,不保证收录,也不保证旧地址被移除。
如果旧地址已经返回 404,且没有合适的新地址,通常不需要强行跳转到首页。把大量死链统一跳转到首页,可能让用户和抓取工具难以判断对应关系。更稳妥的做法是:有高度对应的新页面时使用 301;没有对应页面时保留 404 或 410,并清理站内引用。
涉及 HTTPS 时也要单独核查。HTTPS 只表示传输层加密,不保证页面没有漏洞,也不保证排名。若死链出现在 HTTPS 版本,仍需按状态码、跳转和链接来源逐项检查,不能因为协议是 HTTPS 就跳过。
对每个死链样本,可以用下面清单逐项打勾:
判断优先级时,先修服务器状态码和跳转目标,再清理站内链接,最后观察抓取与索引变化。不同搜索引擎对跳转、robots.txt 和站点地图的支持与处理节奏需要分别核查,不能用同一个搜索引擎的表现直接推断另一个。
选一个已确认的死链,按上面的顺序完整走一遍,把每一步的请求地址、返回码、跳转目标和链接来源记在同一张表里。隔一段时间用相同方法复查,比较哪一层发生了变化。这样得到的依赖关系,比只看一个 404 页面更可靠。