同一段内容因為 URL 參數不同,被蜘蛛当成多個頁面抓取,是抓取资源被稀释的常见原因之一。參數本身並不“违規”,問题在于它會成倍放大 URL 空間,让蜘蛛把有限的抓取額度花在重复入口上。
參數為什么會制造多個入口
蜘蛛的 URL 發現本质上是一套去重後的排队机制。它會把不同字符串视為不同 URL:?id=123 和 ?id=123&ref=home 在字符串层面是两個地址。只要頁面里存在指向這两種形式的連結,蜘蛛就會分別入队、分別抓取、分別判断内容。
跟踪參數、排序參數、篩選參數是常见的三類。它們通常由前端脚本或第三方工具動態附加,站点运营者自己未必清楚頁面最终會輸出哪些連結。
參數類型與重复風險
- 跟踪類:utm_source、from、ref、spm 等,只影响来源标记,不影响頁面内容,重复度最高。
- 排序類:sort、order、by,同一列表頁可能产生數十個變体,内容差异极小。
- 篩選類:價格区間、品牌、颜色,组合容易爆炸,形成大面积的近似頁面。
- 會话類:sessionid、sid,通常随訪問者變化,是最需要清理的一類。
收敛的几種做法
- 生成連結时就不带跟踪參數。把參數寫在跳轉逻辑里,而不是寫進 href。
- 在 robots.txt 里對明确的參數路径做拦截,但要注意拦截後蜘蛛仍可能通過其他入口發現该 URL,只是不再抓取。
- 用 canonical 指向無參數版本,帮助蜘蛛归集,不要指望它立刻生效。
- 對篩選類頁面設定可抓取的邊界,例如只放開有實际需求的组合,其余不輸出連結。
- 在 Sitemap 中只保留規范化後的地址,不要混入带參數的變体。
真正的收敛不是把參數藏起来,而是让蜘蛛在頁面里看不到多余入口。連結不出現,抓取自然减少。
與内鏈、Sitemap 的配合
參數問题往往不在首頁,而在列表頁、聚合頁和分頁連結里。核查时可以按路径分层看:
- 導航和面包屑是否輸出了带參數的地址;
- 列表頁翻頁連結是否带上了 sort 或 filter 參數;
- Sitemap 中的 URL 是否與頁面内鏈指向的規范地址一致;
- 站内搜尋结果的連結是否被其他頁面直接引用。
如果頁面里同时存在带參數和不带參數两種連結,蜘蛛先抓哪一個並不完全可控。與其猜测優先級,不如让頁面只輸出一種形式。
用日誌核對收敛效果
參數收敛是否有效,看日誌最直接。可以按天統計蜘蛛請求中带參數 URL 的占比,观察改動前後的變化。需要注意的是:
- 已经入队的舊參數 URL 可能還會被抓取一段時間,短期内出現波動是正常的;
- 如果服務器對參數地址返回 200 且内容完整,蜘蛛没有理由放弃;
- 若參數地址返回 301 到規范地址,抓取信号會更清晰,但跳轉本身也消耗资源。
服務器稳定性同样是變量。当站点响應變慢或出現 5xx 时,蜘蛛會降低抓取节奏,參數 URL 的清理也會變慢,看起来像“没有效果”,實际是抓取總量在下降。
一份可执行的核對清單
- 抓取首頁與主要列表頁的 HTML,搜尋 ? 字符,列出所有带參連結。
- 把參數按類型归類,标出哪些影响内容、哪些只是标记。
- 確認 canonical 與内鏈指向的是同一個規范地址。
- 检查 Sitemap 是否只收錄規范地址。
- 改動後连續观察两到四周的日誌,看带參請求比例是否下降。
參數收敛不是一次性工作,模板改版、活動頁上线、第三方脚本更新,都可能重新引入新的參數入口。把它当成例行核對項,比当成一次性清理更實际。