搜索抓取

筛选参数与蜘蛛抓取:一个列表页能组合出多少条 URL

列表页加上排序、筛选、视图切换后,URL 会以乘法方式膨胀。本文说明这些参数 URL 是怎么被蜘蛛走到的、canonical 为什么止不住抓取,以及从内链、参数顺序、服务端状态码几个层面收口的做法。

搜索抓取

筛选参数与蜘蛛抓取:一个列表页能组合出多少条 URL

一个商品列表页,看起来只有一条 URL。但加上排序、价格区间、颜色、品牌、每页条数、视图模式之后,它能生成的 URL 数量会变成乘法级别。这些 URL 大多不是人为放的,而是页面自己长出来的。蜘蛛顺着这些链接走,就会把大量时间花在近似重复的页面上。

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

假设一个列表页有 5 个筛选维度,每个维度有 4 个可选值,再加上 3 种排序方式。理论上可组合出的路径数量是 4 的五次方再乘 3,也就是三千多条。实际被链接出来的可能没这么多,但只要页面把当前筛选状态渲染成可点击的链接,蜘蛛每走一步就会看到新的一批。

更麻烦的是顺序问题。同一组筛选条件,参数按不同顺序拼出来就是两条 URL:?color=red&size=m?size=m&color=red 在蜘蛛眼里是两个地址。如果模板输出的顺序不固定,重复路径还会再翻一倍。

蜘蛛遇到参数 URL 时的几种反应

  • 抓取:页面能返回 200、有独立内链指向,蜘蛛通常会走这一趟。
  • 归并:内容高度相似的参数页,可能被抓到但不进入索引,白花了配额。
  • 排队:一部分 URL 进入队列后长期不被访问,成为待处理积压。

这三件事合在一起的结果是:蜘蛛的抓取额度被参数页消耗,真正需要更新的详情页、活动页反而排到了后面。抓取额度不是无限的,它更像一份按天发放的预算。

canonical 不是万能止血带

很多人第一反应是给参数页加 canonical,指向无参数版本。canonical 表达的是「我更希望你把权重算到这一条」,它并不阻止蜘蛛来访。只要参数页本身返回 200、页面上还有内链指向它,蜘蛛照样会走。canonical 管的是收录归并,不是抓取路径。

先分清哪些参数是必须的

  • 追踪参数:utm、来源标记等,对页面内容没有影响,完全可以不生成可爬链接。
  • 排序与视图参数:默认排序之外的顺序,多数对用户价值有限。
  • 筛选参数:如果组合出的页面确实有独立内容和搜索需求,可以保留一部分常用组合。
  • 分页参数:通常需要保留,但要保证分页链接是可抓取的普通链接,而不是脚本按钮。

从日志里看参数 URL 的实际占比

把蜘蛛请求按「是否带问号」分两类,统计各自的比例,再看带参数的请求集中在哪几个参数名上。如果某些参数被反复抓取且长期返回 200,说明站点在持续通过内链把这些地址递给蜘蛛。这个数字比主观判断可靠,也比看索引量更直接。

几种收口方式,按影响面从大到小

  1. 改内链:列表页的筛选改成表单提交或按钮交互,不用可爬链接铺开全部组合,只保留少量固定入口。
  2. 固定参数输出顺序:同一组条件在模板里按统一顺序拼接,先消掉同义 URL。
  3. robots.txt 收线:对明确无用的参数模式做 Disallow。注意它只阻止抓取,不阻止已收录页面继续出现在结果里。
  4. 规范化与自指:无参数版本自指,参数版本指向主版本,减少归并歧义。
  5. 服务端状态码:对无效或超范围的参数组合返回 404 或 410,不要一律返回 200 的空列表页。
收紧参数 URL 之前,先确认这些地址没有外部链接和自然流量。否则收得越彻底,被掐断的入口也越多。

小结

参数 URL 的问题不在于蜘蛛抓不抓,而在于它抓得太多却收获太少。处理顺序建议是:先确认哪些参数必须存在,再从内链下手减少可爬组合,最后用规范化和服务端返回码收尾。做完之后回到日志里核对一次抓取分布,看真正需要更新的页面有没有拿到更多访问,这比看工具里的一个数字更能说明问题。