搜索抓取

蜘蛛抓到了空页面:软 404、无结果列表与占位页怎样消耗抓取资源

有些页面蜘蛛来得很勤,状态码也一直是 200,但每次抓回去的都是空壳:没有正文,也没有可跟的链接。本文梳理软 404、无结果列表页与占位页的常见来源,说明它们为什么会被反复抓取,以及区分暂时与永久空缺时该怎么收尾。

搜索抓取

蜘蛛抓到了空页面:软 404、无结果列表与占位页怎样消耗抓取资源

有些页面蜘蛛来得很勤,状态码也一直是 200,但每次抓回去的都是一个空壳:没有正文,没有可跟的链接,连一句像样的说明都没有。这类页面在日志里看不出异常,却在持续占用抓取资源,也会把顺着内链走过来的蜘蛛带进死胡同。

软 404:返回 200 的空页面

软 404 指的是服务器返回 200,但页面实际表达的是“这里没有内容”。它和真正的 404 的差别只在状态码上,对蜘蛛来说却是两件事:404 是明确信号,抓过一次之后访问频率通常会慢慢降下来;软 404 看起来是正常页面,蜘蛛只能一次次回来确认它是不是还是空的。

常见的来源包括:

  • 筛选、排序、价格区间等参数组合之后没有结果的列表页;
  • 已下架或长期缺货的商品详情页,模板还在,主体内容已经删掉;
  • 空分类、空标签、空作者页;
  • 站内搜索无结果的页面;
  • 需要 JS 拉取数据、但接口失败或未登录时留下的占位页。

为什么它们会被反复抓

页面本身没有内容,但指向它的入口往往还在:分类页的分页链接、商品推荐位、Sitemap 里的记录、外部留下的旧链接。只要这些入口不消失,蜘蛛就会按图索骥地过来,然后带着一个空页面回去。

更麻烦的是链接死胡同。一个空列表页里通常没有下一个可抓的链接,蜘蛛走到这里只能掉头,回到上层页面重新找路。如果这类页面在站内数量很大,抓取路径就会被大量重复的“进来—掉头”占满,真正需要被发现的深层 URL 反而排到了后面。

先分清“暂时”和“永久”

处理方式取决于这个页面以后还会不会有内容,不要一律改成 404。

暂时性空缺

缺货不久就会补货的商品页、季节性分类,建议保留原 URL 和 200 状态码,同时在页面上补充替代内容:同类商品、相关分类的入口、一句简短的说明。这样蜘蛛抓到的仍然是一张有用的页面,也不会因为状态码来回变化而产生困惑。

永久性移除

商品彻底下架、分类不再使用,比较干净的做法是返回 404 或 410,并从内链、Sitemap 和索引文件中同步清掉。如果该 URL 有外部链接或历史流量,可以先做 301 指向最接近的替代页,但不要把成批下架页统一 301 到首页——那会让大量不同 URL 收敛到同一个地址上。

无结果页的处理边界

参数化列表页最容易批量产生空页面,可行的做法有几条:

  1. 超出结果范围的页码不要继续渲染空列表,返回 404 或直接停止输出分页链接;
  2. 组合参数确实没有结果的页面,可以考虑加 noindex,并从分页链接里去掉;
  3. 在空结果页放置可抓取的出口,比如回到上级分类、热门标签,避免它成为死胡同;
  4. 检查 robots.txt,别把整类参数页一次性封锁,导致本来有内容的组合也进不来。

排查方式

从日志入手最直接:筛出返回 200、但响应体很小或内容为空的 URL,看看它们的访问频次和来源页面。同时对照 Sitemap,把里面已经失效或长期为空的地址清理掉。如果站点有监控,可以给“列表页结果数”加一个简单的埋点,结果长期为 0 的分类和标签就能被及时挑出来。

状态码只是给蜘蛛的第一层反馈。一个返回 200 的空页面,等于告诉蜘蛛“这里值得再来”,而它每次都会失望而归。

把空页面当成需要收尾的工作,而不是留着不管的角落。这类页面少一点,抓取资源才有机会流向真正有内容、有链接可跟的 URL。