很多站点把注意力都放在能打开的页面上,却很少检查打不开的页面。蜘蛛每天都会碰到失效地址,这时候服务器返回什么状态码、页面显示什么内容,会直接影响它对整个站点的判断。404 本身不是问题,问题是把 404 伪装成 200。
先分清三种情况
- 404:地址确实不存在,服务器明确返回 404,页面给出提示和可用的导航。
- 软 404:地址不存在或内容已删除,但服务器返回 200,页面主体是“暂无内容”“没有找到相关内容”之类。
- 410:明确告知该地址已永久移除,多用于确定不会再恢复的内容。
三者里最容易被忽略的是软 404。它看起来一切正常,用户能打开,状态码也是绿的,但蜘蛛拿到的是一张空壳页。数量一多,抓取预算就被这类页面分走,真正需要抓的地址反而排到了后面。
软 404 常见的几种来源
- 内容被下架,但详情页模板还留着,页面只剩标题和一段空白正文。
- 站内搜索没有结果时,仍然返回 200 的搜索结果页。
- 商品或文章下架后,统一跳到一个“已下架”的空页面。
- 分页参数超出范围,比如第 200 页返回 200,但列表里一条都没有。
- 前端渲染异常,HTML 里只剩一个空的容器节点。
这些情况的共同点是:地址还能访问,状态码还是 200,但页面本身没有实质内容。蜘蛛不会替你做质量判断,它只看状态码和返回的 HTML。
自查步骤
- 抽一批可疑地址,用 curl -I 或服务端工具查看真实状态码。浏览器显示的页面效果不能作为判断依据。
- 从服务器日志中筛出返回 200、但响应体体积极小的地址,重点看详情页和搜索页。
- 检查站内搜索结果页、筛选页、分页越界页是否对蜘蛛放开。这类页面如果没有结果,最好返回 404 或直接禁止抓取。
- 检查已删除内容的处理方式是否统一。有的跳首页,有的留空壳,有的返回 404,规则越乱越难排查。
- 定期对比已提交的地址和实际能返回内容的地址,把长期只有空壳的地址清理掉。
好的 404 页面要做四件事
- 返回正确的 404 状态码,而不是用 200 加一段提示文案。
- 说明发生了什么,语言简洁,不要让用户以为站点挂了。
- 提供导航:首页、栏目入口、站内搜索框都可以。
- 不要用 302 或 meta refresh 自动跳回首页。自动跳首页会让蜘蛛把原来那个失效地址也当成正常页,等于制造了新的软 404。
旧地址:重定向还是留 404
判断标准其实很简单:
- 有内容等价的新页面,就做 301,把权重和用户一起送过去。
- 没有替代页面,就让它老老实实返回 404 或 410。
- 只有极少数通用入口(比如首页)适合承接一批失效地址,其余全部跳首页没有意义。
还要注意重定向链。一次跳转能到位的,不要拆成两三层,链条越长,蜘蛛和用户到达目标页的成本越高。
两个容易踩的误区
误区一:把所有失效地址都跳首页
这样处理,表面上看不到 404 了,实际上每个失效地址都返回 200 加首页内容,重复度极高,比直接返回 404 更麻烦。
误区二:认为 404 数量多就是坏事
一次改版、一批内容下线,短期出现大量 404 很正常。真正需要关注的是长期、持续新增的软 404,以及日志里反复出现却始终没被清理的空壳地址。
404 是站点在正常说话。让失效地址返回失效状态,比让它们假装存在要健康得多。
这类自查不需要多复杂的工具,一张状态码列表、一段日志筛选、一次随机抽查,就能发现大部分问题。把它放进日常维护清单,比事后补救省力得多。