不少站点在商品下架、库存清零、搜索结果为空、参数页无匹配内容时,页面依然返回 200。用户看到的是「暂无相关内容」,蜘蛛看到的是一个正常的 HTML 文档。这类页面就是通常说的软 404。它不会像 404 那样被明确标记为无效,反而会持续占用抓取预算,反复进入抓取队列。
软 404 为什么会被反复抓取
蜘蛛判断一个 URL 是否还有价值,主要看状态码、页面主体内容、内链指向以及历史上的抓取反馈。当页面返回 200,同时又存在于 Sitemap 或站内链接中,抓取调度就会把它当作正常页面安排回访。回访后如果仍然只是空壳,预算就被消耗在一次没有产出的请求上。
更麻烦的是,这类 URL 往往不是一两个,而是成批出现:筛选参数组合、已下架商品、已过期的活动页,动辄成千上万条。抓取预算被摊薄之后,新页面和真正需要更新的页面,回访间隔会被明显拉长。
常见的软 404 形态
- 商品或文章已删除,页头页脚完整,正文位置显示「内容不存在」。
- 搜索、筛选、排序结果为空,模板照常渲染。
- 活动已结束,页面仅保留标题和倒计时残留。
- 参数拼错或参数被忽略,返回一个默认列表页。
- 前端拿不到数据,只在首屏留下骨架屏结构。
核对顺序
- 先从抓取日志里筛出回访频繁、但响应体积明显偏小的 URL 段。
- 用同一 User-Agent 请求这些 URL,确认返回状态码是否为 200。
- 对比正常页面的正文文本长度,判断是否落在空壳区间。
- 检查这些 URL 是否仍出现在 Sitemap、内链模块、分页或标签聚合页中。
- 确认页面对应数据是永久删除、临时下架,还是参数错误导致。
状态码只是结果,真正要回答的问题是:这个 URL 以后还有没有内容可看。没有内容就该给出明确信号,而不是让它继续被当成正常页面。
按情况给出不同处理
- 内容永久删除、无替代页面:返回 410 或 404,同时从 Sitemap 和内链中移除。
- 内容临时下架、预计恢复:返回 503 并带上 Retry-After,不要用 200 硬撑。
- 参数错误:规范到有效 URL 或返回 404,不要静默兜底成首页或列表页。
- 搜索结果为空的组合参数页:考虑用 robots meta 的 noindex,并避免在内链中大量暴露。
- 确实需要保留的聚合页:补上编辑内容或推荐内容,让它不只是空壳。
和内链、Sitemap 一起收口
状态码改对之后,还要把入口一起清理。软 404 大多有多个入口,Sitemap 一份、标签页一份、相关推荐一份。只改状态码而不管内链,蜘蛛仍会顺着旧链接不断找回来。建议按入口类型逐项核对:主导航、面包屑、列表页、标签聚合、站内搜索、Sitemap 分片。
同时留意服务器稳定性带来的干扰。如果节点在数据读取超时后返回了空模板,而不是错误码,就会出现「有时空、有时正常」的现象。核对时要在不同时间点重复请求,避免把偶发问题当成稳定结论。
验证与长期监控
- 改版后用同一批 URL 复测状态码和正文体积。
- 观察抓取日志中该 URL 段的回访频次是否下降。
- 检查抓取量是否向新页面和有更新需求的页面倾斜。
- 把「状态码 200 但正文过短」做成日常告警项,而不是一次性排查。
软 404 的处理本身不复杂,难的是持续维持。只要页面上线流程里没有「无内容也返回 200」的默认逻辑,这类问题就不会反复出现。