做入口页时经常遇到这种情况:目标链接不是干净的主域加路径,而是拖着一串参数,例如 ?id=123、?ref=entry01、?utm_source=xxx、?page=2&sort=new。有人在同一入口页里给同一目标放了好几个参数版本,也有人为了方便统计,给每个入口页的链接都配了不同的 ref 值。这些链接在搜索蜘蛛眼里算一个页面还是几个页面,会直接影响它愿意在入口页上花多少时间。
参数不同,URL 就不同
对搜索蜘蛛来说,URL 首先是字符串。它拿到 ?ref=entry01 和 ?ref=entry02 这两条链接时,第一反应是这是两个待抓取的地址,并不清楚背后是同一篇文章。只有当它分别请求过、拿到返回内容,发现正文几乎一致,才可能推断为重复。也就是说,判断发生在抓取之后,而不是之前。入口页里每个目标都挂不同参数,等于把同一批内容以成倍数量的 URL 报给了蜘蛛。
哪几类参数最容易制造副本
- 来源标记类:utm_ 系列、ref、from、channel。这类参数只为统计服务,不影响正文,但每换一个入口页值就变一次。
- 会话与身份类:sessionid、token、临时用户标识。同一个人每次访问都可能不同,是重复 URL 里最难收拾的一类。
- 排序、筛选、分页类:?sort=price&color=red&page=2 这种组合,页数一多数量就会膨胀。
- 写法差异类:大小写不同、带不带尾斜杠、index.php 有没有出现。严格说不算参数,但效果接近,都会生成新的 URL 字符串。
对入口页抓取节奏的实际影响
抓取额度是有限的。假设入口页里 100 条链接指向 20 个目标,每个目标挂了 5 个参数版本,蜘蛛要做的是 100 次地址级判断,而不是 20 次。多出来的八十来次请求不一定有额外收获,却实实在在占用了它在这一段时间里的抓取量。原本用来发现新 URL 的额度,被花在了同一批内容的副本上。
另一层影响在日志。你会看到同一个路径被反复请求,参数各不相同,很容易误判成蜘蛛在重复抓同一页,或者误以为入口页被频繁回访。核对日志时最好先按路径去参数归并,再统计次数,否则结论会偏。
还有一点常被忽略:蜘蛛发现新链接本来就不是即时的事。把额度消耗在参数副本上,真正新页面的首次抓取时点可能被往后推,而这部分延迟往往比多抓几次重复页更难察觉。
入口页链接可以怎么统一
- 入口页里指向目标的链接,统一用不带无关参数的干净 URL。统计需求尽量交给跳转或前端埋点处理,不要直接改链接本身。
- 目标页做好 canonical,把参数版本指回主 URL。前提是这些参数页面允许被抓取,否则 canonical 也读不到。
- 排序、筛选类参数组合尽量不全量链出,控制可枚举的范围,避免组合爆炸。
- 定期对照日志,看 目标路径? 形式的请求占比,判断是否还有大量参数副本在消耗抓取。
- 不要指望用 robots.txt 关掉参数。Disallow 会同时阻止抓取,蜘蛛连页面上的 canonical 都看不到,重复判断反而更慢。
参数本身没有对错,问题在于入口页的链接写法是否让同一批内容以多种 URL 形式被同时报出去。判断标准很简单:这条参数会不会改变页面正文?不会,就尽量不要出现在入口页的链接里。
小结
搜索蜘蛛没有能力在拿到链接的一刻就知道两个参数 URL 指向同一页,它只能先抓、再比、再猜。入口页链接统一成干净 URL、目标页配好 canonical、日志按路径归并来核对,是三件成本不高但能减少无效抓取的事。至于收录和排名,参数处理只是众多变量之一,能做的是把明显浪费的部分收掉,不必期待某一项改动带来确定结果。