搜索抓取

URL 参数把同一页面拆成多个地址:抓取路径上的收口办法

同一页面加上排序、筛选、追踪参数后会变成多个地址,蜘蛛顺着这些链接抓散,抓取预算被摊薄。本文先区分参数的性质,再梳理 canonical、robots 规则、链接源头与 Sitemap 几种收口思路,并给出观察收口是否生效的检查点。

搜索抓取

URL 参数把同一页面拆成多个地址:抓取路径上的收口办法

同一个商品页,加上排序参数、筛选参数、追踪参数之后,可以变成几十个甚至上百个不同地址。这些地址都返回 200,内容大同小异,蜘蛛会沿着这些链接一路抓下去。结果是抓取预算被摊薄,真正需要更新的页面反而回访变慢。这篇文章讲的是参数地址怎么收口,以及收口时容易踩的坑。

参数为什么会让一个页面变成多个地址

对服务器来说,查询字符串不同就是不同请求。只要程序没有做归一化处理,每个参数组合都会生成一份独立的响应。蜘蛛没有“这两个地址其实是同一个页面”的判断能力,它只看到两个返回 200 的 URL,并且都能从站内链接点进去。

更麻烦的是参数可以互相组合。三个筛选维度各有两个取值,就是 2×2×2 共八种组合,再加上排序方向、每页数量、追踪标记,数量很快就失控。这些页面本身不算错,问题在于它们都参与抓取,却几乎不带来新的可索引内容。

先分清参数的性质

  • 会改变内容核心的:比如商品规格、文章分页,这类地址是真实存在的不同页面。
  • 只改变呈现顺序的:排序、视图切换,内容集合相同,只是排列不同。
  • 纯筛选的:颜色、尺寸、价格区间,介于前两者之间,取值少时有价值,取值多时容易散。
  • 追踪性质的:utm、来源标记、会话 ID,对内容没有任何影响,属于必须处理的一类。

分类的意义在于决定收口力度:追踪参数应当直接拦掉,排序参数适合做规范化,筛选参数需要按组合数量设个上限。

收口的几种做法

canonical 是最直接的一层

在页面头部指向不带参数的版本,等于告诉蜘蛛“这些变体请归到一个地址上”。它不阻止抓取,但能减少重复内容带来的不确定性。注意 canonical 要指向真实存在、能正常打开的 URL,如果指向一个重定向地址或者被 robots 挡住的地址,信号会打折。

robots.txt 与参数规则

有些搜索引擎支持在 robots.txt 里写参数处理规则,明确哪些参数可以忽略。但这不是所有爬虫都遵守的通用标准,写之前要看清楚支持范围。挡掉之后页面也就无法被抓取,如果这个参数组合未来可能成为有效落地页,就需要谨慎。

从链接源头减少暴露

比事后收口更省事的,是不生成这些链接。排序、筛选用表单提交或者按钮交互,链接本身指向不带参数的地址,蜘蛛就不会顺着这些地址爬散。但也要注意,如果这些内容对用户有价值,完全隐藏会影响它被发现的可能,需要在两端权衡。

Sitemap 里只放主版本

Sitemap 是主动推荐的通道,把带参数的变体塞进去,等于自己把抓取方向引向重复内容。只提交规范版本,让 Sitemap 和 canonical 说的是同一件事。

分面筛选页的边界

分面导航是最容易撑开抓取路径的地方。常见的处理方式有几种:限制可抓取的参数组合数量,超出范围的组合返回 404 或者加上 noindex;把多层筛选改成单层;对筛选结果页不做站内链接或者只保留少量入口。关键是一致:如果某个组合你在 Sitemap 里提交了,又在页面里 noindex,两边说法打架,效果就会互相抵消。

收口的目标不是让参数页全部消失,而是让蜘蛛把时间花在真正需要更新的 URL 上。判断标准可以简单一点:这个参数组合,有没有用户会从搜索结果点进来,并且看到不一样的内容。

怎么确认收口生效了

  • 抓取日志里带参数的请求占比有没有下降,下降之后主版本的抓取次数有没有上升。
  • 抽查几个变体地址,看返回的状态码、canonical 指向是否和预期一致。
  • 观察一段时间内被选择的版本是否稳定,如果今天选 A 明天选 B,说明信号还不够清楚。
  • 检查内链和 Sitemap 是否还在大量输出参数地址,源头没改,收口效果会被抵消。

参数问题很少能一次改完,通常要按类型分批处理,改完观察一段时间再决定下一步。先处理追踪参数这类最容易判断的,再处理筛选组合,改动幅度小一点,也更容易看出哪一步起了作用。