搜尋抓取

參數化 URL 越滚越多:篩選、排序與追踪參數怎么收敛

电商和内容站的篩選、排序、追踪參數會让同一批内容裂變出大量 URL,在有限的抓取額度里持續消耗蜘蛛的訪問。本文梳理參數 URL 的常见發現路径,以及 canonical、robots.txt、連結規則和 Sitemap 各自能起到的作用,帮你把抓取次數留给真正需要收錄的頁面。

搜尋抓取

參數化 URL 越滚越多:篩選、排序與追踪參數怎么收敛

做电商或内容站的运营,常常會遇到這样一種情况:同一個商品、同一篇文章,頁面上被生成了几十甚至上百個地址——加個篩選條件是一個,換個排序方式又是一個,带個来源追踪參數還是一個新的。這些 URL 都會被蜘蛛發現,也都會占用抓取額度,但真正需要被收錄的往往只有其中一两個。

參數 URL 是怎么被蜘蛛發現的

蜘蛛並不知道哪個地址是規范版本,它只會顺着連結和 Sitemap 走。參數 URL 的来源主要有几處:

  • 頁面上的篩選、排序、分頁控件,每一個可点選項都可能是一個新地址;
  • 站内搜尋结果頁、标簽聚合頁;
  • 推廣連結、分享連結里带上的 utm 參數、會话 ID;
  • Sitemap 或接口中不小心带出的參數化地址。

只要這些地址在 HTML 里以可跟随的連結形式出現,蜘蛛就會把它們排進队列。問题不在于被發現,而在于發現之後,它們會跟真正重要的頁面争抢有限的抓取次數。

先分清三類參數,再决定怎么處理

影响内容展示的參數

比如價格区間、颜色、尺寸篩選。這類地址對應的頁面内容确實不同,如果本身有搜尋需求,是可以保留並做規范化的;如果只是给用戶中途篩選用,没有獨立價值,就适合收紧。

不影响内容的參數

排序方式(價格從低到高)、视图切換(列表或網格)、追踪參數(utm_source、gclid)。這些地址指向的内容基本相同,属于典型的重复 URL,應当尽量不生成可跟随連結,或者通過 canonical 指明主版本。

分頁與會话類參數

分頁本身是正常的抓取路径,但要避免每頁都叠加一串篩選條件;會话 ID、時間戳之類的參數一旦進入 URL,就等于每次訪問都造出一個新地址,對抓取和缓存都不友好。

收敛手段各自能做到哪一步

  1. canonical 标簽:把變体指向主版本,告诉搜尋引擎哪個是規范地址。它不阻止抓取,只影响索引判断,适合内容相同但地址不同的情况。
  2. robots.txt 屏蔽:直接不让蜘蛛抓取带特定參數的路径,能省下抓取額度。但已经抓取並索引的地址不會因此自動消失,需要配合其他方式處理。
  3. 連結层面的控制:把篩選、排序等控件改成表單提交或按钮事件,而不是普通的可跟随連結;必须保留連結时,统一加上 canonical,或者用 nofollow 标记。
  4. Sitemap 只放規范版本:Sitemap 是站点主動提交的 URL 清單,里面出現什么,蜘蛛就更可能去抓什么。變体地址不應出現在這里。
  5. 參數顺序统一:如果确實需要保留带參數的地址,把參數顺序固定下来,避免 ?a=1&b=2 和 ?b=2&a=1 被当成两個 URL。

几個容易踩的坑

  • 只加了 canonical,却在頁面上保留大量可跟随的參數連結,抓取浪費依然存在;
  • 用 robots.txt 屏蔽分頁,導致深层商品頁失去唯一的發現路径;
  • 對全部篩選頁一刀切屏蔽,把本来有搜尋量的長尾頁面也一起丢掉;
  • Sitemap 里同时存在規范版本和變体版本,等于给蜘蛛两份互相矛盾的指引。
判断标准可以简單一些:這個地址如果被用戶單獨分享出去,是否值得打開?如果不值得,它大概也不需要被蜘蛛抓取。

回到抓取額度這件事

站点能获得的抓取次數不是無限的,服務器响應越慢、错誤越多,蜘蛛愿意投入的並發就越少。參數 URL 的收敛,本质上是把這份額度從重复頁面上收回来,交给真正需要更新的内容頁和新上线的 URL。可以先從抓取日誌里挑出被抓次數最多、但内容高度相似的地址,看看它們是從哪個連結進来的,再决定是改連結结构、加 canonical,還是直接屏蔽。

不需要一次改完。每隔一段時間看一次日誌,把新增的參數類型收一收,抓取分布通常會慢慢朝着你希望的方向走。