蜘蛛顺着链接爬到一个页面,服务器返回 200,看起来一切正常,但页面主体只有一句「暂无内容」或干脆一片空白。这就是常见的软 404。它不是真正的 404,却比 404 更麻烦:蜘蛛会把它当成有效页面,反复回访;访客点进来也找不到想要的答案。
软 404 为什么值得单独自查
真正的 404 会明确告诉蜘蛛这个地址没有内容,蜘蛛一般会较快放弃。软 404 返回的是 200,蜘蛛只能靠页面内容判断,判断标准又不统一。结果就是:
- 空页面被当成正常 URL 参与抓取,占用抓取预算;
- 同类空页面批量生成时,可能形成大量低质量索引;
- 访客从搜索结果点进来,看到的是空壳,体验受损;
- 站点日志里这些地址反复出现,干扰对真实抓取情况的分析。
对做 URL 发现和蜘蛛池相关工作的站点来说,这一点尤其重要。你希望蜘蛛把时间花在有内容的页面上,而不是在一堆空地址之间来回确认。
常见的软 404 场景
1. 空栏目与空标签页
栏目刚建好还没放内容,或者标签页只挂了一两篇文章,模板仍然正常输出 200。蜘蛛从导航或聚合页爬进来,看到的是一张空列表。
2. 站内搜索无结果
搜索参数被蜘蛛抓到后,如果无结果页也返回 200,就可能生成大量「没有找到相关内容」的地址。这类页面通常没有独立价值,也不适合被索引。
3. 已下架或已删除的内容
商品下架、文章撤稿后,如果程序只是把正文清空,地址还返回 200,就会留下一个空详情页。访客从旧链接进来,只能看到空白或默认提示。
4. 参数错误与截断 URL
比如 id 不存在、页码超出范围、分类参数拼错,程序没有抛 404,而是渲染了一个空模板。蜘蛛可能因为站内某个错误链接而爬到这些地址。
5. 模板渲染失败
数据查询报错被静默处理,页面框架还在,正文区域却是空的。这类情况平时不容易发现,日志里可能有报错,但状态码仍是 200。
自查与判断方法
软 404 的麻烦在于它不会在状态码上暴露,需要结合内容判断。可以按下面的顺序检查:
- 看状态码和页面标题。用命令行工具或浏览器开发者工具确认返回的是 200 还是 404。状态码正常不代表内容正常,还要看页面主体。
- 抽查空列表页。把栏目页、标签页、搜索页的无结果状态各点开一次,看返回码和页面提示。
- 检查已下架内容。随机抽几个旧链接,确认是跳转到相关页面,还是留在了空详情页。
- 翻访问日志。找那些被蜘蛛频繁访问、但页面标题相似且内容为空的地址,通常能发现一批软 404。
- 用站点地图和内链做交叉验证。如果 sitemap 或导航里还挂着这些空地址,说明清理范围不仅是状态码,还包括入口链接。
判断标准可以简单一些:如果这个页面没有独立内容,也不能给访客提供有效信息,就不应该以 200 的状态长期存在。
处理原则:该 404 就 404,该跳转就跳转
发现软 404 后,不建议一刀切。按页面类型分别处理更稳妥:
- 彻底没有内容的地址:返回 404 或 410,并在站内移除对应链接。410 表示永久删除,语义更明确,但并非必须。
- 有替代页面的地址:做 301 跳转到最相关的新页面,比如下架商品跳到同类商品或分类页。
- 暂时缺内容但会恢复的栏目:可以先返回 404,等内容准备好再上线,而不是让空页面挂着。
- 搜索无结果页和参数页:返回 404 或至少加 noindex,同时避免把这类地址写进 sitemap。
- 确实需要保留的空状态页:补充引导内容,比如推荐链接、分类入口,让它对访客有价值,再考虑是否允许索引。
和抓取预算、URL 发现的关系
蜘蛛发现 URL 的渠道很多:sitemap、内链、外链、历史记录、日志里的旧地址。每多一个入口,就多一次抓取机会。如果这些入口指向的是软 404,蜘蛛每次来都要重新判断一遍,抓取预算就被慢慢消耗掉。
所以自查软 404 不只是改一个状态码,还包括整理入口:把 sitemap 里的空地址删掉,把导航和聚合页里的空栏目隐藏,把旧链接集中做一次跳转或清理。入口干净了,蜘蛛的到访才更集中在有内容的页面上。
上线后的复查
调整完成后,别只看一次。隔一周再抽查同一批地址,确认状态码稳定,没有因为模板更新又回到 200。同时观察日志里这些地址的访问频率是否下降。如果仍然频繁出现,说明还有内链或跳转链没有处理干净,需要继续往上找入口。
软 404 不会让站点立刻出问题,但它会一点点浪费蜘蛛的耐心。把空页面当成正常页面养着,时间越长,清理成本越高。定期做一次这样的自查,比等到索引里堆满空壳再回头处理要轻松得多。