404 not found 的意思是:服务器接收到了请求,但找不到客户端所请求的那个资源。它本身是一个明确的HTTP状态码,不是“服务器坏了”的同义词。判断它正常还是异常,关键看三件事:这个URL是否本来就应该存在、返回404的是不是真正的目标服务器、以及这个404有没有挡住用户或搜索引擎到达有效内容。
第一种是计划内的404:页面确实已经下线,且没有对应的替代内容,此时返回404是正确做法,比返回200再展示“内容不存在”更规范。第二种是计划外的404:页面仍在、链接写错、路径大小写不一致、参数被截断,或者服务器配置把本应存在的文件映射到了错误目录。前者属于正常结果,后者属于异常结果。
还有一种容易误判的情况:URL 被改版迁移,旧地址没有做跳转。这时返回404在技术上是诚实的,但对用户和搜索引擎来说是异常结果,因为有效内容其实还在,只是换了地址。
curl -I 目标URL,看响应首行是否为 404。如果返回的是 200 但页面显示“未找到”,说明是软404,属于异常配置,应改回真正的404状态码。可以按下面三条快速判断。第一,资源是否真的不存在:真不存在且无替代,404正常;资源仍存在,404异常。第二,是否影响用户完成任务:用户能通过站内导航或搜索找到目标内容,影响有限;用户被彻底堵死,属于异常。第三,是否影响搜索引擎发现有效内容:有效页面因错误内链返回404,会浪费抓取,属于异常;已下线页面返回404,是正常的清理结果。
需要区分的是,404 与 410 都表示资源不可用,410 更明确地表示已永久删除。两者都不保证搜索引擎多快移除索引,实际处理速度取决于各搜索引擎自己的判断,需要分别核查。
假设某站点把 /guide/seo-basics 改版为 /guide/search-basics,旧地址未做跳转。用户访问旧地址得到404,内容其实还在新地址。按上面的清单:状态码是404,历史记录可查到,存在可替代页面,内链仍指向旧地址。结论是异常结果,处理方式是给旧地址加 301 跳转到新地址,并更新站内链接。反过来,如果某活动页面已永久结束且无替代内容,返回404并保留,就是正常结果。
下一步:挑出你站点最近一周出现次数最多的前十个404路径,逐个套用上面的六项清单,先区分“该保留的404”和“该跳转的404”,再动手修改。