电商、房产、招聘這類站点,篩選器几乎是标配。颜色、尺寸、品牌、價格区間、排序方式、每頁條數、目前頁碼,每一項都可能變成一個 URL 參數。用戶点两下觉得方便,蜘蛛看到的却是一張不断分叉的地图。
參數為什么容易把 URL 空間撑大
單個參數並不可怕,麻烦的是组合。假设一個列表頁有 5 個篩選维度,每個维度 10 個可選值,理论组合就是 10 的 5 次方。再叠加排序和分頁,數量級還會繼續放大。更隐蔽的是,有些參數並不改變頁面主体内容,比如排序方式、每頁條數、来源追踪,但它們生成的 URL 各不相同。
蜘蛛在發現這些連結时,通常會先抓一部分。它不會因為連結存在就一定抓完,抓取资源始终有限。结果是:一部分參數 URL 被反复抓取,返回的却是和主列表几乎一样的内容;而真正需要更新的詳情頁、新上架頁面,反而排队更久。
蜘蛛面對參數 URL 时的几種典型反應
- 把參數顺序不同、取值不同的 URL 当作不同地址,分別進入抓取队列。
- 對内容高度相似的參數頁,只選其中一部分作為代表,其余可能被忽略或降權處理。
- 当參數组合看起来像無限生成时,蜘蛛可能降低對该目錄的抓取频率,连主列表頁也受影响。
- 带會话 ID 或時間戳的連結,每次訪問都产生新 URL,几乎不可能被完整抓取。
這些反應不一定是惩罚,更多是资源分配的自然结果。但對站点来说,效果類似:抓取预算被低價值 URL 占住。
哪些參數值得保留,哪些應该收掉
判断标准可以简單一些:這個參數 URL 有没有獨立的内容價值,有没有用戶會直接搜尋並使用它。
- 倾向保留:有明确搜尋需求的篩選组合,例如品牌加品類、城市加区域;這些頁面有獨立标题、描述和稳定内鏈。
- 倾向收掉:排序參數、每頁條數、视图切換、打印版本、来源追踪、會话标识、無意义的空參數。
- 需要观察:價格区間、评分等组合,數量可控且有搜尋量时可以保留一部分。
常见處理方式與它們的副作用
robots.txt 屏蔽參數
直接屏蔽带參數的目錄,能减少抓取,但也會让蜘蛛無法發現该目錄下可能存在的有價值頁面。屏蔽的是抓取,不是索引,已被外部連結指向的 URL 仍可能出現在结果里,只是内容抓不到。
canonical 指向無參數版本
這是常见做法,但 canonical 是提示而非指令。如果參數頁内容确實不同,或者站内大量連結都指向參數頁,效果會打折扣。
對篩選連結加 nofollow
能减少爬虫顺着篩選繼續走的路径,但也可能让蜘蛛错過藏在篩選下的新頁面。更适合用在纯排序、纯视图切換這類連結上。
篩選结果改用 JS 或接口加载
蜘蛛不一定會执行所有交互,拿不到連結也就不會進入抓取队列。對需要被發現的頁面,最好仍保留可抓取的静態連結入口。
從日誌和搜尋控制台看是否该干预
不要凭感觉判断。先看服務器日誌里參數 URL 的占比、狀態碼和响應内容。如果大量參數 URL 返回 200 但内容重复,或者同一组參數被反复抓取,就值得處理。再看搜尋控制台的抓取統計和頁面分组,观察參數頁是否占用了大量抓取請求。
處理顺序建议從影响最大的參數開始:先解决會话 ID、追踪參數這類每次變化的值,再處理排序和视图切換,最後才考虑是否给篩選组合做静態化。
一個務實的原則
重要内容尽量有一個稳定、無參數、可被内鏈指向的地址。參數用来增强体驗,而不是成為唯一入口。URL 空間不需要一次清干净,但要让蜘蛛把有限的抓取次數花在會更新、有人搜尋的頁面上。
參數不是越多越好,也不是一律屏蔽。關键是让每個被抓取的 URL 都有存在的理由。