遇到404 not found,最容易被误解成“页面被删了,必须马上重定向到首页”。这个判断并不总是成立。404表示服务器明确告诉客户端:请求的这个资源当前不存在。它可能来自链接写错、文件被移动、路由未匹配、大小写不一致,也可能来自旧页面确实已下线。把所有这些情况都当成“重定向到首页”处理,会把无效请求变成软404,让用户和搜索引擎都拿到不相关的内容,反而增加排查难度。
301适合“这个资源已经永久搬到另一个等价地址”的情况。如果旧文章已经合并到新文章,且内容主题一致,可以301到新文章;如果只是站内某个链接拼错,应修正链接本身,而不是加一条全局重定向。把不存在的页面统一301到首页,用户点进来发现不是自己要的内容,会立即返回;搜索引擎也可能把大量无关URL当成首页的重复入口,稀释首页本来的主题信号。
判断条件可以按下面顺序执行:
有些项目会做一个好看的“页面不存在”模板,但服务器返回的HTTP状态码仍是200。用户看到的是错误提示,搜索引擎收到的却是“这个地址有正常内容”。这属于软404,会让无效URL进入索引候选,也可能让后续排查误以为页面正常。正确做法是让不存在的地址返回404或410状态码,同时展示对用户有帮助的提示和返回导航。
检查时不要只看页面外观。可以用命令行查看响应头,例如:
curl -I https://example.com/不存在的路径
重点看第一行状态码。如果显示HTTP/1.1 200 OK,而页面内容是“未找到”,就需要让后端或CDN规则返回404。若显示404或410,再检查页面是否有清晰导航和搜索入口。
robots.txt用于限制抓取,不是移除索引的可靠手段。一个URL如果已经被搜索引擎收录,后来变成404,用robots.txt禁止抓取,反而可能让搜索引擎无法看到404状态,继续保留旧索引。正确顺序是:先让该URL返回404或410,再根据情况使用搜索引擎提供的移除工具或等待重新抓取。站点地图也不保证收录,它只是提交URL供抓取参考,不能替代状态码处理。
如果页面只是暂时不可用,比如维护中,应返回503而不是404。503表示暂时无法处理,404表示资源不存在。两者混用会让搜索引擎误判页面已删除。
HTTPS只解决传输加密,CDN主要做缓存和分发,它们都不会自动判断某个URL应该对应哪个页面。如果源站路由没配好,CDN回源后拿到的仍然是404。排查时可以先绕过CDN直接请求源站,确认源站是否返回404;如果源站正常而CDN返回404,再检查CDN的缓存规则、回源路径和重写规则。
常见检查项包括:
处理404 not found时,先确认三件事:请求的URL是什么、服务器实际返回什么状态码、这个URL是否曾经有等价内容。只有第三件事为“是”,才考虑301;否则优先修正链接、保留404或返回410。完成修改后,用curl -I或浏览器开发者工具的Network面板复查状态码,再从站内搜索和导航走一遍,确认用户能到达正确页面。下一步可以挑一个真实404 URL,记录它的来源、状态码和预期处理方式,再决定是改链接、加单条重定向,还是保留错误状态。