網站收錄

篩選與排序參數生成大量 URL:先分清哪些值得被發現

站内篩選、排序、追踪這几類參數很容易把 URL 數量翻倍,進而稀释抓取額度。文章按參數用途分類,分別给出規范化、canonical 指向、入口控制等處理思路,並附上一份可执行的自查清單,帮助把抓取與索引资源集中到真正需要被發現的内容頁上。

網站收錄

篩選與排序參數生成大量 URL:先分清哪些值得被發現

站内的篩選、排序、分頁和追踪參數,是最容易在短時間内把 URL 數量翻好几倍的来源。一個商品列表加上颜色、尺碼、價格区間,再叠加排序方式和来源标记,组合出来的地址可能成千上萬。這些地址大多返回 200,頁面内容也大同小异。如果放任不管,爬虫會把大量抓取額度花在近似頁面上,真正需要被發現的頁面反而排到後面。

先判断參數改變的是内容還是视图

處理參數之前先問一個問题:這個參數有没有带来新的、對用戶有意义的正文内容。

  • 篩選參數:颜色、尺碼、價格区間這類,通常是同一批内容的子集,頁面主体高度重合。
  • 排序參數:按價格、按销量,改變的是排列顺序,内容集合基本不變。
  • 追踪參數:utm、来源标记、分享 ID,對頁面内容没有任何影响。
  • 分頁參數:翻到第二頁之後确實是不一样的内容片段,需要單獨判断。

通常只有篩選和分頁可能承载獨立内容,排序和追踪參數基本可以判定為视图狀態,不太需要單獨产生一個索引版本。

抓取和收錄是两件事

很多人把“別收錄”直接等同于“別抓取”,于是用 robots.txt 一刀切掉所有带參數的地址。這样做的副作用是:爬虫再也無法通過這些連結發現頁面里的其他 URL,内鏈结构被切断。更稳妥的做法是分层處理。

  1. 追踪參數:在服務器层做規范化,301 到不带參數的干净地址,让爬虫只看到一個版本。
  2. 排序參數:保留可訪問,但在頁面 head 里用 canonical 指向預設排序版本。
  3. 篩選參數:组合過多时,允许抓取但不主動暴露入口,避免在站点地图和内鏈里批量輸出。
  4. 分頁參數:保留可抓取,让爬虫能沿着連結走到更深的詳情頁。

容易踩的几個坑

canonical 寫成相對路径或指向了错的地方

canonical 最好指向一個可訪問、返回 200 的绝對地址。如果目标地址本身被 robots.txt 屏蔽,或者會跳轉到別處,這個信号大概率會被忽略,參數版本仍可能被單獨索引。

篩選連結靠脚本拼出来,入口却全量輸出

頁面上的篩選入口可能是给用戶点的,但服務端 HTML 里如果已经把大量组合寫進了 href,爬虫照样會發現它們。想控制發現范围,就要從連結輸出這一层入手,而不是指望 canonical 兜底。

同一種篩選存在多種參數顺序

?color=red&size=42 和 ?size=42&color=red 是两個不同地址但同一内容。服務器如果不能归一化參數顺序,就會凭空多出一倍 URL。可以在網關或應用层對參數排序後统一跳轉。

判断标准可以简單一点:這個參數地址,用戶會主動分享、搜尋或收藏吗?如果不會,它大概率不需要獨立索引。

一份可执行的自查清單

  • 用日誌或抓取记錄統計带參數 URL 占被請求總量的比例。
  • 把參數按篩選、排序、追踪、分頁四類打标,分別决定策略。
  • 检查 canonical 是否指向 200 狀態、未被屏蔽的绝對地址。
  • 检查站点地图和内鏈里是否混入了大量低價值參數地址。
  • 處理完之後隔一段時間再回看抓取分布,確認額度是否向内容頁轉移。

參數 URL 的處理没有一劳永逸的開關,更多是分類、取舍和持續观察。先把參數按用途分清,再决定哪些让它被看见、哪些只保留可訪問,通常比全站一刀切更稳。