站点跑一段时间后,总会出现一些打不开的地址:文章删了、栏目改了、URL 调整过,或者别处引用时写错了。这些地址如果放着不管,用户点到会卡住,蜘蛛爬到也会浪费一次抓取。死链自查的目的不是把 404 全部消灭,而是让每个无效地址都有明确、合理的出口。
先分清几种“打不开”的情况
同样显示“页面不存在”,背后的状态码可能完全不同,处理方式也不一样。
- 404:服务器明确告诉访问者这个地址不存在,是正常且必要的响应。
- 软 404:页面内容写着“找不到”,但服务器返回的是 200,等于把一个空页面当成正常页交出去,容易造成重复和抓取浪费。
- 410:表示内容已被永久移除,比 404 更明确,适合确定不再提供的页面。
- 301/302:地址发生了迁移,需要跳到新位置。跳转链越长,中间损耗越大。
- 403、5xx:这类不是死链,而是权限或服务器问题,应该单独排查。
死链一般从哪里来
- 内容下线后没有处理原地址;
- 改版或目录调整时,旧 URL 没有做对应跳转;
- 站内链接、导航、正文引用里写错了地址,或大小写不一致;
- 程序生成的列表、标签、参数组合页被删除;
- 外部网站、旧邮件、旧二维码里留下的历史链接。
怎么把死链找出来
单靠一种方式容易漏,建议两条线一起走。
- 看服务器访问日志,筛选出返回 404、410 的请求,按路径和出现次数排序,出现频繁的优先处理。
- 用爬虫工具对站内做一次完整抓取,检查内部链接指向的地址是否都能正常打开,顺带发现跳转链和软 404。
- 把两份结果合起来去重,形成一张待处理清单,标出每个地址的来源:站内链接、外链,还是历史遗留。
日志反映的是真实访问,站内抓取覆盖的是结构问题,两者互补,能减少漏网的情况。
处理原则:一个地址一个决定
最省事的做法是全部跳首页,但这其实会制造大量软 404,对用户也没有帮助。更稳妥的是逐类判断。
- 有主题更接近的替代页:做 301,指向最相关的那一篇,而不是站首页。
- 内容确实不再提供:返回 404 或 410,让它安静地留在那里。
- 只是链接写错:直接改链接,不需要加跳转。
- 大小写、结尾斜杠等变体:统一成一种规范写法,其余做规范化处理。
- 来自外部的死链:影响有限,可以不管,也可以联系对方更新。
另外注意跳转不要串成链条,A 跳 B、B 再跳 C,最好一步到位,减少中间环节。
404 页面本身也要交代清楚
- 状态码必须是 404,不要用 200 伪装;
- 页面给出简短说明,告诉用户这个地址已经失效;
- 提供返回首页、站内搜索或几个常用栏目的入口;
- 不要设置自动跳转,也不要把整站导航都堆上去;
- 样式与站点保持一致,避免用户以为是网站出了故障。
定期复查比一次性清理更重要
内容会持续更新,链接也会不断变化,死链是持续产生的。可以把它放进日常运维清单:每月看一次日志里的 404 记录,每次改版或批量删内容后做一次站内抓取,新内容发布时顺手检查引用的链接是否有效。
死链治理的目标不是零 404,而是让每一个失效地址都有合理的去向,用户不迷路,蜘蛛不空跑。
自查清单
- 服务器是否对不存在的地址返回真实 404,而不是 200;
- 是否存在显示“找不到”却返回 200 的软 404 页面;
- 高频 404 地址是否已经处理或做出判断;
- 跳转是否指向相关页面,是否出现多级跳转链;
- 站内链接、导航、正文引用是否还有明显写错的地址;
- 404 页面是否提供返回入口,且没有自动跳转;
- 是否养成定期查看日志、改版后复查的习惯。