站内搜尋、排序、篩選是常见功能,對用戶很方便,但對搜尋引擎来说,它們可能生成大量相似甚至重复的 URL。如果不加管理,蜘蛛會把抓取预算花在這些低價值頁面上,真正需要更新的内容反而被冷落。
搜尋與篩選為什么容易失控
一個列表頁加上“價格從低到高”“颜色”“品牌”“每頁數量”“頁碼”等參數,组合數量會迅速膨胀。再叠加站内搜尋關鍵詞,URL 空間几乎是無限的。蜘蛛顺着這些連結爬,可能几天都爬不完,而且很多頁面内容高度相似。
先分清哪些參數有意义
不是所有參數都要一刀切屏蔽。可以按下面几類判断:
- 排序參數:價格、销量、上架時間等排序,通常只是顺序變化,不产生新内容。
- 视图參數:列表/網格、每頁數量、語言切換如果只是展示差异,也不构成獨立内容。
- 篩選參數:品牌、分類、價位等篩選,如果组合後内容有明确主题,可能值得保留;如果只是随机组合,應考虑限制。
- 搜尋關鍵詞:站内搜尋结果頁一般不建议被索引,容易产生大量低质頁面。
- 會话與追踪參數:如 sessionid、utm、from 等,應该清理或屏蔽,不要進入索引。
几種常用的處理方式
具体選哪種,要看站点技術條件和运营目标。
1. 用 robots.txt 屏蔽無意义參數
可以在 robots.txt 里寫 Disallow: /*?sort= 這類規則。但要小心,別把带參數的正式頁面一起屏蔽。規則上线後,用日誌確認蜘蛛确實不再請求這些 URL。
2. 用 canonical 或 noindex 收敛
如果頁面必须存在且用戶可訪問,可以在 head 里加 canonical,指向不带參數的版本。對于搜尋頁,可以加 noindex,follow,既不让它進索引,又保留連結传递。
3. 限制參數數量與入口
在前端限制用戶可選擇的條件數量,或者把篩選结果做成固定路径,比如 /brand/nike/ 而不是 /list?brand=nike&sort=price。固定路径更容易维護,也更容易被理解。
4. 把搜尋頁做成不可抓取
站内搜尋建议用 POST 提交,或者對结果頁加 noindex。不要在導航、面包屑、站点地图里放搜尋结果的連結。
自查时看這几個点
- 用 site: 查询或日誌,看看带參數的 URL 有没有被大量收錄。
- 检查 robots.txt 是否誤伤了带參數但有用的頁面。
- 检查 canonical 是否指向正确,別把不带參數的頁面反向指向带參數的版本。
- 检查分頁與篩選组合後,是否出現同一内容多個 URL。
- 检查站内搜尋頁、排序頁的狀態碼,避免返回 200 却内容是空壳。
抓取预算不是無限的。把蜘蛛引向真正有價值的頁面,比让它到處乱爬更划算。
服務器與日誌侧的观察
處理之後,不要马上認為萬事大吉。可以在日誌里看几個指标:蜘蛛對同一路径的重复請求是否下降;带參數的 URL 請求量是否减少;重要栏目的抓取频次是否上升。如果發現蜘蛛仍然在大量抓取無意义參數,可能是内鏈或站点地图還在導出這些地址,需要回到模板和連結入口检查。
最後提醒一点:不要為了省抓取预算,把所有篩選頁都屏蔽掉。有些篩選頁确實有搜尋需求,也有明确主题。更好的做法是区分對待,把無意义的组合關在门外,把有價值的頁面留下来並做好内鏈。