带參數的 URL 本身没有問题,問题在于參數可以自由组合。一個列表頁配上颜色、尺寸、排序方式、頁碼和追踪參數,理论上能生成成千上萬個地址。蜘蛛並不判断哪個更有價值,它只是沿着連結一路跟下去,抓取预算就這样被摊薄到大量相似頁面上。
參數為什么會让 URL 空間迅速膨胀
無參數时,一個列表頁只有一個地址;加上參數之後,每個可選項都對應一個新地址。更麻烦的是排列顺序:?color=red&size=m 與 ?size=m&color=red 在服務器看来往往是同一頁,對蜘蛛来说却是两個 URL。參數越多,重复组合增長得越快。
這類頁面通常内容高度相似,只有一小部分篩選结果有獨立價值。如果全部放開抓取,蜘蛛會把時間花在近似頁面上,真正需要更新的商品頁、文章頁反而排到後面。
先分清三類參數
追踪參數
utm_source、ref、from、spm 這類參數只服務于統計,不改變頁面内容。它們最容易制造重复 URL,也最應该被统一處理。常见做法是让服務器對带追踪參數的請求返回規范化地址,或在頁面里用 canonical 指向不带參數的版本。
篩選與排序參數
篩選參數是否放開,取决于篩選结果有没有獨立的搜尋需求。有明确需求的少數篩選组合可以保留並可被抓取;長尾组合更适合用 noindex 或 robots.txt 屏蔽,同时保證頁面上仍有正常的内鏈供用戶使用。
分頁參數
分頁頁面對發現新内容有帮助,但不需要無限翻下去。可以限制可抓取的最大頁碼,深层分頁用加载更多或按時間归档的方式替代。
让參數收敛的几種做法
- 固定參數顺序:在生成連結时统一按同一顺序拼接參數,减少同頁多址。
- 去掉預設值:預設排序、預設视图不必寫進 URL,只有用戶主動切換时才追加參數。
- 用路径代替參數:稳定的篩選维度可以改寫成路径,例如 /shoes/red/,语义更清晰,也便于單獨設定抓取策略。
- 正确處理 canonical:對内容相同的參數頁,canonical 指向主版本,但不要把所有篩選頁都指向列表首頁,那會让蜘蛛認為篩選頁没有價值。
- robots.txt 與 noindex 分工:完全不需要出現的结果用 robots.txt 屏蔽抓取;希望保留在索引外但仍需讀取的頁面用 noindex。两者混用时注意不要把需要抓取的頁面也挡住。
怎么判断參數有没有收敛
看服務器日誌里的參數分布,是最直接的方式。統計一段時間内蜘蛛請求的 URL 中,带參數的比例、重复组合的數量,以及抓取集中在哪些參數上。如果大量請求都落在排序和追踪组合上,說明邊界還需要再收紧。
同时观察站内連結:導航、篩選面板、排序控件生成的連結是否稳定。前端動態拼接參數时,顺序和預設值不一致,會让同一個頁面以多種形式進入抓取队列。
收敛參數的目标不是减少 URL 數量,而是让蜘蛛把有限的請求留给内容真正不同的頁面。
參數本身不是問题,缺少邊界才是。给追踪參數定規則、给篩選參數定范围、给分頁定上限,再配合 canonical 和日誌观察,抓取分布通常會慢慢回到更合理的狀態。這個過程需要几周時間,不要指望調整後立刻看到變化。