搜索抓取

URL 参数与抓取入口收敛:跟踪参数和排序参数对蜘蛛发现路径的影响

同一内容因参数不同被当成多个 URL 抓取,会稀释抓取资源。本文梳理跟踪、排序、筛选、会话四类参数的重复风险,给出生成本身不带参、canonical 归集、Sitemap 只留规范地址等收敛做法,以及用日志核对效果时需要注意的波动与服务器因素。

搜索抓取

URL 参数与抓取入口收敛:跟踪参数和排序参数对蜘蛛发现路径的影响

同一段内容因为 URL 参数不同,被蜘蛛当成多个页面抓取,是抓取资源被稀释的常见原因之一。参数本身并不“违规”,问题在于它会成倍放大 URL 空间,让蜘蛛把有限的抓取额度花在重复入口上。

参数为什么会制造多个入口

蜘蛛的 URL 发现本质上是一套去重后的排队机制。它会把不同字符串视为不同 URL:?id=123?id=123&ref=home 在字符串层面是两个地址。只要页面里存在指向这两种形式的链接,蜘蛛就会分别入队、分别抓取、分别判断内容。

跟踪参数、排序参数、筛选参数是常见的三类。它们通常由前端脚本或第三方工具动态附加,站点运营者自己未必清楚页面最终会输出哪些链接。

参数类型与重复风险

  • 跟踪类:utm_source、from、ref、spm 等,只影响来源标记,不影响页面内容,重复度最高。
  • 排序类:sort、order、by,同一列表页可能产生数十个变体,内容差异极小。
  • 筛选类:价格区间、品牌、颜色,组合容易爆炸,形成大面积的近似页面。
  • 会话类:sessionid、sid,通常随访问者变化,是最需要清理的一类。

收敛的几种做法

  1. 生成链接时就不带跟踪参数。把参数写在跳转逻辑里,而不是写进 href。
  2. 在 robots.txt 里对明确的参数路径做拦截,但要注意拦截后蜘蛛仍可能通过其他入口发现该 URL,只是不再抓取。
  3. 用 canonical 指向无参数版本,帮助蜘蛛归集,不要指望它立刻生效。
  4. 对筛选类页面设置可抓取的边界,例如只放开有实际需求的组合,其余不输出链接。
  5. 在 Sitemap 中只保留规范化后的地址,不要混入带参数的变体。
真正的收敛不是把参数藏起来,而是让蜘蛛在页面里看不到多余入口。链接不出现,抓取自然减少。

与内链、Sitemap 的配合

参数问题往往不在首页,而在列表页、聚合页和分页链接里。核查时可以按路径分层看:

  • 导航和面包屑是否输出了带参数的地址;
  • 列表页翻页链接是否带上了 sort 或 filter 参数;
  • Sitemap 中的 URL 是否与页面内链指向的规范地址一致;
  • 站内搜索结果的链接是否被其他页面直接引用。

如果页面里同时存在带参数和不带参数两种链接,蜘蛛先抓哪一个并不完全可控。与其猜测优先级,不如让页面只输出一种形式。

用日志核对收敛效果

参数收敛是否有效,看日志最直接。可以按天统计蜘蛛请求中带参数 URL 的占比,观察改动前后的变化。需要注意的是:

  • 已经入队的旧参数 URL 可能还会被抓取一段时间,短期内出现波动是正常的;
  • 如果服务器对参数地址返回 200 且内容完整,蜘蛛没有理由放弃;
  • 若参数地址返回 301 到规范地址,抓取信号会更清晰,但跳转本身也消耗资源。

服务器稳定性同样是变量。当站点响应变慢或出现 5xx 时,蜘蛛会降低抓取节奏,参数 URL 的清理也会变慢,看起来像“没有效果”,实际是抓取总量在下降。

一份可执行的核对清单

  1. 抓取首页与主要列表页的 HTML,搜索 ? 字符,列出所有带参链接。
  2. 把参数按类型归类,标出哪些影响内容、哪些只是标记。
  3. 确认 canonical 与内链指向的是同一个规范地址。
  4. 检查 Sitemap 是否只收录规范地址。
  5. 改动后连续观察两到四周的日志,看带参请求比例是否下降。

参数收敛不是一次性工作,模板改版、活动页上线、第三方脚本更新,都可能重新引入新的参数入口。把它当成例行核对项,比当成一次性清理更实际。