篩選、排序、站内搜尋這些功能一旦上线,索引里很容易多出一批带參數的 URL。它們不是凭空出現的:只要頁面能被爬虫顺着連結抓到,又没有被明确處理,搜尋引擎就可能把它当成獨立頁面看待。問题不在于參數本身,而在于這些 URL 有没有獨立價值、值不值得占用抓取配額和索引空間。
第一步:把带參數的 URL 從索引和日誌里分出来
先摸清規模,再動手改。按參數名分组統計,比盯着總數更有用。
- 站内搜尋參數(如 ?q=、?s=):组合近似無限,獨立價值通常最低。
- 篩選與排序參數(如 ?color=、?sort=):同一個列表的不同视图,内容高度重叠。
- 分頁或游标參數:属于内容序列的一部分,處理方式和篩選參數不同。
- 統計與追踪參數(?from=、?ref=):只是入口标记,不该形成新頁面。
顺便看一眼抓取日誌里带 query 的請求占比。如果爬虫大量時間花在參數頁上,核心頁面的抓取频率就會被挤占。
第二步:给每類參數定一個归属
處理方式無非三種,但前提是先判断這個 URL 本身值不值得留。
- 保留:少量固定的聚合頁,比如“全部商品”或某個固定篩選组合确實有搜尋需求,可以保留為可索引頁面,做自指 canonical,並让内鏈正常指向它。
- 归並:内容與主頁面高度重复的排序、视图切換,可让頁面 canonical 指向無參數版本。前提是两頁内容确實一致,否則信号會互相矛盾。
- 屏蔽:组合無限、几乎不可能有獨立搜尋需求的參數,優先考虑禁止抓取或禁止索引。
第三步:执行顺序比選哪一招更重要
- 先確認頁面能正常訪問、返回 200,再谈處理方式。
- 决定是“不抓”還是“不索引”。要让頁面被讀取但不進索引,用 meta robots 的 noindex,此时不要用 robots.txt 封死。
- 如果确定整類參數都不需要被抓,再考虑在 robots.txt 里按模式屏蔽,或使用參數設定類工具让搜尋引擎自行判断。
- 處理完回头改内鏈和 sitemap。内鏈仍指向參數 URL,爬虫就會繼續發現,前面的處理等于白做。
- 最後再核對索引狀態的變化,而不是当天改完当天就下结论。
一個常见的顺序错誤:先用 robots.txt 屏蔽參數目錄,再往這些頁面上加 noindex。爬虫讀不到頁面内容,noindex 自然不會生效。
第四步:改完之後核對什么
- 抓取日誌里參數類 URL 的請求占比是否下降,核心目錄的抓取是否更集中。
- 索引覆盖报告里,參數 URL 的狀態是否變為“已排除”一類,而不是仍顯示已收錄。
- 被 canonical 归並的頁面是否跟着主頁面走,而不是各自留在索引里。
- 核心列表頁和詳情頁的收錄是否稳定,別在處理參數时誤伤了主頁面。
几個容易忽略的细节
會话 ID、多語言參數、移動端识別參數同样會生成 URL 變体,處理逻辑與篩選參數類似,但不建议一刀切。參數頁的處理结果通常不會立刻反映到索引里,核對时要按批次、按目錄去看,而不是只看總量。真正需要判断的始终是:這個 URL 上有没有用戶會主動搜尋的内容。