搜索抓取

蜘蛛抓取路上的 404 与软 404:无效路径怎么收敛

蜘蛛抓取时,无效地址会持续消耗抓取时间。这篇讲硬 404 与软 404 的区别、无效路径的常见来源、从日志到内链的排查顺序,以及跳转、410、noindex 的使用边界和分页上限的处理思路。

搜索抓取

蜘蛛抓取路上的 404 与软 404:无效路径怎么收敛

蜘蛛抓取站点的过程,本质上是一条路径的遍历。路径上如果散落着大量无效地址——已经删掉的页面、拼错的参数、空结果的列表页——蜘蛛每次来访都要在这些地方花掉一部分抓取时间,真正需要更新的页面得到的访问就少了。把无效路径收敛掉,是搜索抓取里容易被忽略、但收益比较稳定的一件事。

先分清硬 404 和软 404

硬 404 指服务器明确返回 404 或 410 状态码,蜘蛛收到后会把该地址标记为不存在,之后基本不再回访。软 404 则相反:地址返回的是 200,但页面内容为空、只剩导航和页脚,或者显示“没有找到相关内容”。从蜘蛛的角度看,这次抓取是成功的,它并不知道这条 URL 其实是无效的。

软 404 的麻烦在于反复消耗。一个返回 200 的空页面,蜘蛛可能会在接下来的几周里持续回访,确认内容有没有变化。如果有几千个这样的地址,抓取配额就被悄悄吃掉了一部分。

无效路径通常从哪来

  • 改版或栏目调整后,旧 URL 没有做跳转,直接变成 404;
  • 筛选、排序、分页参数被外部或内部链接带出来,组合出大量不存在的地址;
  • 内链指向已下架的商品、已合并的文章;
  • CMS 自动生成的标签页、作者页,内容为空也照常输出;
  • 外部站点早年留下的链接,对应内容早已下线。

排查顺序

  1. 从服务器访问日志或站点的抓取统计里,按状态码筛出 404、410,观察集中在哪些目录;
  2. 对这些地址做抽样访问,确认返回码是否与日志一致,排除 CDN 或反向代理改写状态码的情况;
  3. 检查是否存在“返回 200 但内容空”的页面,重点看空搜索结果页、空分类页、已售罄商品页;
  4. 回到内链,看这些地址是从哪些页面被链接出去的。源头不修,清理只是暂时的。

怎么处理更合适

有等价替代页面的,用 301 指向最接近的那一个。注意是“最接近”,不要全部指向首页,否则蜘蛛会把跳转链当成噪音。内容确实永久下线的,直接返回 410 或 404,比长期挂一个空页更干净。

对于筛选页、搜索页这类天生会生成大量组合地址的模块,可以这样处理:无结果时返回 404,或者让这些页面不进入内链体系。需要注意的是,noindex 和 404 不是一回事:被 noindex 的页面仍然会被抓取,只是不进索引,如果数量很大,抓取上的开销依然存在。

判断标准可以很简单:这个地址对用户有没有价值。没有价值又会被蜘蛛反复访问,就是在浪费抓取。

分页和列表页的边界

列表页翻到末尾后,如果程序还能继续生成空页,蜘蛛就会顺着页码一路走下去。给分页设定合理的上限,超出范围返回 404,同时不要在页面上输出指向空页的“下一页”链接,能让抓取停在该停的地方。

顺带看一眼服务器表现

无效地址过多有时不只是内容问题。如果日志里出现大量 404 集中在某个时间段,并且伴随响应时间拉长,可能是链接被批量请求或程序循环调用,值得查一下是否影响了正常页面的响应速度。服务器响应变慢时,蜘蛛的抓取节奏通常也会跟着变慢。

把它变成例行检查

不需要每天盯,按月做一次即可:抓一份 404 列表,看新增的部分来自哪里,修掉内链源头,处理掉确实无效的地址。坚持几轮之后,日志里的无效抓取会明显减少,剩下的抓取预算自然落在有效页面上。这个过程不会立刻带来可见的排名变化,但它让蜘蛛的每一次访问都更接近有用的内容。