站点运营

站点运营:404 与错误状态码自查,把走错的访客和蜘蛛接回来

错误页常被当成小事,但它决定了访客撞上死链后是继续逛还是直接离开。这篇文章梳理 404、410、5xx 等状态码的正确用法,说明软 404 和兜底跳首页为什么容易出问题,并给出一份可以直接照着做的错误页自查清单。

站点运营

站点运营:404 与错误状态码自查,把走错的访客和蜘蛛接回来

站点跑久了,多多少少会出现打不开的地址:文章下线了、栏目合并了、外部链接写错了。这些地址对应的页面往往没人管,但访客和搜索蜘蛛都会撞上。错误页做得好不好,直接影响两件事:访客是继续逛还是直接关掉,蜘蛛是把抓取预算浪费在死路上还是尽快转向别处。

先把几种打不开的情况分清楚

很多人把所有打不开的情况统称为 404,实际上服务器返回的状态码含义差别很大,用错了会误导访客,也会误导搜索引擎。

  • 404:地址对应的资源不存在。适合内容已删、但不确定以后是否恢复的情况。
  • 410:资源被永久删除,不会再回来。相比 404,它表达得更明确,蜘蛛处理起来也更干脆。
  • 301 / 302:地址变了,属于跳转而不是错误。只在确实有新地址时使用。
  • 403:资源存在但没有访问权限。用 404 伪装权限不足是另一种做法,但别把两者混着用。
  • 500 / 502 / 503:服务端出了问题。503 可以配合 Retry-After 告诉蜘蛛稍后再来。

状态码用错,麻烦在哪

最常见的两个坑是软 404 和兜底跳首页。

软 404 指页面实际返回 200,但内容写的是内容不存在。访客看不出来,蜘蛛却会把它当成正常页面收下一份空壳。数量多了,站点里就积压一批没有价值的页面。

兜底跳首页则是把所有错误地址都 301 到首页。短期看访客没有停在错误页,但预期落空,蜘蛛也可能把大量不相关的地址当成同一个页面来处理。错误的地址并没有真的变正确,只是被盖住了。

判断标准其实很简单:地址真的换了,用 301;内容真的没了,用 404 或 410;服务挂了,用 5xx。别把 301 当万金油。

404 页面本身该放什么

状态码对了,页面内容也别是一片空白。一个能用的 404 页至少包含几样东西。

  • 一句清楚的说明,告诉访客这个地址没有内容,而不是只写系统错误。
  • 返回首页和主要栏目的链接,最好带上一级栏目列表。
  • 站内搜索入口。访客愿意留下来自己找,就还有机会。
  • 和全站一致的导航与页脚,别让错误页变成孤岛。
  • 移动端可读,不要做成只有一行小字加一张大图的展示页。

另外,别让 404 页面自动跳转。跳转会让访客来不及看清楚发生了什么,也会让状态码的意义变得混乱。

顺手排查几个细节

URL 大小写不一致、结尾斜杠时有时无,也会制造一批本不该存在的 404。Linux 服务器上 /About 和 /about 是两个地址,站内链接如果写法不统一,蜘蛛就会顺着两种写法各抓一遍。

服务器日志里的 404 记录其实是很好的参考。如果某个旧地址持续被访问,说明还有外部链接或用户书签指向它,值得考虑做一次 301 到新地址,而不是放任它一直 404。

一次完整的自查怎么做

  1. 随便敲一个明显不存在的地址,用浏览器开发者工具或 curl 看返回的状态码是不是 404。
  2. 找一个已下线内容的地址,确认它没有返回 200。
  3. 把站内几个主要入口页面的链接点一遍,看看有没有拼写或大小写导致的死链。
  4. 翻一下最近的服务器日志,把 404 出现次数靠前的地址列出来,逐个判断该重定向还是保持 404。
  5. 确认服务端错误返回的是 5xx 而不是 200,避免故障被伪装成正常页面。
  6. 在手机上打开一个 404 页面,检查导航和搜索框能不能正常使用。

这些事情一次做完大概一小时,之后每季度过一遍就够。错误页处理得好不会带来额外流量,但能少丢一点本来就不多的访客,也能让蜘蛛少在死路上绕圈。