搜尋抓取

篩選參數與站内搜尋頁:把蜘蛛的抓取引到有效列表

站内搜尋和篩選參數很容易生成大量 URL,把蜘蛛的抓取引向没有獨立内容的组合頁面。本文從參數 URL 的分類讲起,說明组合數量膨胀的原因,再谈内鏈结构、robots 與 noindex 的取舍,以及日誌和服務器负载上值得盯的几個數字。

搜尋抓取

篩選參數與站内搜尋頁:把蜘蛛的抓取引到有效列表

站内搜尋頁、排序篩選、會话與追踪參數,往往是站点 URL 數量增長最快的部分。它們對用戶有用,但對蜘蛛来说,很多组合既没有獨立内容,也没有對應的搜尋需求,却會持續占用抓取资源,把蜘蛛從真正需要被發現的頁面引開。下面按“先分類、再取舍、後监控”的顺序,梳理一遍比較稳妥的處理方式。

一、先把參數 URL 分類,別一刀切

同样是带參數的 URL,處理方式差別很大,可以先按下面的维度分一分:

  • 分頁參數:列表翻頁,通常属于有效路径,建议保留可抓取,並提供規范的翻頁連結。
  • 排序參數:同一批内容換顺序展示,一般不需要作為獨立頁面被抓取。
  • 篩選參數:要看篩選维度能否构成稳定、有實际内容的列表。品類、地区這類常见篩選可以保留少數组合,多條件叠加則應限制。
  • 會话與追踪參數:對頁面内容没有影响,尽量在服務器端忽略或重定向到干净地址。
  • 站内搜尋參數:结果頁随查询词無限變化,属于需要重点约束的部分。

分類之後往往能發現,真正值得蜘蛛抓的只是其中一小部分,其余大多是路径上的噪声。

二、组合爆炸是怎么發生的

假设一個列表頁有 5 個篩選维度,每個维度 4 個取值,理论组合數就是 1024 種。頁面上的篩選入口如果是普通 a 标簽,蜘蛛會顺着連結层层叠加條件,把大量高度相似的頁面翻出来。這些頁面内容重复度高,渲染過程還要反复查询資料库,占用服務器资源。

一個實用的观察方法是:在抓取日誌里按 URL 是否带參數分组,看參數 URL 在總抓取量中的占比。如果它長期占了明顯的大头,而對應頁面並没有带来訪問,通常說明抓取路线需要收敛。

三、内鏈结构上的取舍

抓取入口决定蜘蛛往哪走,所以調整要從内鏈入手,而不是只依赖屏蔽規則。

  • 把有價值的列表頁放進導航、栏目頁和面包屑,让蜘蛛優先沿這些路径前進。
  • 篩選、排序這類交互,尽量用表單提交或前端事件触發,而不是把每一種组合都寫成可直接跟随的連結。
  • 站内搜尋结果頁一般不建议作為可收錄頁面。若確認不需要,可以在頁面上加 noindex;注意 noindex 生效的前提是蜘蛛能抓到该頁面,如果同时在 robots.txt 里屏蔽了整個目錄,标簽就看不到,反而容易留下大量空壳 URL。
  • 分頁保持线性结构,避免“跳到任意頁”的連結堆叠。

站内搜尋頁的两種常见做法

一種是把结果頁完全屏蔽抓取,代價是屏蔽之後 noindex 無法生效;另一種是允许抓取但加 noindex,让蜘蛛看到明确信号後逐步降低訪問。两種做法各有取舍,建议先在測試目錄观察日誌,再决定是否全站推行。

四、给蜘蛛一條清晰的抓取路径

  1. 确定一组入口頁:首頁、主要栏目、少量核心列表。
  2. 從入口頁出發,用内鏈把蜘蛛引到内容詳情頁,路径尽量控制在三到四跳以内。
  3. 只把稳定、有實际内容的列表 URL 寫入 sitemap,不要把所有參數组合都提交。
  4. 對确實不需要抓取的參數目錄,在 robots.txt 里做相對宽松的屏蔽,避免誤伤正常頁面。
  5. 上线後看两到四周日誌,观察參數 URL 的抓取占比是否回落。

五、上线後要盯的几個數字

  • 參數 URL 抓取占比:是否在缓慢下降,而不是反复波動。
  • 有效列表頁的抓取频次:收敛之後,核心頁面有没有得到更多訪問。
  • 响應狀態分布:如果參數頁大量返回 200 但内容雷同,說明收敛還不够。
  • 服務器负载:參數頁被大量抓取时,查询和渲染压力會明顯上升,收敛後通常會缓解。

整体思路是:把有限的抓取机會優先留给有内容、有入口、有更新價值的頁面。篩選參數和站内搜尋頁並非不能存在,但需要被明确划出邊界,蜘蛛才不會在一片相似 URL 里反复打轉。