搜索抓取

URL 参数与抓取路径:同一内容被拆成多个地址后怎么收敛

站内链接里的排序、筛选、追踪参数,会把同一篇内容变成几十个地址,蜘蛛的抓取路径因此被撑大。本文说清三类参数的区别,给出收敛顺序、常见误区和验证方法,帮助站点把抓取资源用在真正需要抓的 URL 上。

搜索抓取

URL 参数与抓取路径:同一内容被拆成多个地址后怎么收敛

蜘蛛发现 URL 的方式并不复杂:站内链接、Sitemap、外链,以及它自己的历史抓取记录。这几条路里,最容易失控的是站内链接——因为链接上带着参数。同一篇内容,参数不同,在蜘蛛眼里就是几十个不一样的地址。

参数是怎么把路径撑大的

常见的参数大致有几种:

  • 排序参数,例如 sort=price_asc、order=desc;
  • 筛选参数,例如 color=red、size=42;
  • 追踪参数,例如 utm_source、from、ref;
  • 会话或时间戳参数,例如 sid、t=1690000000;
  • 分页与展示参数,例如 page=2、view=list。

单独一种还好,问题是它们会组合。三个筛选维度各取两个值,就是八条地址;再加一个排序参数,翻一倍。地址数量不是加法增长,而是乘法增长。蜘蛛从列表页出发,沿着这些链接一路走,抓到的往往是同一批内容的不同外壳。

先判断参数属于哪一类

处理之前,先把参数分成三类,处理方式完全不同。

  • 改变内容的参数:如 page、分类筛选、语言切换。这类地址本身就是有效页面,需要保留可抓取路径。
  • 不改变内容的参数:如 utm、ref、会话 ID。它们只是来源标记,不应该出现在站内链接里,更不该被蜘蛛当成新地址。
  • 改变呈现但不改变集合的参数:如排序、每页数量、列表视图。内容集合一样,只是顺序不同,属于同一批 URL 的变体。

判断标准可以简单一点:把这个参数去掉,用户看到的页面主体内容是否变化?如果没变,那它多半不该独立占一条抓取路径。

收敛顺序:从源头到兜底

  1. 先清理站内链接。追踪参数只用在站外投放,站内链接保持干净。这是成本最低、效果最直接的一步。
  2. 排序参数不进内链。默认排序保留一个地址即可,其他排序方式交给用户操作,不主动生成可抓链接。
  3. 控制筛选组合的开放范围。只开放一到两个维度给蜘蛛走,其余组合不写进 HTML,或用 nofollow 标注。要清楚 nofollow 只是提示,不是禁止。
  4. 会话参数不要写进 URL。用 cookie 承载状态,避免每次访问生成新地址。
  5. canonical 指向无参数版本。它能帮助蜘蛛归并变体,但它是建议不是命令,不能替代前面的清理。
  6. robots.txt 屏蔽参数模式要谨慎。被屏蔽的地址,蜘蛛拿不到页面上的 canonical,反而可能保留旧记录。
屏蔽一条参数路径,并不等于这条路径不存在。蜘蛛可能早就从外链或历史记录里知道它,只是不再抓取。真正决定结果的,仍然是页面上给出的信号是否一致。

怎么验证收敛有没有生效

收敛之后,至少看三个地方:

  • 抓取日志里,带参数的 URL 占全部抓取的比例是否下降;
  • 从站内链接爬出来的地址中,参数变体还有多少;
  • 用站点查询粗略看索引里同类变体的数量变化。

如果比例长期不降,通常说明清理只做了一半:站内链接干净了,但 Sitemap 或历史外链还在持续供给带参数的地址。

几个常见误区

第一,把参数当成小事,先去做外链和内容。参数膨胀消耗的是抓取资源,资源被占住,新页面被发现的速度自然变慢。

第二,一股脑全屏蔽。改变内容的参数被屏蔽后,正常页面也走不进去了,反而把有效的抓取路径一起切断。

第三,只靠 canonical 解决一切。canonical 是页面级信号,蜘蛛要抓到页面才能读到它,如果在内链层面就不停产生新变体,信号传递的效率会很低。

参数治理不需要一次做完。先清理最明显的一类——站内链接里的追踪参数和会话参数,观察一段时间抓取日志的变化,再处理排序和筛选组合,通常比一次性大改更稳。