给重复頁面加上 canonical 或 noindex,经常被当成“省抓取”的手段。但從搜尋蜘蛛的工作顺序看,這两個标簽的作用点在抓取之後:它得先請求這個 URL、下载並解析 HTML,才能讀到标簽,再决定要不要索引。也就是说,标簽影响的是索引與展示,抓取請求本身已经發生了。
标簽生效之前,請求已经發出
把流程拆開會更清楚:URL 被發現 → 進入抓取队列 → 請求並下载 → 解析頁面 → 讀取 canonical、noindex、meta robots 等指令 → 决定索引與後續抓取。重复 URL 越多,前面的步骤就要重复越多遍。如果同一套内容存在几十個參數變体,每個變体都會各自走一遍這個流程。标簽只能让它們不進索引,不能让它們不被請求。
重复 URL 的常见来源
參數组合與排序
篩選、排序、每頁條數、追踪參數,任意一個不同就會产生新地址;參數顺序不同、大小寫不同,也常被当作不同 URL。列表頁上每增加一個可選條件,可訪問的地址數量就可能翻倍。
站内搜尋结果頁
站内搜尋會按關鍵詞生成大量頁面,内容往往稀薄且互相重复。這類頁面如果放開抓取,會持續产生新的 URL,而且很多只有内部連結指向,外部很难發現,却會被蜘蛛顺着抓。
同一内容的多套地址
- http 與 https、www 與非 www 同时可以打開
- 带與不带 index.html、带與不带末尾斜杠
- 打印版、移動版、AMP 版各自使用獨立地址
- 新舊栏目路径同时在线,没有做跳轉收口
收口的几個做法
- 协议與域名统一,非主域一律 301 到主域,並且跳轉一步到位,避免多級跳轉损耗。
- 參數頁按用途分類:必要的分頁保留可抓,排序類、追踪類參數在 robots.txt 屏蔽,或用 canonical 指向規范頁。
- 站内搜尋结果頁加 noindex,同时避免在正文和導航里大量連結到搜尋结果。
- 站内連結只指向規范地址,不要在不同位置混用带參數與不带參數两種寫法。
- 改版时把舊路径做成 301,而不是让新舊两套長期並存。
用日誌核對現状
判断問题是否存在,不必凭感觉,翻一周抓取日誌就够了:
- 統計同一模板下被抓取的 URL 數量與總請求數,看是否明顯多于實际内容量。
- 找出請求次數靠前、但内容高度相似的路径,例如只差一两個參數的頁面。
- 观察是否在某個時間段集中出現大量陌生參數 URL,通常来自蜘蛛自行组合或外部連結。
- 對比這些 URL 的返回狀態,若大量是 200 且内容雷同,說明它們确實在消耗抓取。
需要区分两件事:不被索引,和不被抓取。noindex 只解决前者。若重复 URL 的基數很大,抓取額度仍會被持續占用,真正需要被發現的頁面反而排在後面。
所以更實际的顺序是:先减少重复 URL 的产生,再用标簽做补充。标簽是兜底,不是源头治理。把地址數量控制在和内容量匹配的范围内,抓取行為才有余力照顾到真正有價值的頁面。