搜索蜘蛛认 URL,基本是“字符串级别”的
先把基础说清楚:搜索蜘蛛判断一条链接是不是新的,主要看 URL 字符串本身。参数不同、顺序不同、大小写不同,多数情况下就会被当成不同的 URL,它不会先判断“这两个链接其实指向同一个页面”再自动合并。
这意味着,在蜘蛛池入口页里每给目标链接换一个参数,就相当于多制造了一条待抓取 URL。抓取预算本来就是有限的,这些实际上指向同一内容的多余 URL,会分走原本可以给真正页面的抓取量。
入口页上最容易出问题的几类参数
- 追踪参数:utm_source、utm_medium、gclid、fbclid 这类,同一条链接换个投放渠道就变一条 URL。
- 会话与用户标识:sessionid、sid、uid,用户每访问一次就生成一个新值,等于无限产出 URL。
- 时间戳和随机数:为了“防缓存”加的 ?t=1710000000 或 ?r=abc,这类最容易把入口页变成 URL 生成器。
- 排序、筛选、分页:?sort=price&page=2 这种组合,数量会成倍膨胀。
- 参数顺序与大小写:?a=1&b=2 和 ?b=2&a=1 在字符串层面已经是两条 URL。
会带来哪些实际影响
- 抓取预算被稀释:同一条目标 URL 被反复抓,真正需要更新的页面反而排不上。
- 日志噪声变大:分析抓取效果时,同路径不同参数混在一起,很难判断到底抓到了什么。
- 内容相似页面堆积:如果这些参数 URL 返回了同样的内容,站点里就会出现大量近似重复页面。
- 发现效率下降:入口页上真正有价值的链接,被自己制造出来的参数链接挤到后面。
入口页可以怎么处理
- 从源头去掉无用参数:入口页输出的目标链接,能不带追踪码就不带。统计需求可以在服务端记录跳转,而不是写进 href。
- 把参数收敛成一条规范地址:确实需要参数的页面,尽量只保留影响内容的那几个,并统一固定顺序。
- 用 301 归并:带追踪参数的地址统一 301 到不带参数的规范版本,能减少重复 URL 的扩散。
- 谨慎使用 robots.txt 屏蔽:屏蔽可以阻止继续抓取,但已经抓过的 URL 一般还会留在索引里;而且入口页本身如果被屏蔽,目标链接也就发现不了。
- canonical 只是提示:它可以帮助搜索引擎理解哪条是规范版本,但不是强制指令,不能指望它解决所有参数问题。
几个容易踩的坑
- 入口页用 JavaScript 拼接参数,抓取端可能只看到基础 URL,也可能拿到拼接后的版本,结果不稳定。
- 为了“看起来多样”故意给每条链接加随机参数,这是自己给自己制造重复 URL。
- 把入口页本身也加了参数,导致入口页出现多个版本,反而分散了入口页自身的抓取。
怎么验证有没有出问题
最直接的办法是看服务器日志:把同一路径下不同参数的抓取次数拉出来对比,如果某个参数版本的抓取量明显偏高,基本可以确认是参数在制造重复 URL。其次,可以用站点的收录查询大致看看同路径不同参数的页面数量。如果参数版本占了很大比例,就该回头检查入口页的链接拼接逻辑。
需要提醒的是,参数处理只是影响抓取效率的一个环节。即使参数整理干净,目标 URL 能不能被收录,还要看内容质量、站点整体情况和其它发现渠道,不是改完参数就一定有变化。
参数本身不是问题,问题是在入口页这种靠链接发现 URL 的场景里,多一个参数往往就多一条待抓取 URL。把参数收敛干净,比事后补救更省事。