多语言或多地区站点常见的情况是:同一个产品、同一篇内容被拆成几个语言版本,但彼此之间没有明确的关系说明。用户看到的是语言切换器,搜索引擎看到的却是一堆内容相似、指向不清的页面。hreflang 就是用来把这些关系讲清楚的标注,它不保证排名,但能减少版本之间互相打架的概率。
先判断是否真的需要 hreflang
如果站点只有一种语言,或者不同语言版本的内容差异极大、面向的市场完全分开,那么不标注也不一定出问题。真正需要 hreflang 的场景是:多语言版本内容高度对应,只是语言或地区不同,希望搜索引擎把正确的版本展示给对应的用户。
还有一种情况是地区差异,比如简体中文面向大陆、繁体中文面向港台,语言代码相近但地区不同,这时用 zh-CN、zh-TW 这类组合表达更清楚。
hreflang 的三个基本要求
- 双向标注:A 页面标注 B,B 页面也必须标注 A。单向标注等于没标。
- 自引用:每个页面都要把自己也放进标注列表里,否则容易让搜索引擎漏掉当前版本。
- 默认版本:用 x-default 指定没有匹配到语言时展示的页面,通常是语言选择页或英文主版本。
和 canonical、noindex 怎么配合
hreflang 解决的是给谁看的问题,canonical 解决的是哪个算主版本的问题,两者不冲突,但不能互相矛盾。如果 A 页面的 canonical 指向 B 页面,同时在 hreflang 里又说 A、B 是并列的语言版本,搜索引擎就得花时间猜你的意图。
更常见的错误是把某个语言版本设成 noindex,却仍然在别的页面里用 hreflang 指向它。这样指向的是一个明确不想被索引的地址,标注基本失去意义。
容易踩的坑
- 只在一个语言版本上写 hreflang,另一端完全没有对应标注。
- 语言或地区代码写错,用了不规范的写法,导致标注无法被正确识别。
- 用 JavaScript 动态插入 hreflang,而页面初始 HTML 里没有。蜘蛛不一定执行脚本,或者执行时机不稳定。
- 标注指向的 URL 与页面实际地址不一致,多一个斜杠、少一个参数都会让标注失效。
- 语言切换器做成下拉框、按钮或纯 JS 跳转,蜘蛛拿不到真实的链接地址。
- 把 hreflang 当成排名手段,指望标注之后排名立刻变化。
一次可执行的自查流程
- 导出站点所有语言版本的 URL,按语言和地区分类,确认每一条是否有对应版本。
- 检查每个页面的 head 里是否存在 hreflang 标注,是否包含自引用和 x-default。
- 抽查双向关系:从 A 页面出发能否找到 B,从 B 能否回到 A。
- 确认标注里的 URL 与 canonical、站点地图中的地址一致,避免尾斜杠、大小写、协议不统一。
- 检查语言切换器输出的是真实可抓取的 a 标签链接,而不是依赖点击事件。
- 把多语言 URL 一并写进 sitemap,必要时在 sitemap 里补充对应的语言标注。
hreflang 是说明页面关系的工具,不是修复内容重复的万能方案。如果两个语言版本内容几乎一样,只是在做关键词覆盖,先想清楚这样拆分的必要性,再谈标注。
多语言站点的问题往往不在标注本身,而在标注背后的结构是否清晰。语种、地区、canonical、内链、站点地图这几件事保持一致,蜘蛛才不用在每个页面之间来回猜测。把关系整理一次,比事后反复调整要省事得多。