很多站点的 URL 數量增長並不是因為内容變多,而是因為同一批内容被參數拆成了多個版本。列表頁加上篩選、排序、分頁、视图切換,再叠加會话 ID 或渠道追踪參數,一個分類可能派生几百個地址。蜘蛛沿内鏈爬行时無法判断這些地址是否代表不同内容,只能逐個訪問,抓取額度就這样被相似頁面摊薄。
參數扩散通常從哪几個口子進来
- 篩選與排序:颜色、尺碼、價格升序這類條件组合,條件越多组合越多。
- 分頁與视图:分頁參數與列表视图參數同时出現,形成二维矩阵。
- 會话與追踪:會话 ID、渠道来源、外部跳轉标记等,同一個頁面被反复生成新地址。
- 站内搜尋结果頁:關鍵詞被外部連結或爬虫试探地址带入。
- 内鏈本身:模板里的按價格排序、查看全部等連結直接輸出带參地址,等于主動把參數地址递给蜘蛛。
先做分類,再决定收敛方式
不是所有參數頁都要清理。判断标准可以看两点:這個地址是否有稳定的检索需求,以及它是否提供了不重复的内容。
建议保留發現入口的參數頁
- 有明确检索意图、且頁面正文确實随參數變化,例如品牌篩選後展示不同的商品集合。
- 分頁序列,它承担着把深层内容暴露给蜘蛛的作用。
建议收敛的參數頁
- 纯排序、纯视图切換,輸出内容與預設顺序基本一致。
- 會话 ID、追踪參數、站内搜尋關鍵詞。
- 多條件篩選的自由组合,尤其是條件數量超過两三個的。
核對顺序:從日誌到内鏈
- 在訪問日誌里按路径統計,筛出带問号的請求,按參數名分组,看每個參數名對應的 URL 數量級。
- 對比被訪問的參數地址數量與實际产生点击的地址數量,差距大的參數優先處理。
- 检查模板輸出,確認列表頁、面包屑、相關推荐等位置是否生成了带參連結。
- 检查 Sitemap 是否把參數地址也提交進去,提交了就要同步調整。
- 確認站内跳轉與分頁連結在首屏 HTML 中可被直接讀到,不依赖前端渲染後追加。
收敛手段與各自的副作用
canonical 指向規范地址
适合同一内容多參數的情况。注意 canonical 只在頁面被訪問後才生效,蜘蛛已经訪問過的參數地址仍會消耗一次抓取;如果參數地址數量极大,單靠 canonical 收敛偏慢。
robots.txt 屏蔽特定參數
對组合爆炸的參數比較有效,但要清楚被屏蔽的地址不會被抓取,頁面上的連結也不會被繼續跟踪。如果某個參數頁既被屏蔽又是唯一入口,深一层内容可能失去發現路径。建议只屏蔽明确的會话、追踪與排序類參數,並避免屏蔽分頁。
内鏈统一指向無參地址
這是最省事的一步。預設排序、預設视图、預設篩選狀態的連結都輸出無參形式,把带參地址留给用戶点击後由前端生成。這样蜘蛛看到的連結集合會明顯收窄。
把篩選结果放到交互层
如果篩選结果依赖前端渲染,要確認首屏 HTML 里仍有可抓取的分頁或分類入口,否則會變成入口缺失的另一類問题。
參數收敛的目标不是让蜘蛛一個參數頁都不訪問,而是让它把時間花在真正有差异的地址上。收敛前後都可以用日誌里的參數請求占比做對比,看變化是否符合预期。
复查时看什么
- 參數請求在總抓取中的占比是否下降,下降的是不是目标參數。
- 分頁與分類入口的抓取是否保持稳定,没有因屏蔽規則被誤伤。
- Sitemap 中是否還残留參數地址。
- 被保留的參數頁是否仍能正常返回内容,没有因為規則調整返回 403 或空壳頁。
參數治理没有一次到位的做法,站点结构、篩選组件和运营活動都會不断产生新參數。把參數名登记成清單,新增功能上线前先確認它會不會生成新的 URL 维度,比事後清理更省力。