做站点运营时间长了,服务器日志里总能看到一批 404。它们有的来自内部链接写错,有的来自外部站点引用,有的是用户手输或爬虫探测。404 本身不是错误,它是 HTTP 协议里正常的回应。真正需要关注的,是数量、来源和是否该继续留在那里。
先分清硬 404 和软 404
硬 404 指服务器确实返回了 404 状态码,页面不存在。软 404 则是地址能打开、返回 200 状态码,但页面内容其实是“没有找到”“该内容已下架”,或者只剩标题和页脚的空壳。软 404 对搜索引擎不友好:它让抓取工具以为这是一个正常页面,于是继续抓取、继续收录,最后用户点进来看到的是空内容。
常见的软 404 表现
- 返回 200,但正文只有一句“内容不存在”,模板其他部分照常渲染。
- 栏目分类下商品或文章全部下架,页面还在,只剩导航和页脚。
- 站内搜索无结果页,每个关键词都生成一个可访问地址。
- 标签页、聚合页里没有任何条目,标题却照常输出。
- 分页超出实际页数,第 99 页依然返回 200。
用日志把来源摸清楚
不要凭感觉改,先拉数据。多数服务器或 CDN 都能导出访问日志,按状态码筛出 404,再按 URL 聚合统计次数。
- 统计 TOP 404 地址:按访问次数排序,先看前 50 到 100 条,它们通常占了大部分请求。
- 区分来源:看 referer 或请求特征,判断是内部链接、外链、用户手输,还是爬虫在扫描常见路径。
- 抽样验证真实状态码:用命令行带 -I 参数看响应头,确认是 404、410 还是被软处理成了 200。
- 检查软 404 特征:正文长度异常短、标题含固定话术、模板区块缺失、页面结构高度雷同。
- 按类型分组:把同一批地址归类,先处理影响面大的组,而不是逐个手动改。
按“有没有替代内容”决定处理方式
- 有明确替代页:做 301 跳转到最相关的新地址,而不是一律跳到首页。跳到首页会让用户和蜘蛛都得不到有效信息,也容易被视为不相关跳转。
- 完全无替代:保留 404,或用 410 明确告知已永久移除,让抓取工具尽快停止请求。
- 内部链接写错:直接去模板或正文里改掉源链接,光做跳转只是把错误藏起来。
- 参数或搜索地址:这类通常是程序生成的,靠跳转治不干净,更适合在 robots 里屏蔽参数,或让无结果页返回 404。
- 被外部引用的老地址:改不了别人的链接,就自己做一个稳定的跳转目标。
自定义 404 页的几个基本要求
- 状态码必须是 404,不要为了页面好看改成 200。
- 提供站内搜索框和几个主要栏目入口,帮用户继续找路。
- 不要做几秒后自动跳首页,跳转会让用户来不及看清提示,也可能被判定为可疑行为。
- 不要把全站链接都堆上去,几十上百个链接既没用,也稀释了页面本身的价值。
- 文案简洁说明“页面可能已删除或地址有误”,别写一大段道歉。
404 不是要清零的指标。一个上万页的站点,长期保持少量 404 很正常;需要警惕的是短期内 404 数量激增,或者大量软 404 长期返回 200。
把巡检变成固定动作
建议每月看一次 404 汇总,改版、下架、迁移这类操作之后单独再跑一次。把常见类型和处理规则记在团队文档里,新同事遇到同类问题就不用重新判断一遍。处理完记得回头验证:跳转是不是单层、目标页是不是 200、软 404 有没有真的改成 404。做完这三点,失效地址才算真正理清楚了。