搜尋抓取

搜尋蜘蛛抓取:多語言站点 hreflang 與入口分散的梳理

多語言站点常见的 /en/、/zh/ 或多子域结构,若缺少明确的對應關系标注,容易让蜘蛛把同一批内容当成多個入口反复抓取。本文從日誌核對、hreflang 與 canonical 的配合、内鏈與 Sitemap 引導三個方面,梳理入口分散的排查顺序與收敛思路。

搜尋抓取

搜尋蜘蛛抓取:多語言站点 hreflang 與入口分散的梳理

多語言或地区化站点常有几套入口:子目錄 /en//zh/,子域名 en.example.com,或者带語言參數的同一路径。這些入口在视觉上各自成立,但在蜘蛛看来,如果彼此之間没有清晰的關系說明,就容易被当作互不相關的站点分別抓取。结果是同一份内容被多次發現、多次回訪,抓取预算被摊薄,新頁面被發現的节奏也随之變慢。

入口分散通常表現在哪里

  • 日誌里同一篇内容出現多组路径前缀,抓取時間错開但频率接近;
  • 某個語言版本的内鏈只指向自己這一套路径,跨語言入口靠外鏈或跳轉维持;
  • Sitemap 按語言拆成多份,但每份之間没有相互引用,也没有列出對應關系;
  • 頁面上的語言切換使用 JavaScript 或 302 跳轉,蜘蛛不一定能顺着走完。

這些現象單獨看都不算错誤,合在一起就會让入口识別變得模糊。

排查顺序:從確認對應關系開始

  1. 先確認每個 URL 是否有唯一的主版本。 如果同一内容在多個路径下都能完整訪問,需要决定哪一個是主要入口,哪一些是给用戶看的語言版本。
  2. 核對 hreflang 标注是否双向且完整。 A 頁面指向 B,B 頁面也應当指回 A,指向自身的 x-default 不要遗漏。單向标注等于没有标注。
  3. 检查 canonical 與 hreflang 是否互相矛盾。 如果 hreflang 声明了多個語言版本,canonical 又把它們全部指向同一個 URL,說明信息本身就冲突。
  4. 抽查日誌中這些 URL 的抓取频次。 观察是否出現同一内容多入口並行抓取的情况,以及哪種路径被抓得最多。
  5. 检查語言切換連結的實現方式。 用可以直接抓取的 a 标簽,比依赖脚本或跳轉更稳定。

内鏈與導航的引導方式

語言版本之間的互鏈應当落在正文之外的稳定位置:頁头語言切換、頁脚站点地图、栏目的語言列表。這几個位置的連結通常是全站模板,蜘蛛顺着任意一個頁面都能走到其他語言入口。

需要注意的是,不要把語言切換做成“目前頁 + 後缀”的临时拼接。若某些頁面在某個語言下並不存在,拼接出来的地址會直接落到 404 或软 404,反而制造出無效入口。較稳妥的做法是维護一份語言與 URL 的對應表,切換时按表取地址。

Sitemap 與 URL 發現

多語言站点的 Sitemap 可以有两種處理:合並成一份,用 hreflang 标注在每條 URL 上;或者按語言拆分,每份 Sitemap 内部同样带标注。两種方式都可以,關键是別让同一批 URL 在多份 Sitemap 里重复出現且标注不一致。

另外,Sitemap 只列語言主入口,不列带參數的排序頁、篩選頁。參數入口交给内鏈自然發現即可,不必全部塞進 Sitemap,否則會让入口集合變得臃肿。

收敛後值得观察的指标

  • 同一内容的多路径抓取次數是否下降,主入口的回訪是否變得更規律;
  • 新頁面在主要語言入口下的首次發現時間是否趋于稳定;
  • 日誌里 404、301 的比例是否下降,尤其是語言切換产生的跳轉;
  • Sitemap 中 URL 數量與日誌中實际被抓取的 URL 數量是否接近。
入口收敛是一個逐步調整的過程。改動後不要急着下结论,给蜘蛛一到两個抓取周期去反映變化,再對比日誌中的路径分布。

如果站点同时使用蜘蛛池或其他外部入口做牵引,注意外部入口尽量直接指向語言主入口,而不是指向带參數的中間頁或跳轉頁。入口越干净,路径判断越简單。