搜尋抓取

篩選參數與蜘蛛抓取:一個列表頁能组合出多少條 URL

列表頁加上排序、篩選、视图切換後,URL 會以乘法方式膨胀。本文說明這些參數 URL 是怎么被蜘蛛走到的、canonical 為什么止不住抓取,以及從内鏈、參數顺序、服務端狀態碼几個层面收口的做法。

搜尋抓取

篩選參數與蜘蛛抓取:一個列表頁能组合出多少條 URL

一個商品列表頁,看起来只有一條 URL。但加上排序、價格区間、颜色、品牌、每頁條數、视图模式之後,它能生成的 URL 數量會變成乘法級別。這些 URL 大多不是人為放的,而是頁面自己長出来的。蜘蛛顺着這些連結走,就會把大量時間花在近似重复的頁面上。

參數组合是怎么把 URL 數量放大的

假设一個列表頁有 5 個篩選维度,每個维度有 4 個可選值,再加上 3 種排序方式。理论上可组合出的路径數量是 4 的五次方再乘 3,也就是三千多條。實际被連結出来的可能没這么多,但只要頁面把目前篩選狀態渲染成可点击的連結,蜘蛛每走一步就會看到新的一批。

更麻烦的是顺序問题。同一组篩選條件,參數按不同顺序拼出来就是两條 URL:?color=red&size=m?size=m&color=red 在蜘蛛眼里是两個地址。如果模板輸出的顺序不固定,重复路径還會再翻一倍。

蜘蛛遇到參數 URL 时的几種反應

  • 抓取:頁面能返回 200、有獨立内鏈指向,蜘蛛通常會走這一趟。
  • 归並:内容高度相似的參數頁,可能被抓到但不進入索引,白花了配額。
  • 排队:一部分 URL 進入队列後長期不被訪問,成為待處理积压。

這三件事合在一起的结果是:蜘蛛的抓取額度被參數頁消耗,真正需要更新的詳情頁、活動頁反而排到了後面。抓取額度不是無限的,它更像一份按天發放的预算。

canonical 不是萬能止血带

很多人第一反應是给參數頁加 canonical,指向無參數版本。canonical 表達的是「我更希望你把權重算到這一條」,它並不阻止蜘蛛来訪。只要參數頁本身返回 200、頁面上還有内鏈指向它,蜘蛛照样會走。canonical 管的是收錄归並,不是抓取路径。

先分清哪些參數是必须的

  • 追踪參數:utm、来源标记等,對頁面内容没有影响,完全可以不生成可爬連結。
  • 排序與视图參數:預設排序之外的顺序,多數對用戶價值有限。
  • 篩選參數:如果组合出的頁面确實有獨立内容和搜尋需求,可以保留一部分常用组合。
  • 分頁參數:通常需要保留,但要保證分頁連結是可抓取的普通連結,而不是脚本按钮。

從日誌里看參數 URL 的實际占比

把蜘蛛請求按「是否带問号」分两類,統計各自的比例,再看带參數的請求集中在哪几個參數名上。如果某些參數被反复抓取且長期返回 200,說明站点在持續通過内鏈把這些地址递给蜘蛛。這個數字比主观判断可靠,也比看索引量更直接。

几種收口方式,按影响面從大到小

  1. 改内鏈:列表頁的篩選改成表單提交或按钮交互,不用可爬連結铺開全部组合,只保留少量固定入口。
  2. 固定參數輸出顺序:同一组條件在模板里按统一顺序拼接,先消掉同义 URL。
  3. robots.txt 收线:對明确無用的參數模式做 Disallow。注意它只阻止抓取,不阻止已收錄頁面繼續出現在结果里。
  4. 規范化與自指:無參數版本自指,參數版本指向主版本,减少归並歧义。
  5. 服務端狀態碼:對無效或超范围的參數组合返回 404 或 410,不要一律返回 200 的空列表頁。
收紧參數 URL 之前,先確認這些地址没有外部連結和自然流量。否則收得越彻底,被掐断的入口也越多。

小结

參數 URL 的問题不在于蜘蛛抓不抓,而在于它抓得太多却收获太少。處理顺序建议是:先確認哪些參數必须存在,再從内鏈下手减少可爬组合,最後用規范化和服務端返回碼收尾。做完之後回到日誌里核對一次抓取分布,看真正需要更新的頁面有没有拿到更多訪問,這比看工具里的一個數字更能說明問题。