同一段内容因为 URL 参数不同,被蜘蛛当成多个页面抓取,是抓取资源被稀释的常见原因之一。参数本身并不“违规”,问题在于它会成倍放大 URL 空间,让蜘蛛把有限的抓取额度花在重复入口上。
参数为什么会制造多个入口
蜘蛛的 URL 发现本质上是一套去重后的排队机制。它会把不同字符串视为不同 URL:?id=123 和 ?id=123&ref=home 在字符串层面是两个地址。只要页面里存在指向这两种形式的链接,蜘蛛就会分别入队、分别抓取、分别判断内容。
跟踪参数、排序参数、筛选参数是常见的三类。它们通常由前端脚本或第三方工具动态附加,站点运营者自己未必清楚页面最终会输出哪些链接。
参数类型与重复风险
- 跟踪类:utm_source、from、ref、spm 等,只影响来源标记,不影响页面内容,重复度最高。
- 排序类:sort、order、by,同一列表页可能产生数十个变体,内容差异极小。
- 筛选类:价格区间、品牌、颜色,组合容易爆炸,形成大面积的近似页面。
- 会话类:sessionid、sid,通常随访问者变化,是最需要清理的一类。
收敛的几种做法
- 生成链接时就不带跟踪参数。把参数写在跳转逻辑里,而不是写进 href。
- 在 robots.txt 里对明确的参数路径做拦截,但要注意拦截后蜘蛛仍可能通过其他入口发现该 URL,只是不再抓取。
- 用 canonical 指向无参数版本,帮助蜘蛛归集,不要指望它立刻生效。
- 对筛选类页面设置可抓取的边界,例如只放开有实际需求的组合,其余不输出链接。
- 在 Sitemap 中只保留规范化后的地址,不要混入带参数的变体。
真正的收敛不是把参数藏起来,而是让蜘蛛在页面里看不到多余入口。链接不出现,抓取自然减少。
与内链、Sitemap 的配合
参数问题往往不在首页,而在列表页、聚合页和分页链接里。核查时可以按路径分层看:
- 导航和面包屑是否输出了带参数的地址;
- 列表页翻页链接是否带上了 sort 或 filter 参数;
- Sitemap 中的 URL 是否与页面内链指向的规范地址一致;
- 站内搜索结果的链接是否被其他页面直接引用。
如果页面里同时存在带参数和不带参数两种链接,蜘蛛先抓哪一个并不完全可控。与其猜测优先级,不如让页面只输出一种形式。
用日志核对收敛效果
参数收敛是否有效,看日志最直接。可以按天统计蜘蛛请求中带参数 URL 的占比,观察改动前后的变化。需要注意的是:
- 已经入队的旧参数 URL 可能还会被抓取一段时间,短期内出现波动是正常的;
- 如果服务器对参数地址返回 200 且内容完整,蜘蛛没有理由放弃;
- 若参数地址返回 301 到规范地址,抓取信号会更清晰,但跳转本身也消耗资源。
服务器稳定性同样是变量。当站点响应变慢或出现 5xx 时,蜘蛛会降低抓取节奏,参数 URL 的清理也会变慢,看起来像“没有效果”,实际是抓取总量在下降。
一份可执行的核对清单
- 抓取首页与主要列表页的 HTML,搜索 ? 字符,列出所有带参链接。
- 把参数按类型归类,标出哪些影响内容、哪些只是标记。
- 确认 canonical 与内链指向的是同一个规范地址。
- 检查 Sitemap 是否只收录规范地址。
- 改动后连续观察两到四周的日志,看带参请求比例是否下降。
参数收敛不是一次性工作,模板改版、活动页上线、第三方脚本更新,都可能重新引入新的参数入口。把它当成例行核对项,比当成一次性清理更实际。