搜索抓取

URL 参数组合:蜘蛛为什么会抓到一堆近乎相同的页面

同一个列表页因为排序、筛选、追踪参数派生出大量 URL,蜘蛛会把这些地址都当作独立页面逐一抓取。本文说明参数如何放大 URL 数量、蜘蛛的实际反应、几种常见处理方式的取舍,以及从日志统计到链接生成阶段的落地步骤。

搜索抓取

URL 参数组合:蜘蛛为什么会抓到一堆近乎相同的页面

站内链接里带上一两个查询参数很常见,比如排序、筛选、分页、来源追踪。对用户来说它们只是视图差异,对蜘蛛来说,每一个参数组合都是一个独立的 URL。如果不加约束,这些 URL 会以接近指数的方式增长,抓取预算被大量消耗在内容几乎相同的页面上。

参数是怎么把 URL 数量放大的

假设一个列表页支持四种排序、五个筛选维度、三种每页条数,参数之间还能自由组合,那么同一个列表理论上可以生成几百甚至上千个 URL。蜘蛛顺着筛选条件一路点下去,就会发现源源不断的新地址。这些地址往往返回 200,内容高度相似,只有顺序或子集不同。

更麻烦的是参数顺序。?a=1&b=2 和 ?b=2&a=1 在服务器看来可能是同一个页面,在蜘蛛看来却是两个 URL。会话 ID、来源参数(utm_*)也会制造同样的问题。

蜘蛛遇到参数链接时的实际行为

  • 它不会主动判断“这个参数没意义”,只要链接可点、返回正常,就可能进入待抓队列。
  • 新发现的参数 URL 数量一旦超过它愿意分配的额度,抓取会明显向这些地址倾斜。
  • 真正需要更新的内容页,可能因为排在队尾而延迟被抓。

结果就是日志里满屏参数地址,而正文页的抓取次数反而下降。

几种常见处理方式

  • robots.txt 屏蔽:用 Disallow 挡住特定参数模式。简单直接,但被屏蔽的 URL 仍可能因为没有内容可抓而以其他形式出现在索引里,需要配合其他手段。
  • canonical 指向规范页:告诉搜索引擎哪个是主版本。它是建议而非强制,参数页仍然会被抓。
  • 链接层面不生成:筛选结果用表单或 JS 交互,不做成可爬的 a 标签。最根本,但要确认核心内容仍能被发现。
  • 参数排序与去重:服务端把参数统一排序、去掉无意义参数,让同一个视图只对应一个 URL。

可以落地的几步

  1. 先统计:从日志里抽出带参数的 URL,按参数名分组,看哪些参数贡献了最多的抓取次数。
  2. 分类:区分“影响内容的参数”(如分页、分类筛选)和“不影响内容的参数”(如排序、追踪、会话)。
  3. 对不影响内容的参数,统一在链接生成阶段去掉,而不是靠事后屏蔽。
  4. 对影响内容的参数,保留可抓版本,但限制组合数,比如只允许一层筛选、按固定顺序排列。
  5. 为每个可抓的参数组合提供唯一的规范 URL,并在页面上给出明确的上一级入口。
  6. 在 Sitemap 里只放规范 URL,不要把参数版本也塞进去。
判断标准很简单:如果一个参数页面对用户没有独立价值,它大概率也不值得让蜘蛛花时间。

验证有没有效果

调整后过一两周再看日志,重点看两件事:带参数的抓取占比是否下降,正文页的抓取次数是否回升。同时检查规范 URL 的抓取是否正常,避免把需要抓的页面一起挡掉。

参数治理不是一次性工作。新的筛选功能、活动追踪链接随时会引入新的参数,把它当作上线前的检查项,比事后清理更省事。