參數本身不是問题,组合起来才是
列表頁加一個排序、勾一個篩選條件,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 一刀切地屏蔽所有带問号的地址,這會把正常分頁也挡在门外。更稳妥的做法是按參數用途分開處理。
- 追踪參數:站内連結不要輸出。外鏈带来的带參 URL,如果确定只用于統計,可以在服務端做一次干净重定向,或者让頁面 canonical 指向無參版本。
- 排序參數:内鏈只保留一種預設排序,其他排序方式交给用戶交互触發,不寫成可抓取的連結。必须存在的排序頁,可以统一 canonical 到預設排序版本。
- 分面篩選:只放行有實际搜尋需求的核心组合,其余组合不生成内鏈,或用 noindex, follow 保留連結價值而不让頁面本身進入索引。
- 會话标识:不要出現在 URL 里,改放在 Cookie 或請求头中。已经出現在 URL 的,應尽快換成規范寫法。
- 分頁參數:保留可抓取,每頁 canonical 指向自己,不要全部指向第一頁,否則後面的内容可能不再被回爬。
收敛之後要回头驗證
調整完成後,观察一段時間日誌:參數變体的抓取次數是否下降,列表里的深层頁面是否被更多地取回。如果有頁面因為 canonical 改動而長時間不再出現,說明收得過头了,需要把其中有獨立價值的地址重新放開。參數治理不是一次性動作,随着运营活動增加,新的追踪參數和篩選维度會不断出現,最好在連結生成的模板层面就提前约束。
蜘蛛對參數没有天然敌意,它只是按連結走。站点輸出什么連結,它就會去抓什么地址。