参数本身不是问题,组合起来才是
列表页加一个排序、勾一个筛选条件,URL 就从 /list 变成 /list?sort=price&color=red&page=2。对用户来说这是一次点击,对蜘蛛来说这是三个新地址。如果站点的内链把这些组合都暴露出来,URL 数量会按乘法增长,而内容差异可能只在一个价格排序上。
蜘蛛遇到参数 URL 时怎么处理
蜘蛛不会因为 URL 带问号就拒绝。它会先把新地址放进待抓取队列,抓回来之后再判断内容。判断依据通常是页面主体是否与已有 URL 高度相似、canonical 指向哪里、返回状态码是什么。如果站点没有任何收敛信号,蜘蛛会逐步把参数变体当成独立页面,各自走一遍抓取流程。
常见的几类参数
- 追踪参数:utm_source、gclid、fbclid 等,只用于统计,不影响页面内容。
- 排序参数:sort=price、order=desc,同一批商品换个顺序。
- 分面筛选:颜色、尺码、品牌、价格区间,两两组合就翻倍。
- 会话与用户标识:sessionid、uid,同一个人每次访问都可能不同。
- 分页参数:page=2、offset=40,属于正常列表翻页。
真正的问题在哪里
第一,抓取预算被分散。同一批内容被反复取回,用于发现新页面的机会就少了。第二,canonical 指向混乱。参数页如果不声明规范地址,蜘蛛只能自己判断,判断结果未必符合你的预期。第三,日志和报告变难读,几万条 URL 里大部分是同一页面的变体,真正没被发现的页面反而被淹没。
分门别类地处理
不建议用 robots.txt 一刀切地屏蔽所有带问号的地址,这会把正常分页也挡在门外。更稳妥的做法是按参数用途分开处理。
- 追踪参数:站内链接不要输出。外链带来的带参 URL,如果确定只用于统计,可以在服务端做一次干净重定向,或者让页面 canonical 指向无参版本。
- 排序参数:内链只保留一种默认排序,其他排序方式交给用户交互触发,不写成可抓取的链接。必须存在的排序页,可以统一 canonical 到默认排序版本。
- 分面筛选:只放行有实际搜索需求的核心组合,其余组合不生成内链,或用 noindex, follow 保留链接价值而不让页面本身进入索引。
- 会话标识:不要出现在 URL 里,改放在 Cookie 或请求头中。已经出现在 URL 的,应尽快换成规范写法。
- 分页参数:保留可抓取,每页 canonical 指向自己,不要全部指向第一页,否则后面的内容可能不再被回爬。
收敛之后要回头验证
调整完成后,观察一段时间日志:参数变体的抓取次数是否下降,列表里的深层页面是否被更多地取回。如果有页面因为 canonical 改动而长时间不再出现,说明收得过头了,需要把其中有独立价值的地址重新放开。参数治理不是一次性动作,随着运营活动增加,新的追踪参数和筛选维度会不断出现,最好在链接生成的模板层面就提前约束。
蜘蛛对参数没有天然敌意,它只是按链接走。站点输出什么链接,它就会去抓什么地址。