星图导航
首页 文章 排行榜 申请收录 友链申请 关于
首页 / 文章资讯 / 源码资源 / 网站错误页设计:404 和 500 该怎么写

网站错误页设计:404 和 500 该怎么写

星图导航配图

错误页是站点里最少人访问、但每次访问都很关键的页面。用户点进来看到一片空白或者一串英文报错,第一反应是“这站挂了”,然后关掉再也不回来。把错误页做好,成本很低,效果很直接:用户知道发生了什么、知道下一步去哪,就不会觉得站点坏了。

先分清 404 和 500

四零四是页面不存在,五零是服务器出错。两类的处理逻辑完全不同,别用同一个页面糊过去。

四零四通常是链接错了、内容删了、URL 改了。用户没有做错什么,所以要给方向:搜索框、分类入口、热门内容推荐。核心目标是让用户继续留在站内,别直接走。

五零是服务端出了问题,可能是数据库挂了、代码报错、资源打满了。用户同样没做错什么,但这时候站点本身可能不稳定,页面能做的有限。核心目标是让用户知道这是暂时的,并且告诉他什么时候再来。

还有一类是四零三,拒绝访问,通常是权限问题。这个页面不该告诉用户具体原因,只写“无权访问,如需帮助请联系管理员”就够。

404 页面该有什么

五个元素,不多不少。一是一句人话标题,写“这个页面找不到了”,别写“404 Not Found”。二是简短说明,一句话解释可能是链接过期或者地址输错。三是搜索框,让用户直接搜想要的内容。四是三到五个入口,首页、分类页、热门文章,别列一堆。五是返回上一页的按钮。

这几样加起来,用户有明确的下一步,不会卡在死胡同。别再堆一堆花哨的插画和动画,加载慢还分散注意力。

有个细节:四零四页面要返回真正的四零四状态码。有些程序为了“友好”,四零四页面返回两百,这叫软四零四,搜索引擎会把它当正常页面收录,结果站内出现大量重复的空页面,对排名是负分。检查方法很简单,用 curl 看响应头里的状态码是不是四零四。

500 页面千万别暴露细节

五零页面最常见的错误是把错误详情直接打到页面上:文件路径、数据库地址、SQL 语句、堆栈信息,全给用户看到了。这些信息对攻击者来说价值很高,能直接推出你的程序结构和漏洞位置。

正确的做法是页面上只写一句“服务暂时不可用,我们正在处理,请稍后重试”,加一个预计恢复时间(如果知道的话)。所有技术细节写进日志,只有管理员能看。

技术上要确保 display_errors 关闭。PHP 里 display_errors 设成 On,错误会直接输出到页面;生产环境必须设成 Off,同时 log_errors 设成 On,错误写进日志文件。这个是老生常谈,但每年还是有站点在这上面翻车。

状态码必须真

除了四零四不能软,五零也一样。真出错的时候要返回五百,不能返回两百加一句“出错了”。搜索引擎和监控工具都靠状态码判断,返回两百,监控就不会报警,你永远不知道站点在挂。

还有一种情况是超时。请求超时的时候,如果程序还能输出,应该返回五零三或者五零四,表示服务暂时不可用。返回两百会让上游缓存一个错误的响应。

检查方法:改完之后用 curl -I 看响应头,用在线工具测一下,确认状态码和页面内容对得上。

错误页也要能被搜到

这听起来矛盾,但有实际意义。用户搜“某某站 打不开”“某某页面 找不到”,如果错误页有明确的说明和联系方式,反而能留住人。做法是在错误页里写清楚站点名称、一句说明、客服或者反馈入口。

另外,错误页的 URL 要固定,比如 /404.html 和 /500.html,别每次错误都生成新地址。固定的地址方便配置,也方便统计。

要注意的是别让错误页被大量收录。在 robots.txt 里加一条 Disallow 指向错误页,或者给错误页加 noindex 标签,避免搜索引擎把错误页当成正常内容。

几个具体的实现细节

四零四页面别用重定向。有些程序把不存在的页面三零一跳回首页,看着用户不会卡住,实际上搜索引擎会把大量不存在的 URL 当成首页的重复内容,权重被稀释。正确做法是原地返回四零四,页面上给入口。

五零页面要能扛住高并发。站点出问题的时候流量往往还很大,错误页如果也要查数据库,会跟着一起挂。做法是把五零页面做成纯静态 HTML,不依赖任何动态资源,nginx 直接返回。数据库全挂的时候,用户还能看到一句人话。

错误页的手机适配别忘。出问题的时候用户多半用手机打开,看到一片错位更糟。用响应式布局,字号至少十六像素,按钮够大能点。加载速度也要控制,图片压缩,外部资源能去掉就去掉,最坏情况下第三方 CDN 也未必活着。

日志要接上

错误页做得再好,也只是给用户的缓冲。真正要解决的是错误本身。两件事必须做。

第一,所有五零错误都要记日志,包括时间、请求地址、用户 IP、错误原因。日志按天切分,保留三十天。第二,日志要有告警。错误量在十分钟内超过十次,立刻通知。没有告警的错误日志等于写给自己看。

第三,定期看错误日志。每周花十分钟翻一遍,看有没有反复出现的问题。同一个错误重复出现,说明根因没解决,光靠错误页挡着没用。

错误页是站点的最后一道服务。用户走到这里,说明前面已经出了状况。这时候多一句解释、多一个入口,就能把人留住。成本不到一小时,值得做。