做多语言或多地区站点时,最容易出问题的往往不是翻译质量,而是“版本之间的关系”没交代清楚。同一个产品页,简体版、繁体版、英文版各自独立,如果没有明确的对应关系,搜索引擎判断该给哪个地区的用户展示哪个版本时,就只能靠猜。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 不保证任何展示结果,它只是把版本关系说明白。把它配正确,更多是减少误判,让每个语言版本都有被正确识别的机会。