访客点进一个不存在的地址,看到的是服务器默认的错误页:一行小字、一段英文、没有导航也没有搜索框。多数人不会去研究这是谁的锅,只会按返回键,或者干脆关掉。对站点运营来说,404 页面是少数几个“注定会被看到”的页面之一,值得当成正式页面来对待。
先把几种“找不到”分清楚
同样是打不开,背后的状态码含义并不一样,处理方式也不同。
- 404:资源不存在,是正常且必要的返回。该给 404 的时候不要犹豫。
- 410:内容曾经存在、已被永久删除。语义比 404 更明确,但只适合确实不会再恢复的地址,不要当成通用兜底。
- 软 404:地址能打开,状态码是 200,页面内容却写着“该内容不存在”。这类页面最容易被当成正常页面处理,也最容易堆积成垃圾入口。
- 5xx:服务器错误,属于故障范畴。别用错误页把 5xx 包装成 404,那只会把问题藏起来。
自定义 404 页面该放什么
一个好的错误页不是设计比赛,它的任务只有一个:让访客在十秒内找到下一个可点的东西。
- 一句说明,告诉访客地址失效了,而不是站点坏了;
- 站内搜索框;
- 返回首页或对应栏目的入口;
- 三到五个当前值得看的内容链接;
- 联系方式,方便访客反馈坏链。
需要特别注意:好看的错误页不会自动带上正确的状态码。上线后请用命令行或浏览器开发者工具确认,失效地址返回的是 404,而不是 200。
从访问日志里挖出高频死链
错误页是被动承接,日志才是主动排查的入口。定期把访问日志里状态码为 404 的记录筛出来,按路径出现次数排序,优先处理那些被反复请求的地址。再看一眼来源页(referer),就能知道访客是从哪个页面点过去的——那通常就是站内死链的所在位置。
如果站点有对外投放或长期外链,某些老地址的 404 请求会持续出现,说明外部还在往这里导流,这类地址更值得做一次跳转。
死链通常从哪来
- 栏目改名或下线,但没有配置跳转;
- URL 大小写不一致,服务器又区分大小写;
- 带尾斜杠和不带尾斜杠被当成两个地址,其中一个并不存在;
- 图片、附件、下载包被清理,引用它们的页面还在;
- 正文里手写的老链接,页面改版后没有同步更新。
几个容易踩的坑
第一类是单页应用的路由回退:所有未知路径都被前端路由接住并返回 200,结果等于批量制造软 404。这时需要在服务端区分:已知路由正常返回,未知路径明确给出 404。
第二类是错误页本身被当成内容。自定义 404 页面同样会被抓取,如果不希望它出现在结果里,可以在该页加上 noindex,同时保证状态码正确。
第三类是自动跳转。错误页上放倒计时跳转首页,会让访客来不及看清发生了什么,也让状态码的意义变得混乱,不如给一个明确的按钮。
一份可执行的自查清单
- 随便输入一个不存在的地址,确认返回 404 而不是 200 或 302;
- 确认错误页里有搜索框和至少两个可点入口;
- 检查错误页在移动端的显示效果;
- 导出近一周日志中的 404 记录,按次数排序;
- 对排名靠前的死链逐条判断:该跳转的做 301,该保留 404 的保持不动;
- 检查站内导航、页脚、正文里的链接是否有指向失效地址的;
- 确认错误页没有被 robots.txt 误封,也没有被路由回退吞掉;
- 把“新增 404 数量”纳入日常监控,出现突增时回查最近的改版操作。
404 不是失败,而是一次重新引导访客的机会。真正伤人的不是地址失效,而是访客撞上一堵什么都没有的白墙,连下一步该点哪里都不知道。