搜尋抓取

同一個頁面的多種寫法:URL 變体怎样把抓取量分成几份

同一份内容如果存在 http 與 https、带 www 與不带 www、大小寫不同、结尾斜杠有無等多種寫法,在蜘蛛眼里就是多個 URL,會各自排队、各自占用抓取額度。本文梳理常见的 URL 變体来源,說明抓取量被摊薄的原因,並给出 301、内鏈统一、Sitemap 只留規范地址等收敛做法與驗證思路。

搜尋抓取

同一個頁面的多種寫法:URL 變体怎样把抓取量分成几份

蜘蛛是按 URL 记帳的。同一個頁面,只要能用两種寫法訪問,在抓取队列里就是两條记錄:各自排队、各自占用预算、各自回传一份内容几乎相同的 HTML。很多站点觉得抓取量不少,但真正需要更新的頁面却迟迟不刷新,問题常常出在這里。

同一個頁面常见的几種寫法

下面這些差异,人眼看不出来,對 URL 来说却是两個不同的地址:

  • 协议:http 與 https 各自算一條 URL。
  • 主机名:example.com 與 www.example.com 是两條 URL。
  • 大小寫:/About 與 /about 在多數服務器上是两個路径。
  • 结尾斜杠:/list 與 /list/ 是否算同一頁,取决于服務器配置。
  • 預設文件名:/index.html、/index.php 與目錄根。
  • 參數:排序、分頁、来源追踪參數的顺序與有無。

單看每一條都不算什么,叠在一起,一個頁面可能生出七八個可訪問地址。

抓取量是怎么被分掉的

抓取队列里排的是 URL,不是“頁面”。当同一份内容有多個地址,通常會發生三件事:

  • 多個 URL 争夺同一份抓取額度,每個都抓得少、更新慢;
  • 内鏈如果指向不同寫法,連結信号被拆到几個地址上;
  • 日誌里抓取次數看着不少,按路径去重之後有效頁面却不多。

這不一定會立刻带来排名問题,但它會让该被重新抓取的頁面排在更後面。

收敛的四步

選定一個規范地址

确定唯一的协议、主机名與路径寫法,其余寫法一律 301 到它。301 是服務器端動作,比頁面里的 canonical 更确定。

内鏈只寫規范地址

導航、面包屑、正文連結、分頁連結统一指向同一寫法。内鏈是蜘蛛發現 URL 的主要入口,入口寫成什么样,它就记成什么样。

Sitemap 只放規范 URL

Sitemap 是“希望被抓的地址清單”。把變体寫進去,等于主動請蜘蛛去抓重复内容。

canonical 用来兜底

canonical 是提示而非指令。当 301 不便實施(例如參數頁需要保留)时用它补充,但不要拿它替代 301。

容易被忽略的几個角落

  • 站内搜尋、篩選、排序生成的參數連結,是否有對應處理;
  • 分享、广告、邮件里的追踪參數,落地頁會不會被记成新地址;
  • 歷史連結里的大小寫混用,服務器是否统一;
  • CDN 回源时 Host 是否归一,避免同一内容在两套主机名上都可訪問。

怎么驗證

從日誌里按路径去重再看一遍抓取分布:把协议、大小寫、斜杠归一之後,統計每個路径被訪問的次數。如果归一後的次數明顯低于归一前的總和,說明變体确實在分走抓取量。归一之後如果某個路径仍長期不被訪問,那更可能是内鏈或 Sitemap 上的入口問题,而不是 URL 寫法問题。

抓取額度不會因為多寫了几個地址而變大,只會被摊薄。

URL 寫法的统一是一件偏底层的事,不做也不會立刻出問题,但它决定了後續的抓取效率是否被無谓消耗。先把地址收敛干净,再谈抓什么、什么时候抓,會省下不少功夫。