常见問题

入口頁里的目标連結带一堆參數:搜尋蜘蛛會当成同一個頁面還是几個新頁面

入口頁里的目标連結常带 ?id=、?ref=、utm 等參數,同一目标挂不同參數时,URL 字符串就不一样。本文說明蜘蛛為什么會先当作不同 URL 抓取、哪些參數最容易制造重复副本、對抓取节奏和日誌的影响,以及入口頁連結该怎么统一寫法。

常见問题

入口頁里的目标連結带一堆參數:搜尋蜘蛛會当成同一個頁面還是几個新頁面

做入口頁时经常遇到這種情况:目标連結不是干净的主域加路径,而是拖着一串參數,例如 ?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 的額度,被花在了同一批内容的副本上。

另一层影响在日誌。你會看到同一個路径被反复請求,參數各不相同,很容易誤判成蜘蛛在重复抓同一頁,或者誤以為入口頁被频繁回訪。核對日誌时最好先按路径去參數归並,再統計次數,否則结论會偏。

還有一点常被忽略:蜘蛛發現新連結本来就不是即时的事。把額度消耗在參數副本上,真正新頁面的首次抓取时点可能被往後推,而這部分延迟往往比多抓几次重复頁更难察觉。

入口頁連結可以怎么统一

  1. 入口頁里指向目标的連結,统一用不带無關參數的干净 URL。統計需求尽量交给跳轉或前端埋点處理,不要直接改連結本身。
  2. 目标頁做好 canonical,把參數版本指回主 URL。前提是這些參數頁面允许被抓取,否則 canonical 也讀不到。
  3. 排序、篩選類參數组合尽量不全量鏈出,控制可枚举的范围,避免组合爆炸。
  4. 定期對照日誌,看 目标路径? 形式的請求占比,判断是否還有大量參數副本在消耗抓取。
  5. 不要指望用 robots.txt 關掉參數。Disallow 會同时阻止抓取,蜘蛛连頁面上的 canonical 都看不到,重复判断反而更慢。
參數本身没有對错,問题在于入口頁的連結寫法是否让同一批内容以多種 URL 形式被同时报出去。判断标准很简單:這條參數會不會改變頁面正文?不會,就尽量不要出現在入口頁的連結里。

小结

搜尋蜘蛛没有能力在拿到連結的一刻就知道两個參數 URL 指向同一頁,它只能先抓、再比、再猜。入口頁連結统一成干净 URL、目标頁配好 canonical、日誌按路径归並来核對,是三件成本不高但能减少無效抓取的事。至于收錄和排名,參數處理只是众多變量之一,能做的是把明顯浪費的部分收掉,不必期待某一項改動带来确定结果。