搜索抓取

软 404 的抓取代价:页面回了 200,蜘蛛却没读到内容

服务器返回 200,蜘蛛也拿到了 HTML,但页面里没有实质内容,这类“软 404”在日志里看不到报错,却会长期占着抓取路径。本文梳理软 404 的典型来源、它对抓取线索与抓取预算的实际影响,以及排查和处理时可以先做哪几件事。

搜索抓取

软 404 的抓取代价:页面回了 200,蜘蛛却没读到内容

服务器返回 200,蜘蛛也顺利拿到了 HTML,但页面里没有实质内容——这类页面通常被称为软 404。它不会在服务器日志里留下一条红色错误,状态码看上去一切正常,所以在抓取链路上很不容易被注意到。问题在于,蜘蛛对它的处理方式和真正的 404 并不一样。

蜘蛛眼里的“到了,但没内容”

当蜘蛛请求一个 URL,得到 200 响应,就会认为这个地址是一个有效页面,并把它放进后续的抓取和评估流程。但如果 HTML 里只有导航、页脚和一句“暂无结果”,正文部分接近空白,搜索引擎在解析时容易把它判定为软 404:地址是通的,内容却是空的。

这种判定不一定立刻发生,也可能在几次抓取之后才稳定下来。关键在于,200 的响应意味着蜘蛛不会主动把这条 URL 从抓取队列里划掉,它的线索依然挂在站点的抓取图谱上。

软 404 最容易出现在哪几类 URL

  • 筛选或排序参数组合后没有任何结果的列表页,例如颜色、价格区间交叉后为空。
  • 已下架商品、已删除文章,但模板仍然返回 200,只是正文区域没有内容。
  • 分页参数超出实际页数的翻页地址,比如第 20 页之后只剩空列表。
  • 搜索站内结果页,关键词命中为零时依然给出 200 的空结果页。
  • URL 能打开,但正文由前端异步加载,首屏 HTML 里什么都没有。

它对抓取路径的实际影响

  • 线索不释放。真正的 404 会让蜘蛛逐步降低回访频率,软 404 则继续以有效地址的身份存在,每次重访都消耗一次请求。
  • 重复回访同一批地址。当这类 URL 数量较多时,蜘蛛容易在同一批空页之间来回走,真正需要抓取的新页面反而排在后面。
  • 内链线索被稀释。如果站内大量链接指向空结果页或已下架页,蜘蛛顺着内链一路走过去,拿到的都是低信息量页面,对整站结构的判断会变模糊。
  • 掩盖真实问题。模板返回 200 是一种省事的做法,但会让“这个地址确实不该存在”这一信息传达不出去。

怎么把它从抓取路径里认出来

  1. 看服务器日志里的响应码只是第一步,200 的请求还要结合响应体大小和正文内容一起判断。体积明显偏小的页面值得单独抽样。
  2. 把日志里被反复抓取的参数型 URL 挑出来,人工打开几个,确认是不是空结果页。
  3. 在站点地图或内链里找找有没有指向这些地址的入口,有入口说明蜘蛛还会继续走过来。
  4. 观察一段时间内被抓取 URL 的总量与其中有内容页面的比例,比例失衡往往说明空页占了太多抓取机会。

确认之后可以怎么处理

  • 该消失的就让它 404 或 410。已经下架且没有替代内容的产品、文章,直接返回 404 比返回空壳 200 更清晰,蜘蛛能据此逐步清理线索。
  • 有相近内容的做 301。商品换型号、文章换地址时,跳转到确实相关的页面即可,但要注意别把大量不相关页面都跳到一个首页。
  • 能补内容就补。空搜索结果页可以给出相关推荐或热门列表,让它有存在价值;但如果这类页面数量巨大,更实际的做法是禁止蜘蛛抓取参数组合。
  • 谨慎使用 noindex。noindex 的页面仍然会被抓取,只是不进索引,对于数量庞大的参数页,它并不能解决抓取请求被占用的问题。
判断标准可以很简单:这个地址如果用户点进来,会不会觉得“这里应该有东西,但什么都没有”?如果答案是会,那它对蜘蛛来说大概率也不是一条值得保留的抓取路径。

软 404 不太会造成立刻可见的故障,它的代价是慢慢累积的:一批批空页持续占用抓取请求,内链线索指向没有落点的地方。定期从日志和实际页面两头核对一次,把该返回错误的地址还给它一个错误码,抓取路径会干净不少。