站内連結里带上一两個查询參數很常见,比如排序、篩選、分頁、来源追踪。對用戶来说它們只是视图差异,對蜘蛛来说,每一個參數组合都是一個獨立的 URL。如果不加约束,這些 URL 會以接近指數的方式增長,抓取预算被大量消耗在内容几乎相同的頁面上。
參數是怎么把 URL 數量放大的
假设一個列表頁支持四種排序、五個篩選维度、三種每頁條數,參數之間還能自由组合,那么同一個列表理论上可以生成几百甚至上千個 URL。蜘蛛顺着篩選條件一路点下去,就會發現源源不断的新地址。這些地址往往返回 200,内容高度相似,只有顺序或子集不同。
更麻烦的是參數顺序。?a=1&b=2 和 ?b=2&a=1 在服務器看来可能是同一個頁面,在蜘蛛看来却是两個 URL。會话 ID、来源參數(utm_*)也會制造同样的問题。
蜘蛛遇到參數連結时的實际行為
- 它不會主動判断“這個參數没意义”,只要連結可点、返回正常,就可能進入待抓队列。
- 新發現的參數 URL 數量一旦超過它愿意分配的額度,抓取會明顯向這些地址倾斜。
- 真正需要更新的内容頁,可能因為排在队尾而延迟被抓。
结果就是日誌里满屏參數地址,而正文頁的抓取次數反而下降。
几種常见處理方式
- robots.txt 屏蔽:用 Disallow 挡住特定參數模式。简單直接,但被屏蔽的 URL 仍可能因為没有内容可抓而以其他形式出現在索引里,需要配合其他手段。
- canonical 指向規范頁:告诉搜尋引擎哪個是主版本。它是建议而非强制,參數頁仍然會被抓。
- 連結层面不生成:篩選结果用表單或 JS 交互,不做成可爬的 a 标簽。最根本,但要確認核心内容仍能被發現。
- 參數排序與去重:服務端把參數统一排序、去掉無意义參數,让同一個视图只對應一個 URL。
可以落地的几步
- 先統計:從日誌里抽出带參數的 URL,按參數名分组,看哪些參數贡献了最多的抓取次數。
- 分類:区分“影响内容的參數”(如分頁、分類篩選)和“不影响内容的參數”(如排序、追踪、會话)。
- 對不影响内容的參數,统一在連結生成阶段去掉,而不是靠事後屏蔽。
- 對影响内容的參數,保留可抓版本,但限制组合數,比如只允许一层篩選、按固定顺序排列。
- 為每個可抓的參數组合提供唯一的規范 URL,並在頁面上给出明确的上一級入口。
- 在 Sitemap 里只放規范 URL,不要把參數版本也塞進去。
判断标准很简單:如果一個參數頁面對用戶没有獨立價值,它大概率也不值得让蜘蛛花時間。
驗證有没有效果
調整後過一两周再看日誌,重点看两件事:带參數的抓取占比是否下降,正文頁的抓取次數是否回升。同时检查規范 URL 的抓取是否正常,避免把需要抓的頁面一起挡掉。
參數治理不是一次性工作。新的篩選功能、活動追踪連結随时會引入新的參數,把它当作上线前的检查項,比事後清理更省事。