不少站点在導航和内鏈上做得挺規矩,却在两個不太起眼的入口漏出大量地址:站内搜尋和列表篩選。用戶在搜尋框里敲一句话、在列表頁勾几個條件,站点就會生成一個新的 URL。這些地址對訪客是便利,對蜘蛛却可能是成倍的抓取消耗。
問题通常從哪来
站内搜尋和篩選的共同点是,地址由用戶輸入决定,组合近乎無限。如果站点不加任何约束,蜘蛛顺着頁面上的一條搜尋结果連結,就能一路爬出成千上萬個带參數的地址。它們大多内容稀疏、彼此高度相似,甚至只是同一批结果的排序變化。
後果比較直接:抓取预算被摊薄,真正需要更新的栏目頁和詳情頁反而迟迟等不到抓取;日誌里塞满參數地址,排查真實問题时噪声很大;如果搜尋無结果时頁面還返回 200,更容易被当成正常頁面處理。
站内搜尋頁先做三件事
- 限制入口:搜尋框和搜尋按钮不需要被蜘蛛跟随,連結可用 rel="nofollow",或改為表單提交;搜尋结果頁本身不要放進導航和頁脚。
- 處理空结果:查询無结果时返回明确的空狀態頁面,並给出可用的替代入口,不要让它返回 200 而正文近乎空白。
- 規范地址:搜尋结果统一走固定的路径模式,例如 /search?q=,避免多種拼寫方式長期並存。
如果站内搜尋确實有獨立價值,比如品牌词查询能带来稳定訪問,可以單獨保留少量高质量入口,但要和全站抓取規則分開考虑,別让整條搜尋路径都敞開。
篩選參數的處理思路
能收敛的就收敛
- 把篩選條件的取值固定成有限集合,比如分類、品牌、價格区間,让可生成的组合數量可控。
- 對排序、分頁等纯展示參數做统一處理,常见做法是用 canonical 指向不带這些參數的基准地址,或在 robots.txt 中统一屏蔽排序參數。
- 對多條件叠加的地址,考虑只让單條件頁面可被抓取,组合地址交给用戶現场使用。
不能收敛就明确邊界
有些站点的篩選维度天然很多,硬性收敛會伤到使用体驗。這时至少要做到:參數顺序统一、大小寫统一、空參數不生成新地址、超出范围的參數值返回合适的错誤狀態。規則越清晰,蜘蛛越不容易在同一個结果集上反复打轉。
一份可执行的自查清單
- 打開服務器日誌,筛出带查询參數的請求,看數量和占比,以及是否集中在大批相似地址上。
- 在站内搜尋框輸入几個常见词,观察生成的地址格式是否一致,無结果时返回什么狀態碼。
- 在列表頁逐一点击篩選條件,確認參數组合有没有無限扩展的迹象。
- 检查這些頁面的 title 和 description 是否只把參數原样塞進去,若是,說明模板需要單獨處理。
- 確認 robots.txt、canonical 和分頁規則之間不打架,避免既屏蔽又被内鏈大量指向。
- 抽查站内搜尋頁是否出現在站点地图或導航里,如果有,评估是否该移除。
观察一段時間再調整
規則上线後不要只看当天資料。建议连續观察两三周的抓取日誌:參數地址的請求量是否下降,核心栏目的抓取频次是否回升,索引數量有没有異常波動。調整往往需要小步试错,而不是一次性把參數全部關掉。有些篩選頁本身带着真實需求,粗暴處理反而會损失訪問。
站内搜尋和篩選是服務訪客的功能,不是给人爬的目錄。把入口和參數邊界说清楚,抓取资源才會流向你真正想被看到的内容。