搜索抓取

软 404 与状态码误用:蜘蛛为什么把有用的 URL 当成空壳页

蜘蛛抓取一个 URL 时先拿到的是状态码,状态码用错会让空壳页面被当成正常页面反复抓取,真正有价值的 URL 反而排不上队。本文梳理软 404 的常见形态、状态码误用的典型场景,以及从服务器日志自查、用 404、410、503 明确表态的处理思路。

搜索抓取

软 404 与状态码误用:蜘蛛为什么把有用的 URL 当成空壳页

蜘蛛抓取一个 URL 时,最先拿到的不是页面内容,而是服务器返回的状态码。状态码决定了这次抓取算不算成功、这个 URL 还要不要再来。问题在于,不少站点把 200 当成万能返回——只要请求能被处理,一律给 200。结果是:明明没有有效内容的页面,在蜘蛛眼里却是“正常页面”,于是被反复抓取,占掉了抓取配额,真正有价值的 URL 反而排不上队。

蜘蛛怎么判断一个 URL 值不值得再来

大致会看三件事:返回的状态码是否正常、正文内容是否有效、内容与 URL 指向的主题是否一致。状态码正常但内容为空或高度重复,就落到了“软 404”的范围。与直接返回 404 不同,软 404 需要蜘蛛多抓几次才能确认,这个过程会额外消耗抓取资源。

常见的状态码误用

  • 空搜索结果返回 200:站内搜索没有结果,页面只是“未找到”,却渲染出完整模板并返回 200,容易被当成低质页面。
  • 商品或内容下架后页面仍在:正文清空但 URL 保留,状态码仍是 200,蜘蛛会持续回访。
  • 错误页返回 200:出错时展示“系统繁忙”“稍后再试”,状态码却给 200,蜘蛛会把它当正常内容处理。
  • 临时维护统一返回 404:本该用 503 表示暂时不可用,结果给出 404,可能让正常 URL 被判定为已消失。

软 404 的几种典型形态

需要交互才出现的内容

页面骨架先返回 200,正文要等点击、滚动或输入之后才加载。蜘蛛拿到的是空壳,却仍按正常页面记账。

大量 URL 指向同一份空内容

参数组合、筛选条件能翻出很多地址,内容却几乎一致或干脆为空,这类 URL 容易一起被判定为无效。

自查:从日志里把问题挑出来

  1. 按状态码分组统计蜘蛛访问,看 200 的占比是否高得反常。
  2. 抽一批 200 的 URL,用不带 Cookie、不执行脚本的方式请求,确认正文是否有实质内容。
  3. 重点检查站内搜索、筛选、分页这三类模板,是否存在“无结果也返回 200”。
  4. 对照抓取频次:被反复抓取、却从来不带来访问的 URL,往往是空壳。

处理思路

真正不存在的页面,该给 404 就给 404;已经彻底下架、不会再恢复的,用 410 表达更明确。站内搜索无结果、筛选结果为空这类情况,可以选择返回 404,或至少在页面上明确说明无结果,并减少内链指向。维护、限流造成的暂时不可用,用 503 并配合 Retry-After,比直接 404 更稳妥。已经被大量抓取的空壳 URL,可以先撤掉站内入口,让蜘蛛自然降低访问频次。

noindex 与状态码别混用

noindex 解决的是“页面有效但不想被收录”,状态码解决的是“页面是否还存在”。用 noindex 处理已经删掉的页面,等于让蜘蛛继续回访一个没有价值的地址;反过来,给正常但不想收录的页面返回 404,只会制造更多无谓的抓取失败。

状态码是蜘蛛判断页面生死的首要信号,含糊的返回会让它一直猜。让有效页面拿到 200,让无效页面得到明确的否定,抓取次数才会花在该花的地方。

最后提醒一句:调整状态码属于影响面较大的改动,动手前先用小范围 URL 验证,观察一到两周日志变化,再决定是否扩大范围。