搜尋抓取

參數化 URL 的抓取邊界:篩選、排序與追踪參數该收敛到哪一步

带參數的 URL 容易在组合中膨胀,把蜘蛛的抓取预算摊薄到大量相似頁面上。本文從追踪參數、篩選排序和分頁三類參數入手,說明怎样设定抓取邊界,並给出 canonical、robots.txt 與 noindex 的分工建议,以及用日誌判断收敛效果的方法。

搜尋抓取

參數化 URL 的抓取邊界:篩選、排序與追踪參數该收敛到哪一步

带參數的 URL 本身没有問题,問题在于參數可以自由组合。一個列表頁配上颜色、尺寸、排序方式、頁碼和追踪參數,理论上能生成成千上萬個地址。蜘蛛並不判断哪個更有價值,它只是沿着連結一路跟下去,抓取预算就這样被摊薄到大量相似頁面上。

參數為什么會让 URL 空間迅速膨胀

無參數时,一個列表頁只有一個地址;加上參數之後,每個可選項都對應一個新地址。更麻烦的是排列顺序:?color=red&size=m 與 ?size=m&color=red 在服務器看来往往是同一頁,對蜘蛛来说却是两個 URL。參數越多,重复组合增長得越快。

這類頁面通常内容高度相似,只有一小部分篩選结果有獨立價值。如果全部放開抓取,蜘蛛會把時間花在近似頁面上,真正需要更新的商品頁、文章頁反而排到後面。

先分清三類參數

追踪參數

utm_source、ref、from、spm 這類參數只服務于統計,不改變頁面内容。它們最容易制造重复 URL,也最應该被统一處理。常见做法是让服務器對带追踪參數的請求返回規范化地址,或在頁面里用 canonical 指向不带參數的版本。

篩選與排序參數

篩選參數是否放開,取决于篩選结果有没有獨立的搜尋需求。有明确需求的少數篩選组合可以保留並可被抓取;長尾组合更适合用 noindex 或 robots.txt 屏蔽,同时保證頁面上仍有正常的内鏈供用戶使用。

分頁參數

分頁頁面對發現新内容有帮助,但不需要無限翻下去。可以限制可抓取的最大頁碼,深层分頁用加载更多或按時間归档的方式替代。

让參數收敛的几種做法

  1. 固定參數顺序:在生成連結时统一按同一顺序拼接參數,减少同頁多址。
  2. 去掉預設值:預設排序、預設视图不必寫進 URL,只有用戶主動切換时才追加參數。
  3. 用路径代替參數:稳定的篩選维度可以改寫成路径,例如 /shoes/red/,语义更清晰,也便于單獨設定抓取策略。
  4. 正确處理 canonical:對内容相同的參數頁,canonical 指向主版本,但不要把所有篩選頁都指向列表首頁,那會让蜘蛛認為篩選頁没有價值。
  5. robots.txt 與 noindex 分工:完全不需要出現的结果用 robots.txt 屏蔽抓取;希望保留在索引外但仍需讀取的頁面用 noindex。两者混用时注意不要把需要抓取的頁面也挡住。

怎么判断參數有没有收敛

看服務器日誌里的參數分布,是最直接的方式。統計一段時間内蜘蛛請求的 URL 中,带參數的比例、重复组合的數量,以及抓取集中在哪些參數上。如果大量請求都落在排序和追踪组合上,說明邊界還需要再收紧。

同时观察站内連結:導航、篩選面板、排序控件生成的連結是否稳定。前端動態拼接參數时,顺序和預設值不一致,會让同一個頁面以多種形式進入抓取队列。

收敛參數的目标不是减少 URL 數量,而是让蜘蛛把有限的請求留给内容真正不同的頁面。

參數本身不是問题,缺少邊界才是。给追踪參數定規則、给篩選參數定范围、给分頁定上限,再配合 canonical 和日誌观察,抓取分布通常會慢慢回到更合理的狀態。這個過程需要几周時間,不要指望調整後立刻看到變化。