蜘蛛池知识

蜘蛛池入口頁的 URL 归一:同一頁面怎么被拆成好几個地址

同一個入口頁在蜘蛛眼中可能變成多個 URL:协议、主机名、大小寫、结尾斜杠、預設文档和參數都會造成分裂。本文梳理這些差异如何摊薄抓取配額、干扰日誌統計,並给出统一規則、内部連結一致、301 归一、canonical 與參數取舍的具体做法,同时說明哪些差异應当保留。

蜘蛛池知识

蜘蛛池入口頁的 URL 归一:同一頁面怎么被拆成好几個地址

做蜘蛛池的人常遇到一種情况:日誌里抓取請求看着不少,但真正被索引的入口頁並没有同步變多。追問下去,很多时候不是蜘蛛不来,而是同一個入口頁在它眼里變成了好几個不同的 URL,抓取配額被摊薄了。這一篇只讲 URL 层面的重复,不涉及内容质量判断。

一個入口頁怎么會變成多個地址

下面這些差异,在浏览器里訪問几乎没感觉,但在蜘蛛的待抓队列里往往是彼此獨立的一條:

  • 协议與主机名:http 與 https、带 www 與不带 www、不同子域名(即使模板完全相同)。
  • 路径大小寫:/PageA 與 /pagea。Windows、IIS 环境常不区分,Linux、Nginx 預設区分。
  • 结尾斜杠:/a 與 /a/。
  • 預設文档:/a/ 與 /a/index.html。
  • 查询參數:?id=1、?id=1&from=x、參數顺序颠倒。纯锚点(#後面部分)通常不产生新地址。

重复地址會带来什么

  • 抓取配額被摊薄:原本能爬一百個位置的量,分给了三個互為镜像的地址。
  • 日誌統計失真:按路径去數“蜘蛛来過几次”,结果高估或低估都不奇怪。
  • 信号分散:外鏈、内部連結分別指向不同版本时,蜘蛛收到的信息不统一。
  • 维護成本上升:改一次入口頁模板,要逐個確認几個地址是否同步生效。

把 URL 收紧的几條做法

  1. 先定一套規則並寫下来:全站路径统一小寫、统一结尾斜杠、只保留一個主机名、统一走 https。
  2. 内部連結用同一套寫法。入口頁之間的互鏈、列表頁連結、sitemap 中的地址都按這套規則輸出。
  3. 老地址用 301 归一到正式地址,不要留 302,也不要留多跳鏈條。
  4. 模板里輸出 canonical,指向归一後的地址,和實际返回的内容保持一致。
  5. 參數能减就减。UTM、来源标记這類只用于統計的參數,不要寫進站内連結。
  6. 需要保留參數的頁面(分頁、篩選),固定參數顺序,避免同一组參數出現多種排列。
  7. 在服務器层做重寫,让 /a 直接跳到 /a/,而不是两份内容各自返回 200。

几個容易被忽略的例外

不是所有差异都该抹平。分頁參數、篩選參數往往對應真實不同的内容列表,一刀切屏蔽或全部 301 到首頁,反而让蜘蛛走不到深层頁面。判断标准其實很简單:這两個地址返回的内容是否真的不同?内容相同就归一,内容不同就保留,並让它們互相可以被發現。

另外,不要在 robots.txt 里屏蔽重复地址来图省事。被屏蔽的 URL 蜘蛛通常不會抓取,也就看不到你設定的 301 或 canonical,归一動作等于白做。合理的顺序是:先让它能抓、能跟着跳,再完成归一。

URL 归一本身不产生新内容,它做的是別让有限的抓取配額浪費在镜像地址上。在入口頁數量扩張之前,先把這套規則落到模板、站内連結和服務器配置里,比事後一個個去改要省事得多。