站点运营

站点运营:多語言與多地区版本自查,別让 hreflang 互相打架

多語言或多地区站点上线後,hreflang、canonical 與頁面互鏈如果不一致,容易让各版本互相分流。本文整理了一張版本對照表、五個高频出错点和一份可执行的自查清單,帮你在改版和新增語言版本时把對應關系理清楚。

站点运营

站点运营:多語言與多地区版本自查,別让 hreflang 互相打架

站点做了多語言或多地区版本之後,最容易出問题的往往不是翻译质量,而是各版本之間的對應關系。搜尋引擎判断“這些地址是不是同一内容的語言變体”,主要看 hreflang 注解、canonical 声明和頁面之間的互鏈。三處信号一旦打架,常见的结果就是各版本互相分流,或者只有主版本被保留,其余版本長期没有存在感。

先把自己有多少個版本理清楚

動手改代碼之前,建议先做一張表,把每個版本的基本信息列出来,這張表本身就是後續自查的依據:

  • URL 地址,尽量保持结构對應,例如 /cn//en//zh-hans/
  • 語言或地区代碼,如 zh-Hans、zh-Hant-HK、en-SG;
  • 该頁面的規范地址(canonical)指向哪里;
  • 它在頁面上指向了哪些其他語言版本,又是否被對方回指。

版本數量不多的站点,這張表几分钟就能填完,但能省掉後面大量的猜测。

几個高频出错的点

1. hreflang 指向了不存在或已改版的地址

改版时只換了 URL,忘了同步 hreflang,是最常见的情况。這類注解等于给搜尋引擎指了一條死路,既浪費抓取,也让對應關系断掉。每次調整 URL 结构後,應该把 hreflang 一起過一遍。

2. 只寫單邊,没有互相指向

hreflang 需要相互声明。A 頁面寫了指向 B,B 頁面也要寫回指向 A,否則這種對應關系不成立。用脚本批量检查时,可以按“是否互為镜像”的思路去比對。

3. x-default 缺失或指向含糊

x-default 用来指定没有匹配到合适語言时展示哪個版本,通常指向語言選擇頁或預設版本。它不必每個頁面都寫,但站点級的選擇頁應该有明确指向,避免出現空值或多重冲突。

4. canonical 和 hreflang 互相矛盾

如果英文頁的 canonical 指向中文頁,等于告诉搜尋引擎“這两頁其實是一頁”,此时 hreflang 的語言区分就失去意义。canonical 應当是自指的,語言区分交给 hreflang 處理。

5. 用 IP 或浏览器語言做强制跳轉

用戶一進首頁就被跳到某個語言版本,看上去体驗不错,但蜘蛛從不同地区抓取时容易只看到同一個版本,其余版本很难被發現。更稳妥的做法是给出明确的語言切換入口,把選擇權留给用戶和爬虫。

一份可执行的自查清單

  1. 列出所有語言版本 URL,確認每個地址返回 200,没有多余跳轉。
  2. 逐頁核對 hreflang 是否為双向声明,代碼拼寫是否規范,避免随手寫成不标准的形式。
  3. 检查自指是否遗漏:每個頁面也應当包含指向自己的 hreflang。
  4. 確認 canonical 自指,且不與語言版本互相覆盖。
  5. 检查站点地图是否覆盖各語言版本,不要只提交主語言。
  6. 確認語言切換連結是可抓取的 a 标簽,而不是只绑定了 JS 事件。
  7. 抽查几组頁面,看返回内容與声明的語言是否一致。
  8. 记錄改動時間,方便後續在日誌和抓取資料里對照效果。

改完之後怎么看效果

調整 hreflang 不會立刻带来變化,通常需要等搜尋引擎重新抓取並處理。可以结合服務器日誌,观察各語言版本的抓取频次是否趋于均衡;也可以搜尋几個長尾词,看返回的是不是對應語言版本。若某個版本長期没有任何抓取记錄,優先检查它是否被 robots 規則、跳轉或 canonical 挡住。

把 hreflang 理解成“提示”而不是“命令”更合适:它帮助搜尋引擎理解版本關系,但不能替代内容本身的獨立價值。多個語言版本如果只是机器翻译的近似複製,對應關系寫得再規范,也很难获得理想的展示。