做电商或内容站的运营,常常會遇到這样一種情况:同一個商品、同一篇文章,頁面上被生成了几十甚至上百個地址——加個篩選條件是一個,換個排序方式又是一個,带個来源追踪參數還是一個新的。這些 URL 都會被蜘蛛發現,也都會占用抓取額度,但真正需要被收錄的往往只有其中一两個。
參數 URL 是怎么被蜘蛛發現的
蜘蛛並不知道哪個地址是規范版本,它只會顺着連結和 Sitemap 走。參數 URL 的来源主要有几處:
- 頁面上的篩選、排序、分頁控件,每一個可点選項都可能是一個新地址;
- 站内搜尋结果頁、标簽聚合頁;
- 推廣連結、分享連結里带上的 utm 參數、會话 ID;
- Sitemap 或接口中不小心带出的參數化地址。
只要這些地址在 HTML 里以可跟随的連結形式出現,蜘蛛就會把它們排進队列。問题不在于被發現,而在于發現之後,它們會跟真正重要的頁面争抢有限的抓取次數。
先分清三類參數,再决定怎么處理
影响内容展示的參數
比如價格区間、颜色、尺寸篩選。這類地址對應的頁面内容确實不同,如果本身有搜尋需求,是可以保留並做規范化的;如果只是给用戶中途篩選用,没有獨立價值,就适合收紧。
不影响内容的參數
排序方式(價格從低到高)、视图切換(列表或網格)、追踪參數(utm_source、gclid)。這些地址指向的内容基本相同,属于典型的重复 URL,應当尽量不生成可跟随連結,或者通過 canonical 指明主版本。
分頁與會话類參數
分頁本身是正常的抓取路径,但要避免每頁都叠加一串篩選條件;會话 ID、時間戳之類的參數一旦進入 URL,就等于每次訪問都造出一個新地址,對抓取和缓存都不友好。
收敛手段各自能做到哪一步
- canonical 标簽:把變体指向主版本,告诉搜尋引擎哪個是規范地址。它不阻止抓取,只影响索引判断,适合内容相同但地址不同的情况。
- robots.txt 屏蔽:直接不让蜘蛛抓取带特定參數的路径,能省下抓取額度。但已经抓取並索引的地址不會因此自動消失,需要配合其他方式處理。
- 連結层面的控制:把篩選、排序等控件改成表單提交或按钮事件,而不是普通的可跟随連結;必须保留連結时,统一加上 canonical,或者用 nofollow 标记。
- Sitemap 只放規范版本:Sitemap 是站点主動提交的 URL 清單,里面出現什么,蜘蛛就更可能去抓什么。變体地址不應出現在這里。
- 參數顺序统一:如果确實需要保留带參數的地址,把參數顺序固定下来,避免 ?a=1&b=2 和 ?b=2&a=1 被当成两個 URL。
几個容易踩的坑
- 只加了 canonical,却在頁面上保留大量可跟随的參數連結,抓取浪費依然存在;
- 用 robots.txt 屏蔽分頁,導致深层商品頁失去唯一的發現路径;
- 對全部篩選頁一刀切屏蔽,把本来有搜尋量的長尾頁面也一起丢掉;
- Sitemap 里同时存在規范版本和變体版本,等于给蜘蛛两份互相矛盾的指引。
判断标准可以简單一些:這個地址如果被用戶單獨分享出去,是否值得打開?如果不值得,它大概也不需要被蜘蛛抓取。
回到抓取額度這件事
站点能获得的抓取次數不是無限的,服務器响應越慢、错誤越多,蜘蛛愿意投入的並發就越少。參數 URL 的收敛,本质上是把這份額度從重复頁面上收回来,交给真正需要更新的内容頁和新上线的 URL。可以先從抓取日誌里挑出被抓次數最多、但内容高度相似的地址,看看它們是從哪個連結進来的,再决定是改連結结构、加 canonical,還是直接屏蔽。
不需要一次改完。每隔一段時間看一次日誌,把新增的參數類型收一收,抓取分布通常會慢慢朝着你希望的方向走。