搜尋抓取

URL 參數與蜘蛛抓取:同一頁被拆成多個地址後,抓取路径怎么走偏

篩選、排序、追踪參數常常把同一個頁面變成十几個 URL,蜘蛛沿着這些連結走,抓取路径就會膨胀。本文讨论如何判断哪些參數该保留、哪些该收敛,以及從内鏈、canonical 到屏蔽的先後顺序,帮助把抓取次數留给真正需要被發現的頁面。

搜尋抓取

URL 參數與蜘蛛抓取:同一頁被拆成多個地址後,抓取路径怎么走偏

站点里常见這样一類連結:同一個商品列表,用戶点一次“價格從低到高”,地址後面就多出 ?sort=price;換一個篩選條件,又變成 ?color=red&size=m;從外部渠道進来,還會带上 ?utm_source=...。對用戶来说,頁面内容差不多;對蜘蛛来说,這些都是一個個待抓取的 URL。

參數本身不是错誤,错的是參數頁被当成獨立頁面大量暴露在抓取路径里,導致抓取次數被摊薄。

一個頁面為什么會變成十几個 URL

常见的參數来源有几類:

  • 篩選與排序:颜色、價格区間、销量排序、每頁條數。
  • 追踪參數:utm、渠道号、广告点击 ID。
  • 會话與安全參數:jsessionid、token 之類的临时标识。
  • 參數寫法不一致:?a=1&b=2?b=2&a=1 被服務器当成两個地址。

這些連結一旦出現在導航、列表頁、推荐位里,蜘蛛就會顺着爬。抓取路径從“首頁 → 分類 → 詳情”變成了“首頁 → 分類 → 各種參數组合 → 詳情”,路径數量成倍增長。

參數 URL 對抓取路径的三個影响

  • 抓取次數被分散。同一個頁面有多個入口,蜘蛛反复抓取内容相近的地址,新發布的詳情頁反而排到後面。
  • 規范化信号變乱。内鏈指向带參數的地址,canonical 却指向無參數地址,蜘蛛需要花時間判断谁才是主版本。
  • 日誌难以解讀。路径分布里混着大量參數 URL,很难看清真正被频繁抓取的是哪些内容頁。

先判断哪些參數是“必要”的

不是所有參數頁都该屏蔽。判断标准可以简化為两点:這個參數组合是否产生實质不同的内容,以及這個组合是否有用戶會主動搜尋。

比如“價格 100-200 元的耳机”這種篩選结果頁,如果内容确實獨立、有搜尋需求,可以保留並做規范化;而“按上架時間排序”這類只改變顺序、不改變集合的頁面,通常没有必要让蜘蛛逐個抓取。

屏蔽是取舍。用 robots.txt 一刀切掉所有带參數的地址,可能把本来有效的篩選頁也挡在门外,需要结合业務判断。

處理顺序:内鏈、canonical、屏蔽

很多站点一上来就寫屏蔽規則,结果内鏈還指向參數地址,蜘蛛仍然不断發現它們。更稳妥的顺序是:

  1. 统一站内連結。導航、列表頁、分頁、推荐模块都指向無參數的規范地址,减少參數 URL 的自然入口。
  2. 在參數頁上也寫 canonical。canonical 指向規范 URL,並且保持内鏈與 canonical 一致,不要一個指向 A、一個指向 B。
  3. Sitemap 只提交規范 URL。不要把篩選组合、排序頁塞進 Sitemap,避免主動把參數頁送给蜘蛛。
  4. 剥离纯追踪參數。utm 之類的參數對頁面内容没有影响,可以在服務端重定向到干净地址,或在前端生成連結时就不带上。
  5. 最後再考虑 robots.txt 屏蔽。针對确實不需要被抓取的參數模式做限制,同时確認規范頁不會被誤伤。

用日誌和抓取資料驗證

處理之後,可以观察站点日誌中狀態碼為 200 的 URL 里,带參數的比例是否下降;參數頁的抓取频次是否减少;規范 URL 的抓取是否更集中。這些只是趋势指标,不能保證收錄或排名變化,但能帮助判断調整是否生效。

几個容易踩的坑

  • 屏蔽了參數頁,但外鏈仍然指向它,蜘蛛反复發現却抓不到,發現次數被浪費。
  • 只在詳情頁加 canonical,列表頁和篩選頁没加,規范化信号仍然分散。
  • 參數顺序不统一,服務端没有做排序或 301 归一,同一组條件产生多個地址。
  • 分頁參數與篩選參數混在一起,導致路径层級越来越深,蜘蛛翻到後面就很少再走。

參數問题的核心不是“消灭所有參數”,而是让蜘蛛把有限的抓取次數花在内容真正不同的頁面上。把入口收敛、把規范地址说清楚,抓取路径自然會清爽一些。