为什么 hreflang 值得单独查一遍
多语言或多地区站点如果没有把 hreflang 标清楚,搜索引擎面对同一款产品的几个语言版本,只能自己猜哪个该给哪类用户。猜错的代价很直接:该被展示的版本进不了对应地区的搜索结果,不该被展示的版本互相争抢,站内几个语言目录还可能被当成重复内容处理。
hreflang 本身不提升排名,它只做一件事:告诉搜索引擎这几组 URL 是同一内容的语言或地区变体,请按用户的语言和地区选择对应版本。标注错了,不如不标。
先确认站点是不是“真的多语言”
以下几种情况其实不需要 hreflang:只是把中文页面机翻后挂在 /en/ 下、内容高度雷同;或者所有语言版本共用一套 URL,靠前端切换文案。前者容易产生薄内容,后者对搜索引擎来说只有一个页面。真正需要标注的是:同一主题有独立 URL、内容各自完成本地化、面向不同语言或地区用户。
五类高频问题
1. 只有单向标注,没有互相回指
hreflang 要求成组关系完整:A 页标注了 B 页,B 页也必须标注 A 页,并且每个页面都要包含指向自身的标注。只做单向是新手最常见的错误,效果基本等于没标。
2. 语言与地区代码写法不规范
语言用 ISO 639-1,地区用 ISO 3166-1 Alpha 2,常见写法如 zh-Hans、zh-Hant、en-US、pt-BR。同一站点内要么统一用“语言+地区”,要么统一用纯语言,不要一半 zh-CN、一半 zh,让搜索引擎反复判断。
3. x-default 缺失或指错
x-default 用来指定“没有匹配到语言时展示哪个版本”,通常指向语言选择页或不自动跳转的默认版本。把它指向某个具体语言页,容易让其他地区用户被硬塞进不熟悉的语言。
4. 和 canonical 打架
如果每个语言版本都在 head 里写 canonical 指向同一个英文页,等于告诉搜索引擎“这些页面都归并到英文版”,hreflang 的区分作用就被抹掉了。正确做法是每个语言版本 canonical 到自己。
5. 靠 IP 或浏览器语言自动跳转
用 301、302 按 IP 或 Accept-Language 跳转,蜘蛛从不同地区抓取时会拿到不同结果,很容易造成版本混乱。更稳妥的方式是给出语言选择入口,让用户自己切。
一套可执行的自查流程
- 整理所有语言/地区版本的 URL 清单,做成表格,列清语言、地区、模板类型。
- 抽 10 到 20 个代表页:首页、主要栏目页、详情页、帮助页、活动页,逐页对照。
- 抓取这些页面的 head,检查 alternate 标签是否双向回指、代码是否规范、URL 是否与 canonical 一致。
- 确认 hreflang 指向的 URL 返回 200、没有被 robots.txt 拦、没有多余参数造成重复地址。
- 检查同一页面是否有多种标注方式重复出现,比如 head 里写了、sitemap 里也写了但内容不一致。
- 如果站点有移动版或 AMP 版本,单独确认这些版本是否也带着完整的标注。
- 修改后隔一段时间再看日志,观察不同地区爬虫的抓取分布和落地页是否合理。
别忽略内容对应关系
hreflang 只是外层的声明,底层还是内容。把两个不相关的页面互相标注,或者把机翻的薄内容标成“本地化版本”,短期看不出问题,长期会让该语言目录整体表现变差。判断标准很简单:这个语言版本,母语用户读完是否觉得是自己写的。
hreflang 不解决内容问题,它只是让搜索引擎少猜一次。标注之前先把每个语言版本的内容对应关系理清楚,比事后反复调试标签更省事。