站点里出现失效地址是常态。内容下线、栏目调整、URL 改写,都会留下断开的路。真正麻烦的往往不是 404 本身,而是它被错误地表达出来:该返回 404 的页面返回了 200,或者所有失效地址统统跳去首页。前者让搜索引擎把空页面当成正文,后者用一次跳转掩盖了一大片失效链接。
先把三种情况分开
- 正常 404:服务器确实返回 404 状态码,页面给出清晰提示和可走的出口。这是健康状态,不需要修。
- 软 404:状态码是 200,页面内容却是“内容不存在”“该内容已删除”。搜索引擎会把它当作正常页面抓取,甚至尝试索引。
- 错误跳转:失效地址被 301 或 302 到首页,用户和蜘蛛都落到一个与预期无关的页面。问题被藏起来,但链接依旧失效。
三种情况的处理方式完全不同,所以第一步不是急着删链接,而是先确认你面对的是哪一种。
自查可以从三个方向入手
1. 抓取日志里筛“状态码 200、内容很薄”的地址
把日志按状态码分组,挑出返回 200 但响应体很小的 URL,再抽样打开看看。如果这些页面统一在说“没有找到内容”,那就是典型的软 404。这类地址数量往往不小,因为它们不会报错,只会在后台安静地累积。
2. 用命令行确认状态码
不要只看浏览器里的页面长相,直接请求一次更可靠。在终端执行 curl -I 加上完整地址,看响应第一行的状态码。只返回 200 却在正文里写“页面不存在”的,就是软 404;返回 302 并指向首页的,就是错误跳转。如果站点地图或后台里存着历史地址清单,可以写个小脚本批量请求,输出状态码与最终跳转地址,比人工点开快得多。
3. 检查内链里的死链
外链失效你控制不了,站内自己链出去的地址失效则完全可以避免。重点看栏目页的推荐位、旧文章正文里的引用、页脚和侧边栏的固定链接。这些位置改版时最容易漏,而它们往往出现在全站的每一页上,一次失效就是成倍的无效请求。
404 页面本身怎么写
一个合格的 404 页面并不需要花哨,但要做对几件事:
- 服务器返回正确的 404 状态码,页面再好看也不能用 200 兜底。
- 用一句人话说明地址可能已失效,不要只显示一个错误编号。
- 给出出口:返回首页、进入主要栏目、使用站内搜索,三者至少留两个。
- 可以顺带推荐几篇热门内容,但不要塞成广告位,让人以为进错了站。
- 不要设置几秒后自动跳转,自动跳转会打断用户,也让状态码变得没有意义。
判断标准很简单:如果这个页面返回 200,用户和搜索引擎都会期待里面有内容。你写的是“没有内容”,那就不该用 200。
旧地址怎么处理,看它还有没有价值
- 内容迁移了:用 301 指向最相关的新地址,只跳一层,不要串成链条。
- 内容彻底没了,但仍有外链和搜索流量:考虑做个简短说明页,指向同类内容,而不是直接消失。
- 内容没了也没人访问:让它正常返回 404,必要时用 410 表明已永久移除。
- 整站栏目合并:按栏目批量做映射,别用一个总跳转把所有旧地址都导向首页。
把失效地址集中导到首页,短期看着“没有 404 了”,实际上是把问题转嫁给首页,让搜索引擎反复抓取一个不相关的页面。这种做法既不解决用户需求,也不节省资源。
一份可以照着走的检查清单
- 从日志中导出近一个月的 404、410 状态地址,按路径前缀归类。
- 抽取其中返回 200 的可疑地址,确认是否为软 404。
- 检查内链、页脚、推荐位里是否还挂着已失效地址。
- 核对跳转规则,确认没有把大批旧地址统一导向首页。
- 确认 404 页面返回正确状态码,并且提供了可用出口。
- 把本轮处理过的映射关系记录下来,方便下次改版时复用。
做完这轮自查,你未必会看到立刻的变化,但站点里那些被反复请求却什么也给不出的地址会明显减少。抓取资源有限,把它留给真正有内容的页面,本身就是运营的一部分。