為什么站内搜尋和篩選會产出海量 URL
站内搜尋、篩選、排序、分頁這几種功能,本质上都是“在同一批資料上做不同切片”。每個切片對應一個可訪問的 URL,參數一旦组合起来,數量會迅速超出预期。
常见的參數形態包括:搜尋词(?q=)、篩選属性(?color=&size=)、價格区間、排序方式(?sort=price_asc)、分頁(?page=),以及篩選與排序叠加的复合參數。爬虫在頁面上發現這些連結後,會顺着组合繼續往下爬,很快就能生成成千上萬個 URL。
這些 URL 里,真正有價值的通常是少數——比如某個稳定搜尋量較大的属性组合;大量的空结果頁、單结果頁、只改變排序的頁面,價值很低。
先分類,再决定拦不拦
治理之前先分三類,處理方式完全不同:
- 有稳定需求的组合:例如“红色连衣裙”“500 元以下耳机”這類确實存在搜尋行為的属性组合,可以保留在索引里,甚至單獨優化标题與内容。
- 用戶自定义组合:任意關鍵詞、任意參數叠加产生的结果,通常没有稳定需求,不值得長期占用索引。
- 空结果與無意义參數:搜尋無结果頁、只改變排序方式的頁面,基本没有收錄價值。
分類依據不是“技術上好不好處理”,而是“這個 URL 對應的頁面,有没有人會真的去找,找到了有没有用”。
抓取和收錄要分開處理
這是最容易被忽略的一点:robots.txt 只是拦抓取,不是删索引。搜尋引擎被拦住之後,讀不到頁面上的 noindex,已经進入索引的 URL 可能長時間留在那里,只顯示一句“因 robots.txt 無法提供描述”。
所以顺序通常是:
- 如果目标是不收錄,先允许抓取,用 noindex 让搜尋引擎讀到並移除。
- 確認頁面從索引消失後,再考虑是否用 robots.txt 拦截抓取,节省抓取预算。
- 如果這個 URL 從一開始就没被收錄、也不希望被抓,直接 robots.txt 拦截即可。
顺序反了,容易出現“拦了大半年,索引里還挂着”的情况,而且這时你没法用 noindex 解决,因為頁面根本讀不到。
篩選頁還可以用 canonical 收敛
如果篩選结果頁和主分類頁内容高度相似(比如只是把同一批商品換了顺序),可以用 canonical 指向主版本,让權重集中過去。但如果篩選頁有獨立内容、有搜尋量,canonical 指向主分類頁反而浪費机會,要按頁面實际情况判断。
另外要注意,Google 的 URL 參數工具早已下线,現在没有“一键忽略某類參數”的設定,主要靠連結控制、robots、noindex 和 canonical 组合使用。
從源头减少 URL 的产生
- 站点搜尋頁:預設加 noindex,並且不要让搜尋结果頁出現在 sitemap 和内鏈里。
- 篩選维度:只開放少數几個有搜尋量的维度,其余维度可以改為前端篩選(不改變 URL)或表單提交。
- 排序參數:排序不产生新内容,可以统一 canonical 到預設排序,或干脆不輸出可抓取連結。
- 分頁:只保留前几頁的可抓取連結,更深的頁碼通過“加载更多”或直接不輸出連結。
- sitemap:只放你希望被收錄的 URL,不要把全站參數组合塞進去。
推進时的几個提醒
- 先看資料再動手:搜尋控制台的抓取統計和“網頁”报告能告诉你哪些參數 URL 真的被抓了、被收錄了。
- 別一次全堵:有流量的參數頁先保留,只處理明顯無價值的组合。
- 收敛是渐進的:改完之後抓取频次和索引狀態都需要時間變化,通常要观察几周。
- 没有“一定收錄”或“一定移除”的保證:以上操作只是减少無價值 URL 的抓取與收錄机會,最终由搜尋引擎判断。