上网的时候大家基本都见过404 not found提示,页面上通常写页面不存在。直白解释就是,服务器收到浏览器请求,但是找不到你请求的资源。
它和网站无法访问不是一回事。服务器完全没有响应,浏览器提示无法连接或者超时。返回404代表服务器正常工作,读懂请求,只是在文件目录或者数据库检索不到对应页面,返回这个状态码告知浏览器地址不存在。
产生404的原因,站在访问者和站长两个角度看,差别很大。
普通用户遇到404,最常见原因就是URL拼写错误。.com错写成.co,或是路径少写斜杠。还有链接本身没问题,但目标页面已经删除。网站改版、文章下架、商品过期,旧地址失效。收藏夹里保存的老链接很容易出现这个问题,保存的时候页面正常,隔一段时间内容删除。还有容易忽略大小写问题,Linux服务器区分文件名大小写,文件名为About.html,访问地址填about.html会返回404;Windows服务器默认不区分大小写,同一个链接在两套服务器环境表现不一样。

站在建站者、站长角度,诱因更多。伪静态规则写错是高频情况,想用/article/123这种美化URL,rewrite规则映射到不存在路径。网站程序升级,路由配置改动,旧URL结构没有配置重定向,大量历史链接批量404。网站迁移新服务器,文件传输不全,或者目录权限配置错误,服务器无法读取文件,返回404而非403。部分程序数据库连接失败,页面也会跳转到404页面,问题根源在数据库,并不是页面文件丢失。
普通用户碰到404能操作的不多。先核对地址栏URL,检查域名后面路径有没有拼写错误。确认地址无误,可以退回网站首页,依靠站内搜索或者导航菜单查找目标内容。不少网站404页面内置搜索框、推荐文章,就是为了留住访客。如果是别人分享的链接点进去404,大概率对方链接失效,可以联系对方确认有效地址。
站长排查404思路不一样。优先查看服务器日志,定位触发404的URL,统计访问频次。零星的404记录不用处理,搜索引擎爬虫、网络扫描工具会批量访问不存在地址,产生大量这类日志。但曾经有流量的页面突然大量404,就要检查配置是否改动。
找到根源之后,有几种修复手段。页面已经永久删除,没有替代内容,可以设置301永久重定向,旧地址指向相关新页面,或者首页。搜索引擎会把旧页面权重转移至新地址,相比直接返回404对SEO更友好。网站改版大批量URL变更,可以配置通配符重定向,批量映射旧路径到新路径。
自定义404页面也是常用手段。服务器默认404页面简陋,用户看到提示大多直接关闭。制作带有导航、搜索框、返回首页按钮的404页面,减少用户流失。WordPress以及绝大多数CMS都支持在主题自定义404模板;Nginx、Apache也可以指定HTML文件作为错误页面。
还有一个容易忽略的概念软404。部分网站页面状态码返回404,但页面内容正常,搜索引擎会收录这个无效页面。反过来硬404伪装成200状态码,页面展示错误提示,但HTTP状态码返回200,搜索引擎判定页面正常,用户访问却报错。两种情况都会干扰SEO,排查不能只看页面展示内容,要用工具查看真实HTTP状态码。
404本身不是故障,属于HTTP协议标准状态码,含义就是资源未找到。网站运营过程不可能完全杜绝404,搜索引擎也理解。真正需要规避的,是原本可以正常访问的页面变成404,以及用户遇到404之后没有任何继续浏览的入口。