站点跑久了,多多少少会出现打不开的地址:文章下线了、栏目合并了、外部链接写错了。这些地址对应的页面往往没人管,但访客和搜索蜘蛛都会撞上。错误页做得好不好,直接影响两件事:访客是继续逛还是直接关掉,蜘蛛是把抓取预算浪费在死路上还是尽快转向别处。
先把几种打不开的情况分清楚
很多人把所有打不开的情况统称为 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。
一次完整的自查怎么做
- 随便敲一个明显不存在的地址,用浏览器开发者工具或 curl 看返回的状态码是不是 404。
- 找一个已下线内容的地址,确认它没有返回 200。
- 把站内几个主要入口页面的链接点一遍,看看有没有拼写或大小写导致的死链。
- 翻一下最近的服务器日志,把 404 出现次数靠前的地址列出来,逐个判断该重定向还是保持 404。
- 确认服务端错误返回的是 5xx 而不是 200,避免故障被伪装成正常页面。
- 在手机上打开一个 404 页面,检查导航和搜索框能不能正常使用。
这些事情一次做完大概一小时,之后每季度过一遍就够。错误页处理得好不会带来额外流量,但能少丢一点本来就不多的访客,也能让蜘蛛少在死路上绕圈。