电商的篩選、资讯的标簽、房产的“区域+戶型+價格”、招聘的“城市+经驗+薪资”……這類頁面本身對用戶有價值,但如果每一個篩選组合都能生成一個可獨立訪問的地址,數量會呈乘法級增長。几萬個條目配上十来個篩選维度,理论上能拼出上千萬個 URL。蜘蛛一旦顺着這些連結往下爬,抓取预算很快被吃光,真正需要被發現的頁面反而排不上队。
參數组合為什么會失控
多數站点並不是主動生成了這么多地址,而是几個小問题叠加起来的结果:
- 連結是“活的”:篩選條件以可点击連結形式呈現,蜘蛛能一路点下去。
- 參數顺序不固定:?a=1&b=2 和 ?b=2&a=1 被视為两個地址。
- 空结果也返回正常頁:没有匹配項时仍然回 200,並展示一個空列表。
- 追踪參數混入:来源、渠道、會话标识被拼在正常連結後面,同一内容對應多個地址。
- 排序與分頁随意组合:同一批内容在多種排序下重复輸出。
這些情况單獨看都不算嚴重,叠在一起就會把站点的可抓取地址數量放大几個數量級。
一次實用的自查
1. 數一數真實存在多少地址
從站点日誌或服務器訪問记錄里,按路径前缀統計带查询參數的請求,看看哪些參數被請求得最多、哪些组合几乎没有流量。這一步不追求精确,只需要判断量級:是几百個還是几十萬個。
2. 检查參數顺序與預設值
手動訪問同一组篩選條件,把參數換個顺序、把預設值顯式寫進地址、把無關參數去掉,看看服務器是否把它們当成同一個頁面。如果返回内容完全一样但地址不同,就需要统一處理。
3. 處理空结果頁
篩選到没有结果时,頁面應明确告诉用戶和蜘蛛“這里没有内容”。較常见的做法是返回 404 或 410,或至少加上 noindex 與明确的提示文案,而不是輸出一個空列表還回 200。
4. 確認哪些组合值得保留
有搜尋量、有用戶需求的组合可以保留並做好标题與描述;纯机器拼接出来、無人訪問的组合則不必让它們進入抓取视野。
常见的收敛方式
- 限制可爬维度:只让第一层篩選生成可点击連結,後續條件通過脚本或表單提交,不产生可枚举的地址。
- 固定參數顺序:在服務端统一排序並去重,让同一组條件只對應一個地址。
- canonical 指向無參數版本:對排序、视图切換這類不影响主体内容的參數,把首選地址指回干净版本。
- robots.txt 屏蔽特定參數模式:注意這是禁止抓取而非禁止索引,若地址已被收錄,僅屏蔽抓取可能让頁面長期停留在舊狀態。
- 追踪參數统一跳轉:带渠道标识的地址用 301 跳到标准地址,避免同一内容多個入口。
收敛范围时要留有余地。一次屏蔽太多參數,可能把真正有流量、有用戶需求的篩選頁也挡在外面。建议先按參數逐個评估,再分批調整。
用日誌驗證结果
調整之後,間隔一段時間回看日誌:带參數的請求比例是否下降、核心頁面的抓取频次是否上升、空结果地址是否還在被反复訪問。如果某個被屏蔽的參數仍然频繁出現,通常是站内還有連結在指向它,需要從前端模板入手,而不只是改配置。
參數本身不是問题,失控的组合才是。把地址數量控制在一個可解释的范围内,蜘蛛才有机會把時間花在真正值得抓的内容上。