为什么 404 值得单独做一次自查
蜘蛛每天来站点,不只是看新内容,也在确认旧链接是否还活着。如果一批链接返回 404,蜘蛛会逐渐降低对这些路径的访问频率;如果本该 404 的页面返回 200,蜘蛛会把空页面或错误页面当成正常内容收进去,浪费抓取预算,也可能影响站点质量判断。
404 本身不是错误,它只是一个状态码。真正的问题在于:该返回 404 的时候没有返回,不该返回 404 的时候却返回了。
真 404、软 404 和假 404
真 404
页面确实不存在,服务器返回 HTTP 404 状态码,页面内容给出清晰的“页面不存在”提示,并引导用户回到首页或相关栏目。这是最正常的处理方式。
软 404
页面内容已经没了,但服务器仍然返回 200,或者页面虽然显示“未找到”,状态码却是 200。蜘蛛会认为这是一个正常页面,可能反复抓取,甚至把它当成低质量内容。
假 404
页面其实存在,内容也有,但因为权限、参数、大小写、尾部斜杠等问题返回了 404。用户点进来看到错误页,蜘蛛也会放弃这条 URL。
自查时重点看这几个位置
- 已删除的内容页:是否返回 404,还是仍然返回 200 的空壳页。
- 栏目页与列表页:当栏目下没有内容时,是返回 404、返回 200 的空列表,还是保留并显示提示。
- 商品或文章下架页:是否用 404、410 或 301 到新页面,状态码和跳转目标是否一致。
- 站内搜索无结果页:是否返回 200 并生成可索引的空白页。
- 分页超出范围:例如第 100 页没有内容,是否仍然返回 200。
- 参数错误页:错误参数导致页面为空时,返回什么状态码。
软 404 常见的几种来源
很多软 404 不是故意做出来的,而是模板或程序默认行为。例如:
- 内容被删除后,系统仍然渲染详情页模板,只是正文区域为空。
- 分类为空时,列表页照样输出,标题和描述还是原来的栏目文案。
- 搜索无结果时,页面只显示“没有找到”,但 HTTP 状态码是 200。
- 前端路由接管后,所有路径都由同一个入口返回 200,服务端不再区分。
- 缓存把旧的 200 响应继续发给蜘蛛,即使后台内容已经删除。
这些情况单看页面可能不容易发现,需要结合服务器响应和日志一起判断。
处理 404 的基本顺序
先确认页面是否真的应该消失。如果内容只是换了地址,优先做 301 到最相关的新页面,而不是直接 404。如果内容确实不再提供,再返回 404 或 410。
对于软 404,需要让服务端在内容不存在时返回正确的状态码。如果站点有前端路由,至少要保证首屏返回可识别的状态,或者通过预渲染、服务端渲染把状态码传出去。
404 页面本身也要有用:说明页面不存在,给出返回首页、查看相关栏目或搜索的入口。不要自动跳转,也不要把 404 页面做成一个内容丰富的专题页,那会让蜘蛛和用户都困惑。
404 页面不是流量入口,它的任务是清楚地告诉用户和蜘蛛:这个地址没有内容。
用日志和抓取工具做一次验证
自查不能只看浏览器。可以用命令行或抓取工具请求一批典型 URL,记录返回的状态码。重点抽查:已删除内容、空栏目、无结果搜索页、超出范围的分页、带错误参数的详情页。
再看服务器日志里蜘蛛的访问记录。如果某些已经不存在的 URL 持续被大量抓取,并且返回 200,就说明软 404 还在消耗抓取资源。如果这些 URL 返回 404,但站内仍然有大量入口链接指向它们,则需要清理内链或更新链接目标。
小结
404 与软 404 自查,核心是让状态码和页面真实状态保持一致。该 404 的就返回 404,该 301 的做 301,该保留的不要误伤。把这件事理顺,蜘蛛才不用在空页面上反复确认,抓取预算也能用在真正有内容的地方。