搜尋抓取

URL 參數與蜘蛛抓取:同一内容被參數拆成多個入口时怎么處理

带參數的地址在站内很常见,但蜘蛛只按 URL 字符串识別,一個參數组合就是一個新地址。追踪參數、篩選排序參數如果不管,抓取量會被相似頁面稀释。本文梳理哪些參數值得保留、哪些可以收敛,以及 canonical、重定向、robots 几種處理方式的取舍。

搜尋抓取

URL 參數與蜘蛛抓取:同一内容被參數拆成多個入口时怎么處理

站内带參數的地址很常见:統計用的 utm_、来源标记、篩選、排序、分頁。對使用者来说,這些參數只是同一個頁面換了種打開方式;但對蜘蛛来说,URL 字符串不同,就是不同的地址。參數處理不当,抓取队列里會堆积大量内容高度相似的頁面,真正需要更新的頁面反而排不上。

蜘蛛如何识別带參數的 URL

蜘蛛不會去猜參數含义。它看到的是完整字符串:?utm_source=a 和 ?from=a 在它眼里是两條獨立记錄,分別入队、分別抓取、分別判定内容。只有当服務端返回相同内容、頁面上的 canonical 指向同一地址,或者存在明确的規范化跳轉时,它才可能把两者归並處理。

一個參數组合就是一個 URL,這也是篩選頁容易把抓取队列撑大的根本原因。

哪些參數通常值得放行

  • 分頁類:page、p 這類參數背後是真實不同的内容片段,通常需要抓。
  • 内容确實不同的篩選:例如按品類、地区切分後頁面主体内容有明顯差异,且有稳定入口。
  • 語言或版本区分:需要配合 canonical 或 hreflang,让蜘蛛明白彼此關系。
  • 追踪類:utm_、ref、from、spm、share 等對内容没有影响,一般不需要被抓取。

几種常见的處理方式

robots.txt 里屏蔽

寫法简單,但要注意副作用:被 Disallow 的地址,蜘蛛無法抓取頁面内容,也就看不到上面的 canonical,頁面里的内鏈也不會被繼續跟随。所以更适合用在确定不需要抓取的追踪參數上,而不是一刀切屏蔽整類路径。

服務端規范化或重定向

识別出追踪參數後,用 301 跳到無參數版本,是把地址收敛到一條线上的做法。代價是每次訪問都要多一跳,跳轉鏈不宜過長,也不要出現 A 跳 B、B 又跳回 A 的循环。另一種更轻的做法是服務端忽略這類參數,直接返回主版本内容加 canonical。

用 canonical 声明首選地址

在带參數的頁面上輸出 canonical,指向規范地址,是較温和的方式。需要清楚:canonical 是建议,不是强制命令,蜘蛛仍可能按自己的判断處理。因此 canonical 要和内鏈、Sitemap 的方向保持一致,別一邊声明首選是 A,一邊把 Sitemap 和導航都指向 B。

從内鏈源头收敛

站内連結、導航、面包屑、Sitemap 里尽量不带追踪參數。蜘蛛的發現路径主要来自連結,入口干净,带參數的地址自然就少。這比事後屏蔽更省事。

篩選與排序參數的取舍

颜色、尺寸、排序方式、每頁條數這些參數容易组合爆炸,用戶点几下就能生成上千條地址。判断标准可以简單一些:這個组合是否有獨立價值。有稳定需求、内容确實不同的篩選组合,可以保留並让地址固定;纯粹由交互产生的组合,可以让它們停留在前端交互层面,不生成可被抓取的新地址,或在 robots 里屏蔽參數组合的匹配模式。

參數顺序與大小寫

?a=1&b=2 與 ?b=2&a=1 是两個 URL,?Page=2 和 ?page=2 也是。生成連結时固定參數顺序和大小寫,能直接减少同一内容的出口數量。有條件的话,在服務端做一次規范化,把參數排序後统一處理。

分頁參數的两個细节

  • 第一頁常常和列表首頁内容是同一批,可以让首頁不出現 page=1 的入口,或用 canonical 指向列表首頁。
  • 翻到没有内容的深分頁,比如已超出實际頁碼,最好返回明确的狀態碼並停止輸出下一頁連結,避免蜘蛛在空頁上反复走動。

一份可执行的检查清單

  1. 從訪問日誌或抓取統計里,看带參數 URL 占抓取總量的比例,判断是否異常。
  2. 抽查带參數頁面的 canonical 是否指向正确,是否與内鏈方向一致。
  3. 检查站内連結是否被追踪參數污染。
  4. 確認 robots 里屏蔽的是不需要抓取的參數,而不是把有價值的分頁也一起挡住。
  5. 统一參數顺序與大小寫,减少重复出口。
  6. 控制分頁深度,深分頁返回明确狀態。

不必追求把所有參數都消掉,重点是让内容没有差异的參數地址不占用抓取配額。地址结构稳定、可预期之後,蜘蛛對站点的抓取节奏也更容易保持平稳。