網站收錄

多語言站点的收錄错乱:語言版本、hreflang 與 canonical 的核對顺序

多語言或多地区站点常出現部分語言版本不被索引、搜尋结果里只出現一種語言的情况。本文按 URL 结构、hreflang、canonical、入口連結四步拆開核對,說明每一步容易出错的地方,並给出一份可直接照做的自查清單。

網站收錄

多語言站点的收錄错乱:語言版本、hreflang 與 canonical 的核對顺序

多語言或多地区站点常遇到一類現象:明明每個語言版本都有獨立 URL,搜尋结果里却只出現其中一两個,或者中文頁面出現在英文搜尋结果里。這通常不是蜘蛛對你的站有意见,而是語言版本之間的關系没有表達清楚:哪几個是同一份内容的不同版本、哪几個是各自獨立的頁面,搜尋引擎只能從代碼和連結里讀取答案。

先分清两件事:語言版本不是重复内容

同一個頁面翻译成五種語言,本质上是五個面向不同用戶群的獨立頁面,理论上應该各自被索引。但如果處理不当——比如所有語言版本共用同一個 canonical,或者語言版本之間只有 JS 切換、没有獨立可訪問的 URL——就會被当成一份内容處理。

反過来,同一語言下的不同 URL(带參數、大小寫差异、带預設文件名)才是需要收口的重复内容。這两件事的解法刚好相反:前者要突出各自的獨立性,後者要合並到唯一地址。混在一起改,往往越改越乱。

第一步:確認 URL 结构是否可被抓取

三種常见结构

  • 子目錄:example.com/zh/、example.com/en/,最容易维護,信号集中,适合大多數站点。
  • 子域名:zh.example.com、en.example.com,部署灵活,但常被当成獨立站点看待,需要更多信号来關联彼此。
  • 獨立域名或地区域名:example.cn、example.com,地区信号最强,但内容同步和运营成本最高。

结构本身没有绝對好坏,問题多出在混用:一部分語言放在子目錄,一部分放在子域名,導航又互相跳轉。抓取路径越绕,被完整發現的机會就越少。

第二步:hreflang 寫對了吗

hreflang 的作用是告诉搜尋引擎這几组地址是同一内容的不同語言版本,請分別處理。常见错誤有:

  • 只寫了單向引用,A 指向 B,B 却没有指回 A。
  • 語言代碼格式寫错,例如把 zh-CN 寫成 zh_CN 或 cn。
  • 指向了會跳轉的舊地址,或者指向已经 404 的頁面。
  • 只寫在 sitemap 里而頁面 HTML 里没有,两邊说法不一致。
  • 漏寫自己指向自己這一條。
hreflang 不解决收錄問题,它只负责把語言版本之間的關系说清楚。頁面能不能進索引,前提仍然是可被抓取、有内鏈入口、内容本身站得住。

第三步:canonical 要指向本語言版本

最常见的错誤是:所有語言版本的 canonical 全部指向英文或主語言版本。這等于直接声明其他語言頁面是副本,長期看這些頁面很难稳定留在索引中。

正确做法是每個語言版本的 canonical 指向自身。只有在處理同語言下内容确實相同的變体地址时,才让 canonical 指向另一個地址。

第四步:入口和語言切換方式

  • 語言切換尽量做成可点击的普通連結,而不是纯 JS 下拉或按钮跳轉。
  • 每個語言版本都應有對應的導航和栏目頁,不要只翻译一個首頁。
  • 預設語言入口放在根路径或首頁顯眼位置,方便顺着連結走。
  • 如使用自動跳轉,要提供手動切換,避免跳到無法返回的頁面。

自查清單

  1. 每個語言版本是否有稳定、不重叠的 URL,且可直接訪問?
  2. hreflang 是否双向、語言代碼正确、指向可訪問地址、包含自引用?
  3. canonical 是否都指向自身語言版本?
  4. 頁面 HTML 與 sitemap 中的 hreflang 是否一致?
  5. 語言切換是否為普通連結,蜘蛛能顺着連結走遍所有版本?
  6. 各語言版本是否有真正的本地化,而不只是机器翻译後一字不改?

收口顺序建议

先解决能不能被抓到(入口與連結),再解决是不是被当成同一份(hreflang 與 canonical),最後才看内容质量與本地化程度。顺序颠倒的话,改完 hreflang 但語言頁面根本没有内鏈入口,短期内很难看到變化。

調整之後建议观察一段時間,用站点日誌確認各語言版本的抓取频次,再结合索引狀態判断。多語言站点的信号传递本来就比單語言站点慢一些,一次改動之後不必反复来回修改配置。