带參數的 URL 是站点运营里绕不開的東西:篩選、排序、分頁、来源跟踪,几乎每一個交互動作都會在地址栏里留下痕迹。對用戶来说這是功能,對蜘蛛来说這是 URL 發現數量的一次放大。同一個列表頁,加上不同的篩選组合,可以轻松膨胀到几百上千個地址。
蜘蛛是怎么遇到這些參數 URL 的
參數 URL 通常有三類来源:頁面里真實存在的連結、前端根據交互動態生成的地址,以及從別處带過来的外鏈。第一類是蜘蛛最主要的入口,因為它能被 HTML 直接解析;後两類往往依赖脚本执行或跳轉,被發現和進入抓取队列的優先級通常更低。
需要区分的是,蜘蛛發現一個 URL 和抓取一個 URL 是两件事。連結一旦出現在 HTML 里,地址就進入了待抓队列;至于什么时候真正抓、抓几次,取决于它對站点的整体判断。參數越多、组合越复杂,队列里有效内容的占比就越低。
把參數分成三類看待
會改變正文内容的參數
分頁參數、文章 ID、語言參數、查看全部等属于這一档。它們指向的是不同内容,被蜘蛛抓取是有意义的,通常應保持可抓狀態,並保證每個地址都能稳定返回對應内容。
只改變呈現顺序或视图的參數
排序、篩選、每頁條數、瀑布流视图属于這一档。它們本质上是同一批内容的重新排列,蜘蛛抓完第一遍之後,再抓几十種组合收益很低。比較稳妥的做法是:站内連結只輸出預設视图,篩選结果頁用 canonical 指回預設列表頁,或者對特征明确的參數在 robots.txt 里做限制。
跟踪與营销參數
带来源标识、投放渠道、用戶标识的參數對蜘蛛没有意义,在 HTML 里出現得越少越好。如果业務上必须保留,至少保證同一頁面的 canonical 指向不带這些參數的版本,避免同一篇文章被拆成多個地址。
几種常见處理手段的邊界
- robots.txt 限制:可以挡住抓取,但 URL 本身仍可能作為已知地址被保留。适合處理海量低價值组合,不适合處理你希望展示的頁面。
- canonical:是收敛信号,不是禁止信号。它需要與站内連結、Sitemap 保持一致,否則几路信号會互相抵消。
- 站内連結規范化:性價比最高。頁面里只輸出一種稳定的參數寫法,其余组合就不容易被顺藤摸瓜地發現。
- 參數顺序與大小寫统一:同一组參數換個顺序就成了新地址,先统一輸出格式,再谈其他。
- 异步加载:能减少 HTML 里的連結數量,但也可能让部分内容更难被發現,需要结合站点形態權衡。
两個容易踩的坑
第一種是把整個目錄用通配符一刀切。挡住之後,蜘蛛看不到内部结构,也無法顺着連結找到真正有價值的頁面,站点在抓取层面的地图會缺一块。第二種是 canonical 與 robots.txt 互相矛盾:一邊说別抓,一邊又说以這個地址為准,蜘蛛只能按已有信号自行判断,结果常常和预期不同。
參數不是敌人,失控的參數组合才是。判断标准很简單:這個地址打開後,用戶看到的内容和預設地址相比,是不是真的不一样。
一份可执行的检查清單
- 從抓取日誌里拉出最近一段時間的訪問记錄,按參數名統計被訪問的 URL 數量。
- 把參數按改内容、改顺序、只做跟踪分三组,分別标注處理方式。
- 检查站内連結:篩選、排序、分享按钮生成的地址是否直接寫進了 href。
- 核對 canonical、Sitemap 與站内連結是否指向同一個規范地址。
- 調整後繼續观察日誌,看被抓取的參數 URL 數量是否下降、核心頁面的抓取是否變多。
參數治理不需要一次做完,從訪問量最大、组合最多的那几個列表頁開始,效果通常最明顯。稳定的响應速度和清晰的内鏈结构,往往比任何技巧都更能影响蜘蛛對站点的判断。