搜尋抓取

同一個頁面被蜘蛛当成好几個 URL:重复入口怎么收敛

同一份内容如果在多個 URL 上都能返回 200,蜘蛛通常會当成多個地址分別排队抓取。本文梳理重复入口的常见来源、它對抓取预算和内鏈判断的影响,以及用 301、canonical、内鏈统一和 Sitemap 收敛的具体做法,並列出几個容易踩坑的细节。

搜尋抓取

同一個頁面被蜘蛛当成好几個 URL:重复入口怎么收敛

對蜘蛛来说,你的頁面首先是一串 URL。它並不像人那样“看内容認頁面”,而是把能返回正常狀態碼的地址当成獨立目标收進队列。同一份内容如果在好几個 URL 上都能打開,而且都是 200,那它多半會被拆成好几份来抓。重复入口的問题就是這么来的。

重复入口通常從哪冒出来

多數站点並不是故意做出多套 URL,而是被技術细节顺手造出来的。常见的有這几類:

  • 带尾斜杠和不带尾斜杠同时可訪問,例如 /about 和 /about/。
  • http 與 https、www 與非 www 之間没有做统一跳轉。
  • 目錄根與預設文件名並存,例如 /list/ 和 /list/index.html。
  • 跟踪參數被寫進站内連結,例如 utm、ref、from 之類。
  • 列表頁的排序、篩選、视图切換參數被大量複製成新地址。
  • 同一内容同时挂在多個栏目路径下,例如文章既在 /news/ 又在 /topic/。
  • 會话 ID、打印版、分享短鏈残留,還都能正常打開。

它带来的實际影响

這類問题不會立刻让站点出故障,但會持續消耗资源:

  • 抓取预算被摊薄。同一份内容占掉多個队列位置,真正需要更新的頁面就排得更靠後。
  • 内鏈指向被分散。站内几百條連結如果指向的是三四個不同變体,就很难说清哪個是被推荐的版本。
  • 日誌不好讀。同一個頁面在日誌里散成好几组地址,判断覆盖情况时容易看错。
  • 變体頁面内容略有差异时,還容易被当成不同頁面處理,而不是同一頁的重复。

收敛的具体做法

  1. 先定一個規范版本,把全站内鏈统一到它:導航、面包屑、列表、正文、Sitemap 都只出現這一個。這一步最有效,也最容易被忽略。
  2. 能确定唯一版本时,其余變体直接做 301。跳轉目标就是規范地址,不要绕中間頁。
  3. 無法跳轉的场景(例如某些參數頁仍需保留訪問),在頁面里用 rel=canonical 指向規范版本。注意它是提示而非指令,需要和 301、内鏈一起用。
  4. Sitemap 只列規范 URL。把變体地址寫進去,等于主動把它們再送進队列一次。
  5. 無關參數在服務器层面直接 301 或返回 404,而不是用 robots.txt 屏蔽。
  6. 定期把服務器日誌里的抓取地址和 Sitemap 里的地址對一遍,看還有哪些變体在被频繁抓取。
用一個简單办法自查:把同一篇文章的几個可能地址都打開一遍,看它們最终停在哪一個 URL 上。如果它們各停各的,說明收敛還没做完。

几個容易踩的地方

canonical 指向了抓不到的地址

規范地址本身必须是可抓取、可訪問的。指向一個被 robots.txt 屏蔽的路径,或者指向一個 404,等于把提示作废。

用屏蔽代替收敛

把變体頁在 robots.txt 里 Disallow 掉,蜘蛛就看不到頁面里的 canonical 提示,也没法顺着跳轉走到規范版。除了极少數确實不该抓的路径,重复問题優先用 301 和 canonical 處理。

把分頁參數也当成重复

分頁、翻頁參數是蜘蛛走到老内容的通道,不要顺手屏蔽或统一跳轉到首頁。需要控制的是同一頁面的無意义變体,不是有效的翻頁路径。

canonical 鏈式互指

A 指向 B、B 指向 C 這種多跳寫法,會拖慢判断速度。直接一步指向最终版本更干脆。多語言、多地区站点用 hreflang 處理對應關系,不要用 canonical 彼此指向。

什么时候需要再复查一次

改版、換域名、上线新的篩選功能、調整 CDN 或跳轉規則之後,重复入口很容易重新長出来。把這些時間点记下来,過几周再看一次日誌里同一内容的 URL 數量,比一次性處理完更贴近實际。收敛這件事更像是维護习惯,而不是一次性的清理動作。