很多站点的篩選功能是從用戶体驗出發设計的:按價格、地区、品牌、時間排序,点几下就能缩小范围。但從抓取角度看,這些篩選组合會生成大量參數連結,其中相当一部分指向没有内容的空结果頁。如果不做任何约束,蜘蛛會把這些组合当成正常頁面反复抓取,既消耗服務器资源,也让真正需要被發現的栏目頁、詳情頁得不到足够的抓取机會。
篩選連結為什么容易失控
問题通常出在三個地方。
- 组合爆炸。五個篩選項,每個三到十個取值,理论上就能拼出成千上萬個地址,而站内實际有内容的组合可能只有几十個。
- 空结果也返回 200。篩選後没有對應内容,頁面却照样返回正常狀態碼,正文位置寫一句“暂無相關结果”,蜘蛛無法判断這是有效頁面還是空壳。
- 參數顺序不固定。同样的篩選條件,因為点击顺序不同生成了不同的參數排列,同一批结果出現多個地址,權重被摊薄。
自查清單
- 打開篩選功能的實际連結,確認參數是否稳定:同一组條件反复操作几次,看地址是否一致。
- 检查空结果頁的返回碼。没有内容时更合理的做法是返回 404 或 410,而不是 200。
- 看排序類參數(sort、order、page_size 之類)是否被当成獨立頁面。這類參數没有新增内容,一般不需要單獨被抓取。
- 確認篩選與分頁叠加时的表現,例如“篩選條件 + 第 8 頁”。多數情况下這類深层组合可以不必開放抓取。
- 检查頁面 head 里的 canonical 指向哪里。篩選结果頁通常應指向對應的分類或栏目主地址,而不是自我指向。
- 確認内鏈是否主動生成大量篩選入口。如果模板在每個列表頁都輸出几十個篩選連結,抓取预算會被快速消耗。
三種常见的處理思路
不同站点規模不同,不一定要用同一種做法,可以先選一種,观察日誌後再調整。
一、限制可抓范围
在 robots.txt 中屏蔽带特定參數的地址,或對篩選連結加 nofollow。這種方式简單直接,但要注意別把有内容的頁面一起挡掉,規則最好按參數前缀精确书寫。
二、收敛地址
让同一组篩選條件始终生成同一個規范地址,參數按固定顺序排列,去掉没有實际作用的空參數。同时把篩選结果頁的 canonical 指回上級栏目頁,减少重复。
三、做有價值的落地頁
如果某些篩選组合确實有搜尋需求,比如“地区 + 品類”,可以把它們固定成静態地址,配上獨立的标题、描述和一段說明文字,作為正式栏目运营,而不是让它停留在動態參數狀態。
判断标准可以简單一点:這個地址如果被用戶單獨分享出去,是否值得打開?如果答案是否定的,它大概率也不需要被蜘蛛單獨抓取。
怎么驗證效果
調整之後不要只看当天,建议观察两到四周。可以對比服務器日誌里带參數地址的抓取次數是否下降,詳情頁和栏目頁的抓取占比是否上升;再抽样查一下之前收錄的空结果頁,看是否逐步登出索引。如果發現某些參數被屏蔽後,對應的有效栏目也跟着掉抓取,就要回头检查規則是不是寫得太宽。
篩選參數本身不是問题,問题在于让它自由生長。把參數范围、返回碼、canonical 這三件事定下来,再配合日誌观察,抓取會稳定很多。