做多語言或多地区站点时,最容易出問题的往往不是翻译质量,而是“版本之間的關系”没交代清楚。同一個产品頁,简体版、繁体版、英文版各自獨立,如果没有明确的對應關系,搜尋引擎判断该给哪個地区的用戶展示哪個版本时,就只能靠猜。hreflang 的作用是减少這種猜测,但它本身也很容易被配成半成品。
先确定版本用什么形式承载
常见有三種做法,選哪種取决于运营投入和维護成本:
- 子目錄(example.com/en/):共用主域,部署简單,适合大多數中小站点。
- 子域名(en.example.com):技術隔离方便,但要單獨维護證书、robots 和 sitemap。
- 獨立域名(example.co.uk):地区归属感强,但每個域名都要重新积累,运营成本最高。
形式一旦确定,後續的 hreflang、sitemap、内鏈都围绕它来寫,中途更換等于全部重做。
hreflang 的三條基本規則
1. 声明必须互相指向
A 頁面寫了指向 B 的 hreflang,B 頁面也要寫回 A。只寫一半是最常见的错誤,效果往往不如不寫。建议用一張表格把每個語言版本的 URL 列出来逐條對照,比凭记忆靠谱。
2. 語言代碼和地区代碼別寫混
語言用 ISO 639-1 两位代碼(zh、en、ja),地区用 ISO 3166-1 两位代碼(CN、TW、HK、US)。中文简繁要区分:zh-Hans 指简体,zh-Hant 指繁体,只寫 zh 會让搜尋引擎自行判断,简繁版本容易互相顶替。英文同理,en 與 en-GB、en-US 覆盖的范围並不一样。
3. x-default 用来兜底
x-default 指向“没有匹配到任何語言或地区时展示哪一個頁面”,通常放語言選擇頁或預設語言版本。它只應出現一個,不要在每個頁面里塞不同的 x-default。
上线前的自查清單
- 抽查三到五组對應頁面,確認 hreflang 是双向的,URL 没有拼错、没有指向 301 或 404 地址。
- 確認 head 里的 hreflang 與 sitemap 里的寫法一致。两處都寫没問题,互相矛盾就有問题。
- 检查 canonical 是否指向了另一個語言版本。每個語言版本應 canonical 到自己,而不是互相收拢。
- 確認自動跳轉没有把預設版本的頁面藏起来。按 IP 判断地区後直接跳走,會让抓取工具只看到跳轉。
- 在後台查看國际定位相關的报告,留意是否存在“重复網頁,不同語言版本”之類的提示。
- 翻一段服務器日誌,看各語言目錄的抓取频次是否正常,有没有某個版本長期無人訪問。
語言切換器與自動跳轉
語言切換器建议用普通連結,让每個版本都有一個稳定的入口,不要只靠 JavaScript 事件或下拉框隐藏。地区自動跳轉可以保留,但宜做成“提示加可關閉”,並保證跳轉前原頁面能被正常訪問。
一個常见的坑:跳轉把抓取工具一次性带到英文版,之後中文目錄就再也没被抓過。日誌里如果看到某個語言目錄訪問量長期為零,先查跳轉逻辑,再查 robots 和 sitemap。
内容层面的重复問题
多語言的另一個風險是批量生成。為了覆盖更多语種,用机器翻译把同一批頁面翻十遍,正文高度相似、只有語言不同,這類頁面即使 hreflang 配得再准,也很难有獨立價值。更稳妥的做法是先挑几個核心栏目做完整本地化,其余语種等有真實需求再铺開。
日常维護建议
- 新增語言版本时,同步更新 hreflang、sitemap 和導航入口,一次做完。
- 修改 URL 结构时,把 hreflang 一起改,別只改頁面地址。
- 每個季度抽一批頁面复核,重点看地区代碼與語言代碼的對應關系。
hreflang 不保證任何展示结果,它只是把版本關系說明白。把它配正确,更多是减少誤判,让每個語言版本都有被正确识別的机會。