在日志里看到某个 URL 被反复抓取,状态码是 200,但打开一看只有页头页脚和一句"没有找到相关内容",这类页面通常被称为软 404。它的影响比较隐蔽:站点层看不到报错,爬虫却拿到一个没有实质内容的页面。
软 404 和真正的 404 差别在哪
真正的 404、410 是明确的信号,告诉爬虫这个地址没有内容,后续不必反复来取。软 404 返回的是 200,等于告诉爬虫"这里有内容",于是抓取继续,索引里可能留下一个空壳。差别不在页面好不好看,而在返回给爬虫的状态信号是否准确。
常见的几个来源
- 筛选、排序、分页组合后结果为空,页面仍然渲染出完整模板;
- 商品或文章已下架、已删除,但详情页路由还在,返回的是空模板;
- 参数被随意拼接,命中一个不存在的内容 ID,程序兜底返回 200;
- 前端渲染失败或接口超时,只留下骨架屏和占位文案;
- 活动页过期后没有下线,内容被替换成"活动已结束"。
为什么它会影响收录
一是浪费抓取预算。爬虫把时间花在这些空页面上,真正需要更新的页面来得就少。二是稀释质量判断。一个站点里大量返回 200 却没有内容的 URL,会让整体页面质量的评估变差。三是索引里可能出现空壳结果,用户搜到点进去什么也没有。
核对顺序
- 先看状态码。用抓取工具或命令行确认返回的是 200、404 还是 301,注意区分渲染前后的差异。
- 再看返回给爬虫的 HTML。很多软 404 只发生在无 JS 的原始 HTML 里,或者在渲染后才补上内容,两者要分开看。
- 确认页面是否有实质内容。标题、正文、可用信息是否具备,还是只有模板和一句提示。
- 检查站内入口。这些 URL 是从哪里被发现的,列表页、搜索页还是外链,入口不清理会持续产生新的空页面。
- 看索引状态。已经进入索引的空壳页,需要在下线后观察一段时间才会逐步消失。
处理时按内容状态分情况
- 内容永久不存在:返回 404 或 410,同时清理站内指向它的链接。
- 暂时缺货或缺内容:保留 200 也可以,但要给出明确说明、推荐入口或返回上一级的路径,避免页面只有一句提示。
- 参数组合导致无结果:要么让这类组合不产生可访问的独立 URL,要么在无结果时返回合适的状态,不要一律 200。
- 渲染失败:先修接口和兜底逻辑,再谈收录。
判断标准可以用一句话概括:如果这个页面交给用户看,用户会觉得"这里没有东西",那么它大概率也不该以 200 的形式交给爬虫。
收口之后怎么盯
处理完不要只改一次。把这类页面加进抓取日志的观察清单,定期统计返回 200 但内容为空的 URL 数量;同时留意索引里的空壳页有没有减少。上线新模板、新筛选逻辑时,把"无结果时的返回状态"写进验收项,比事后批量清理省事得多。