搜索抓取

爬行陷阱与抓取回路:蜘蛛在站内绕圈时消耗了什么

蜘蛛在站内反复绕圈,通常不是它闲着,而是 URL 设计给出了没有出口的路径。这篇文章讲抓取回路的常见形态、如何从日志里识别,以及用内链、参数和 Sitemap 把路径收敛回主干的方法。

搜索抓取

爬行陷阱与抓取回路:蜘蛛在站内绕圈时消耗了什么

蜘蛛在站内来回走,本来很正常。但如果日志里出现大量结构相似、层层叠加的 URL,而且抓取量大多落在这些页面上,主干内容反而没被访问几次,那就值得检查是不是形成了抓取回路。

抓取回路是什么样子的

回路不一定是个死循环,更多时候是路径可以无限延伸。蜘蛛每走一步都能拿到新链接,于是它顺着走,但走出来的页面价值越来越低。

  • 参数叠加:筛选、排序、视图切换等参数可以任意组合,同一个商品列表能生成成百上千个 URL。
  • 日历翻页:归档页可以一直往前翻,越翻越早,越翻越薄。
  • 会话与追踪参数:每个访客看到不同 URL,蜘蛛也会被带着走。
  • 软 404 构成的伪页面:不存在的筛选条件也返回 200 和一套空列表,蜘蛛会把它当成有效页面继续跟。
  • 重定向环:A 跳 B、B 跳 A,或者规则没写完导致链条拉长。

回路消耗的不只是抓取预算

最直接的影响是抓取预算被分摊。蜘蛛一天能抓的页面数量大致有上限,多抓一批空列表,就少抓一批真实内容。

其次是服务器压力。这类请求往往还带有查询参数,命中缓存的概率低,数据库压力更大。服务器一旦变慢,蜘蛛排队等待,整体抓取效率下降,形成负反馈。

还有一层不容易被察觉:新 URL 的发现效率变差。蜘蛛在旧回路里打转,新发布的页面被发现的时机就可能往后推。

从日志里认出回路

  1. 按 URL 路径前缀做聚合,看哪些前缀下 URL 数量异常膨胀。
  2. 观察带查询参数的请求占比,以及参数组合的分布是否发散。
  3. 看抓取深度:从入口算起,被访问 URL 的层级是不是普遍很深。
  4. 核对状态码,区分真 404、软 404 和返回 200 的空页面。
  5. 对比主干内容的抓取频次,看是否被边缘页面挤占。

用内链和 URL 设计把路径收回来

处理回路的核心思路是给路径设边界,而不是简单地把整片目录挡掉。挡得太多,正常内容也会一起失去被发现的机会。

  • 筛选页限制维度:允许单条件筛选被抓,多条件组合要么不生成可抓链接,要么只保留有搜索需求的一小部分。
  • 分页设置终点:明确最后一页,没有下一页时就不要继续输出可抓链接。
  • 面包屑与栏目内链:让每个深层页面都有一条回主干的路径,蜘蛛能原路返回,而不是越走越偏。
  • 规范链接:对参数变体声明规范地址,降低重复 URL 的抓取价值。
  • Sitemap 只放主 URL:把希望被优先发现的地址集中列出,不要把参数变体也塞进去。

服务器侧配合

空结果页应该返回合适的状态码,而不是一律 200。重定向链条控制在一次以内,避免多次跳转。响应时间保持相对稳定,比偶尔很快、偶尔超时要好,因为不稳定的响应会让蜘蛛放缓节奏。

回路问题的判断标准不是蜘蛛抓了参数页,而是蜘蛛把主要精力花在了没有价值的路径上。先量化,再收敛。

最后提醒一句:robots 屏蔽和 noindex 都是最后的收口手段。优先从生成源头减少 URL,其次是内链收敛,实在控制不住的少部分再考虑屏蔽。每次改动后回到日志里看一遍抓取分布有没有变化,比一次性大改更容易判断效果。