有些页面蜘蛛来得很勤,状态码也一直是 200,但每次抓回去的都是一个空壳:没有正文,没有可跟的链接,连一句像样的说明都没有。这类页面在日志里看不出异常,却在持续占用抓取资源,也会把顺着内链走过来的蜘蛛带进死胡同。
软 404:返回 200 的空页面
软 404 指的是服务器返回 200,但页面实际表达的是“这里没有内容”。它和真正的 404 的差别只在状态码上,对蜘蛛来说却是两件事:404 是明确信号,抓过一次之后访问频率通常会慢慢降下来;软 404 看起来是正常页面,蜘蛛只能一次次回来确认它是不是还是空的。
常见的来源包括:
- 筛选、排序、价格区间等参数组合之后没有结果的列表页;
- 已下架或长期缺货的商品详情页,模板还在,主体内容已经删掉;
- 空分类、空标签、空作者页;
- 站内搜索无结果的页面;
- 需要 JS 拉取数据、但接口失败或未登录时留下的占位页。
为什么它们会被反复抓
页面本身没有内容,但指向它的入口往往还在:分类页的分页链接、商品推荐位、Sitemap 里的记录、外部留下的旧链接。只要这些入口不消失,蜘蛛就会按图索骥地过来,然后带着一个空页面回去。
更麻烦的是链接死胡同。一个空列表页里通常没有下一个可抓的链接,蜘蛛走到这里只能掉头,回到上层页面重新找路。如果这类页面在站内数量很大,抓取路径就会被大量重复的“进来—掉头”占满,真正需要被发现的深层 URL 反而排到了后面。
先分清“暂时”和“永久”
处理方式取决于这个页面以后还会不会有内容,不要一律改成 404。
暂时性空缺
缺货不久就会补货的商品页、季节性分类,建议保留原 URL 和 200 状态码,同时在页面上补充替代内容:同类商品、相关分类的入口、一句简短的说明。这样蜘蛛抓到的仍然是一张有用的页面,也不会因为状态码来回变化而产生困惑。
永久性移除
商品彻底下架、分类不再使用,比较干净的做法是返回 404 或 410,并从内链、Sitemap 和索引文件中同步清掉。如果该 URL 有外部链接或历史流量,可以先做 301 指向最接近的替代页,但不要把成批下架页统一 301 到首页——那会让大量不同 URL 收敛到同一个地址上。
无结果页的处理边界
参数化列表页最容易批量产生空页面,可行的做法有几条:
- 超出结果范围的页码不要继续渲染空列表,返回 404 或直接停止输出分页链接;
- 组合参数确实没有结果的页面,可以考虑加 noindex,并从分页链接里去掉;
- 在空结果页放置可抓取的出口,比如回到上级分类、热门标签,避免它成为死胡同;
- 检查 robots.txt,别把整类参数页一次性封锁,导致本来有内容的组合也进不来。
排查方式
从日志入手最直接:筛出返回 200、但响应体很小或内容为空的 URL,看看它们的访问频次和来源页面。同时对照 Sitemap,把里面已经失效或长期为空的地址清理掉。如果站点有监控,可以给“列表页结果数”加一个简单的埋点,结果长期为 0 的分类和标签就能被及时挑出来。
状态码只是给蜘蛛的第一层反馈。一个返回 200 的空页面,等于告诉蜘蛛“这里值得再来”,而它每次都会失望而归。
把空页面当成需要收尾的工作,而不是留着不管的角落。这类页面少一点,抓取资源才有机会流向真正有内容、有链接可跟的 URL。