一個商品列表頁,看起来只有一條 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,說明站点在持續通過内鏈把這些地址递给蜘蛛。這個數字比主观判断可靠,也比看索引量更直接。
几種收口方式,按影响面從大到小
- 改内鏈:列表頁的篩選改成表單提交或按钮交互,不用可爬連結铺開全部组合,只保留少量固定入口。
- 固定參數輸出顺序:同一组條件在模板里按统一顺序拼接,先消掉同义 URL。
- robots.txt 收线:對明确無用的參數模式做 Disallow。注意它只阻止抓取,不阻止已收錄頁面繼續出現在结果里。
- 規范化與自指:無參數版本自指,參數版本指向主版本,减少归並歧义。
- 服務端狀態碼:對無效或超范围的參數组合返回 404 或 410,不要一律返回 200 的空列表頁。
收紧參數 URL 之前,先確認這些地址没有外部連結和自然流量。否則收得越彻底,被掐断的入口也越多。
小结
參數 URL 的問题不在于蜘蛛抓不抓,而在于它抓得太多却收获太少。處理顺序建议是:先確認哪些參數必须存在,再從内鏈下手减少可爬组合,最後用規范化和服務端返回碼收尾。做完之後回到日誌里核對一次抓取分布,看真正需要更新的頁面有没有拿到更多訪問,這比看工具里的一個數字更能說明問题。