带参数的 URL 本身没有问题,问题在于参数可以自由组合。一个列表页配上颜色、尺寸、排序方式、页码和追踪参数,理论上能生成成千上万个地址。蜘蛛并不判断哪个更有价值,它只是沿着链接一路跟下去,抓取预算就这样被摊薄到大量相似页面上。
参数为什么会让 URL 空间迅速膨胀
无参数时,一个列表页只有一个地址;加上参数之后,每个可选项都对应一个新地址。更麻烦的是排列顺序:?color=red&size=m 与 ?size=m&color=red 在服务器看来往往是同一页,对蜘蛛来说却是两个 URL。参数越多,重复组合增长得越快。
这类页面通常内容高度相似,只有一小部分筛选结果有独立价值。如果全部放开抓取,蜘蛛会把时间花在近似页面上,真正需要更新的商品页、文章页反而排到后面。
先分清三类参数
追踪参数
utm_source、ref、from、spm 这类参数只服务于统计,不改变页面内容。它们最容易制造重复 URL,也最应该被统一处理。常见做法是让服务器对带追踪参数的请求返回规范化地址,或在页面里用 canonical 指向不带参数的版本。
筛选与排序参数
筛选参数是否放开,取决于筛选结果有没有独立的搜索需求。有明确需求的少数筛选组合可以保留并可被抓取;长尾组合更适合用 noindex 或 robots.txt 屏蔽,同时保证页面上仍有正常的内链供用户使用。
分页参数
分页页面对发现新内容有帮助,但不需要无限翻下去。可以限制可抓取的最大页码,深层分页用加载更多或按时间归档的方式替代。
让参数收敛的几种做法
- 固定参数顺序:在生成链接时统一按同一顺序拼接参数,减少同页多址。
- 去掉默认值:默认排序、默认视图不必写进 URL,只有用户主动切换时才追加参数。
- 用路径代替参数:稳定的筛选维度可以改写成路径,例如 /shoes/red/,语义更清晰,也便于单独设置抓取策略。
- 正确处理 canonical:对内容相同的参数页,canonical 指向主版本,但不要把所有筛选页都指向列表首页,那会让蜘蛛认为筛选页没有价值。
- robots.txt 与 noindex 分工:完全不需要出现的结果用 robots.txt 屏蔽抓取;希望保留在索引外但仍需读取的页面用 noindex。两者混用时注意不要把需要抓取的页面也挡住。
怎么判断参数有没有收敛
看服务器日志里的参数分布,是最直接的方式。统计一段时间内蜘蛛请求的 URL 中,带参数的比例、重复组合的数量,以及抓取集中在哪些参数上。如果大量请求都落在排序和追踪组合上,说明边界还需要再收紧。
同时观察站内链接:导航、筛选面板、排序控件生成的链接是否稳定。前端动态拼接参数时,顺序和默认值不一致,会让同一个页面以多种形式进入抓取队列。
收敛参数的目标不是减少 URL 数量,而是让蜘蛛把有限的请求留给内容真正不同的页面。
参数本身不是问题,缺少边界才是。给追踪参数定规则、给筛选参数定范围、给分页定上限,再配合 canonical 和日志观察,抓取分布通常会慢慢回到更合理的状态。这个过程需要几周时间,不要指望调整后立刻看到变化。