404 和错误页:把走错路的人接住

错误页是唯一一类所有人都不希望看到、却一定会被看到的页面。本文说明状态码必须正确的原因、404 页该放什么,以及服务器错误时的处理。

要点速览
  • 软 404 最隐蔽:页面写着内容不存在,状态码却返回 200,搜索引擎会把它当正常内容收录。
  • 状态码是给程序看的事实陈述,不应为了体验好看而统一返回 200。
  • 404 页不要自动跳首页,用户无法判断原地址到底有没有内容。
  • 5xx 页面不能显示堆栈与路径等技术细节,应给出可对应日志的错误标识码。
  • 404 要按来源统计,外部来源集中在同一地址通常是改版漏做跳转。

错误页通常是项目里最后考虑、也最容易被敷衍的部分。但它承接的是已经出了问题的访问 —— 链接失效、地址打错、页面下线 —— 这些人本来是要找东西的,处理得好还能留住,处理不好就直接走了。

状态码必须正确

最常见也最隐蔽的错误是「软 404」:页面显示「内容不存在」,但服务器返回的状态码是 200。对用户没区别,对程序完全不同 —— 搜索引擎会把这个「内容不存在」的页面当作正常内容收录,监控系统也不会报警。

正确做法是:内容不存在返回 404,永久删除且不会回来的返回 410,服务端故障返回 5xx。状态码是给程序看的事实陈述,不应该为了「体验好看」而统一返回 200。

404 页该放什么

  • 一句说明:这个地址没有内容,而不是只放一个大大的数字;
  • 回到主要入口的链接:首页、产品、联系方式,让人能继续;
  • 站内搜索框,如果站点有搜索功能;
  • 不要自动跳转到首页。用户会以为自己点错了,而且无法知道原来的地址到底有没有内容。

服务端错误要区别对待

5xx 表示是我们这边的问题。这类页面上不该让用户做无意义的重试,更不该显示技术细节 —— 堆栈信息、数据库报错、文件路径,这些对攻击者是有用信息,对用户没有任何帮助。

合理的内容是:告知服务暂时不可用、给出一个联系方式或状态说明、以及一个错误标识码。标识码让用户反馈时能对应到具体日志,这比让他们描述「打不开」有用得多。

监控比页面本身更重要

404 要按来源统计。大量来自站内链接的 404,说明有内链写错或内容被删;大量来自外部的同一地址 404,说明有外链指过来但页面没了,这是改版漏做跳转的典型信号,值得补一条映射。

5xx 则应当直接告警。它不是用户的问题,等客户打电话来说打不开,已经晚了。相关的上线检查项见合作流程与企业官网定制。

常见问题

404 页面需要返回什么状态码?

必须返回 404;内容已永久删除且不会恢复的可返回 410。显示「内容不存在」却返回 200 属于软 404,搜索引擎会把它当作正常页面收录,监控也不会报警,这是最隐蔽的一类问题。

404 页面可以自动跳转到首页吗?

不建议。用户会以为是自己点错了,也无法判断原地址到底有没有内容。更好的做法是说明该地址没有内容,并提供首页、产品页、联系方式等入口和站内搜索,让访客自己选择下一步。

出现 500 错误时页面该显示什么?

告知服务暂时不可用、提供联系方式,以及一个可对应到具体日志的错误标识码。不要显示堆栈信息、数据库报错或文件路径——这些对用户没有帮助,对攻击者却是有用信息。同时 5xx 应当直接触发告警。

参考资料

  1. RFC 9110: HTTP Semantics · IETF
  2. SEO Starter Guide: The Basics · Google Search Central
# 404# 错误处理# 用户体验# 运维
免费咨询

聊聊你的项目

留下联系方式,我们一个工作日内联系你。先沟通需求和现状,再给方案;报价当面沟通。

  • 一个工作日内回复
  • 需求沟通免费,不强推方案
  • 交付管理后台与文档,可自行维护
仅用于本次咨询联系,不会用于其他用途。