站点做了多语言或多地区版本之后,常见的一种情况是:几个语言版本的页面结构高度相似,只是文字不同,搜索引擎在抓取时容易把它们当成重复内容,最后只留一个版本在索引里,其余的版本权重被分散。hreflang 是用来缓解这个问题的信号之一,但它需要写对、写全,才可能被正确理解。
hreflang 想解决的问题
简单说,它告诉搜索引擎:这几个 URL 是同一内容的不同语言或地区版本,请在对应语言或地区的搜索结果里展示合适的那一个。它不解决抓取问题,也不保证收录,只是减少版本之间的互相竞争。
几个容易写错的地方
回链不完整
hreflang 要求互相指向。A 页面标注了 B,B 也要标注 A,否则这组关系是断的。很多站点只在主版本上写了一遍,分支页面没有任何标注,等于白写。
语言与地区代码不规范
语言用 ISO 639-1 两位代码,地区用 ISO 3166-1 Alpha 2,形如 zh-CN、en-US、es-ES。写成 zh_CN、en_US、ES 这类形式,机器可能直接忽略。地区部分可以省略,但语言部分不能随意缩写。
x-default 缺失
当用户的语言或地区没有明确匹配项时,需要一个兜底版本,通常用 x-default 指向它。常见做法是指向英文版或者语言选择页,具体看你的业务覆盖范围。
和 canonical 打架
如果每个语言版本都 canonical 到同一个 URL,同时又用 hreflang 声明它们是并列版本,两个信号就互相矛盾了。通常建议每个语言版本 canonical 到自己。
标注了不存在的页面
指向 404、被 robots 屏蔽或者被 noindex 的地址,会让整组关系失效。改版或下线页面之后,记得同步清理 hreflang 里的死链。
自查清单
- 列出所有语言或地区版本,确认每个版本都出现在其他版本的 hreflang 列表中,形成闭环。
- 检查代码拼写,语言和地区代码符合标准格式,不要混用下划线和大小写。
- 每组关系里有且只有一个 x-default。
- hreflang 指向的 URL 全部可访问,返回 200,且没有被 noindex。
- hreflang 里的地址与页面 canonical 地址保持一致,不要一个带 www 一个不带。
- 确认标注方式统一:head 里的 link 标签、HTTP 头、sitemap 三种方式选一种为主,不要混着用还互相矛盾。
写完之后看什么
hreflang 生效不会立刻体现在排名上,更实际的观察方向是抓取和索引:用站长工具或服务器日志看各语言版本是否都被抓取过,索引里是不是长期只剩一个版本。如果分支版本始终抓不到,先回去检查站内链接和 sitemap 有没有把它们暴露出来,hreflang 本身不负责让页面被发现。
多语言站点的根本还是内容差异。如果两个版本只是粗翻的替换,hreflang 写得再规范,也很难改变它们被视为近似重复内容的结果。