在蜘蛛池里批量拼連結时,顺手带上 utm_source、from、ref、時間戳之類的參數很常见,尤其是入口頁由程序動態生成的时候。這類連結被搜尋蜘蛛抓到之後,到底算一條還是好几條,是很多人關心的問题。
搜尋引擎按 URL 字符串去重,不按内容去重
搜尋蜘蛛在發現阶段面對的是一串 URL 文本,它不會先打開頁面、看完内容再判断“這個和刚才那個是同一個頁面”。所以嚴格来说,http://a.com/p?id=1 和 http://a.com/p?id=1&utm_source=x 是两個不同的 URL,預設都會被记入待抓取队列。
也就是说,入口頁里放了 100 條带不同參數的連結,理论上就會向抓取队列里推 100 條 URL,哪怕它們最终打開的是同一份内容。
搜尋引擎确實會做一部分參數归一化,但別把它当承诺
主流搜尋引擎對常见的、明顯無意义的參數(比如會话 ID、排序方式、部分广告跟踪參數)有一定的识別和归一化處理,可能合並抓取或降低抓取優先級。但這是基于它自己的判断,規則不公開、也會變化,站点侧無法保證某组參數一定被忽略。
结果就是:一部分參數被合並了,一部分没有,日誌里便會出現“同一路径、不同查询串被反复抓取”的現象。
對蜘蛛池入口頁的實际影响
- 抓取预算被稀释:本来可以用来抓真正目标 URL 的額度,被大量近似參數 URL 占掉。
- 重复内容识別压力:目标站同一份内容被多個 URL 呈現,如果 canonical 没做好,容易出現版本漂移。
- 日誌失真:統計“入口頁带来了多少次抓取”时數字虚高,排查抓取断点也更容易誤判。
- 指向性被分散:同一目标虽拿到多條入鏈,但每條對應 URL 不同,信号被摊薄。
可以在入口頁层面做的處理
- 入口頁輸出的連結尽量是干净的目标 URL,跟踪參數放到服務端日誌或跳轉记錄里,不寫進 href。
- 确實要带參數时,固定參數顺序、大小寫和编碼方式,避免同义寫法产生多條 URL。
- 如果參數只影响展示、不影响内容,在目标頁用 canonical 指向無參數版本。
- 用 robots.txt 或 meta robots 處理大批無意义參數路径时要想清楚:Disallow 會阻止發現,不會把抓取轉移過去。
- 在站長平台里配置參數處理規則(如果平台支持),比把規則寫在入口頁注释里更可控。
一句话原則:能不让搜尋蜘蛛看到多余參數,就不要让它看到;能靠服務端跳轉完成的統計,就不要靠改 href 完成。
怎么驗證有没有被抓成多條
把自己当成运维来看:拉一段入口頁的訪問日誌,按“路径 + 查询串”分组,看同一路径下是否出現大量只差一两個參數的 URL,以及這些 URL 各自的抓取频次和返回碼。如果同一内容的參數 URL 占了入口頁抓取量的一大块,就說明參數没有按预期被归一化,需要回到入口頁模板去改輸出逻辑。