搜尋抓取

參數化 URL 的抓取治理:哪些该放行,哪些该收敛

列表頁加一個排序、勾一個篩選,URL 就多出几個參數。對用戶是一次点击,對蜘蛛却是一批新地址。本文梳理追踪參數、排序參數、分面篩選與分頁參數各自该怎么處理,以及收敛後如何用日誌驗證效果,避免抓取预算耗在同内容的變体上。

搜尋抓取

參數化 URL 的抓取治理:哪些该放行,哪些该收敛

參數本身不是問题,组合起来才是

列表頁加一個排序、勾一個篩選條件,URL 就從 /list 變成 /list?sort=price&color=red&page=2。對用戶来说這是一次点击,對蜘蛛来说這是三個新地址。如果站点的内鏈把這些组合都暴露出来,URL 數量會按乘法增長,而内容差异可能只在一個價格排序上。

蜘蛛遇到參數 URL 时怎么處理

蜘蛛不會因為 URL 带問号就拒绝。它會先把新地址放進待抓取队列,抓回来之後再判断内容。判断依據通常是頁面主体是否與已有 URL 高度相似、canonical 指向哪里、返回狀態碼是什么。如果站点没有任何收敛信号,蜘蛛會逐步把參數變体当成獨立頁面,各自走一遍抓取流程。

常见的几類參數

  • 追踪參數:utm_source、gclid、fbclid 等,只用于統計,不影响頁面内容。
  • 排序參數:sort=price、order=desc,同一批商品換個顺序。
  • 分面篩選:颜色、尺碼、品牌、價格区間,两两组合就翻倍。
  • 會话與用戶标识:sessionid、uid,同一個人每次訪問都可能不同。
  • 分頁參數:page=2、offset=40,属于正常列表翻頁。

真正的問题在哪里

第一,抓取预算被分散。同一批内容被反复取回,用于發現新頁面的机會就少了。第二,canonical 指向混乱。參數頁如果不声明規范地址,蜘蛛只能自己判断,判断结果未必符合你的预期。第三,日誌和报告變难讀,几萬條 URL 里大部分是同一頁面的變体,真正没被發現的頁面反而被淹没。

分门別類地處理

不建议用 robots.txt 一刀切地屏蔽所有带問号的地址,這會把正常分頁也挡在门外。更稳妥的做法是按參數用途分開處理。

  1. 追踪參數:站内連結不要輸出。外鏈带来的带參 URL,如果确定只用于統計,可以在服務端做一次干净重定向,或者让頁面 canonical 指向無參版本。
  2. 排序參數:内鏈只保留一種預設排序,其他排序方式交给用戶交互触發,不寫成可抓取的連結。必须存在的排序頁,可以统一 canonical 到預設排序版本。
  3. 分面篩選:只放行有實际搜尋需求的核心组合,其余组合不生成内鏈,或用 noindex, follow 保留連結價值而不让頁面本身進入索引。
  4. 會话标识:不要出現在 URL 里,改放在 Cookie 或請求头中。已经出現在 URL 的,應尽快換成規范寫法。
  5. 分頁參數:保留可抓取,每頁 canonical 指向自己,不要全部指向第一頁,否則後面的内容可能不再被回爬。

收敛之後要回头驗證

調整完成後,观察一段時間日誌:參數變体的抓取次數是否下降,列表里的深层頁面是否被更多地取回。如果有頁面因為 canonical 改動而長時間不再出現,說明收得過头了,需要把其中有獨立價值的地址重新放開。參數治理不是一次性動作,随着运营活動增加,新的追踪參數和篩選维度會不断出現,最好在連結生成的模板层面就提前约束。

蜘蛛對參數没有天然敌意,它只是按連結走。站点輸出什么連結,它就會去抓什么地址。