你刚把多语言站点上线,结果发现:美国用户点进来看到法语页面,德国访客打开的是西班牙语版——连首页都对不上号。Search Console 里一堆“hreflang 不匹配”的红标,可你明明每个页面都加了标签……问题不在漏没漏,而在你加的方式,谷歌根本没当真。

hreflang到底在告诉谷歌什么?

hreflang 不是“请把这页推给某个国家”,而是直接对谷歌说:“这个 URL 是给说某种语言、或住在某地的人准备的,别拿它去糊弄别人。”

比如你卖露营装备,英文版同时服务美国和英国用户。如果没有 hreflang,谷歌可能把标着“$199”、拼写“color”的美国页,推给习惯“£159”和“colour”的英国人——人家看两眼就关掉。

hreflang 的本质,是帮谷歌分辨:这些长得像的页面,不是抄来凑数的,而是认真本地化过的不同版本。它靠用户的浏览器语言设置 + 实际地理位置,决定该推哪个链接。

真实踩坑现场:一个做跨境母婴用品的团队,中文站用了 zh-CN,台湾站用了 zh-TW,但完全没管马来西亚、新加坡的华人用户。结果这些用户搜“婴儿背带”,点进来全是简体字+人民币标价——因为他们的浏览器语言是 zh,而你的标签里没有 zh-MYzh-SG。补上对应标签后,东南亚自然流量才开始稳住。

如何正确部署hreflang的3个核心方法?

方法一:用 <link> 标签放在 <head> 里。这是最常用、也最容易出错的方式。
每个语言版本的页面,都要在 <head> 中列出自己 + 所有其他语言版本的链接。
比如英文首页的 <head> 里得有:

<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

重点看 x-default 这个值:它是兜底选项。当用户语言/地区不在你任何一条 hreflang 里时(比如浏览器设成 de-CH,但你只配了 en-USfr-FR),谷歌就按这个链接来。很多人直接跳过它,结果用户随机刷出一个八竿子打不着的版本。

方法二:用 HTTP 响应头。适合 PDF、Word 这类非 HTML 文件。
你在服务器配置里加上类似这样的响应头:

Link: <https://example.com/en/guide.pdf>; rel="alternate"; hreflang="en",
      <https://example.com/fr/guide.pdf>; rel="alternate"; hreflang="fr"

注意:这不是写在 HTML 里的,而是由服务器返回的原始响应头。Nginx、Apache 都能配,但要确保 CDN 不会把它给吞了。

方法三:用 XML Sitemap。适合页面量大、结构复杂的站点。
在 sitemap.xml 里,每个 <url> 下加 <xhtml:link> 子节点,比如:

<url>
  <loc>https://example.com/en/</loc>
  <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/>
  <xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/"/>
</url>

不管选哪种方式,关键就一条:闭环。英文页指了法文页,法文页必须原样指回英文页。少一个反向链接,整个链路就算断了——谷歌不会报错,只会默默忽略你全部的 hreflang。

为什么你的hreflang设对了还是不管用?

第一大雷:链接不对称。
你给 /en/product/ 加了指向 /fr/produit/ 的 hreflang,但 /fr/produit/ 的标签里要么没写回 /en/product/,要么写错了路径(比如漏了 /en/ 前缀)。谷歌一检测到这种“单向箭头”,直接判定你配置不可信。

第二坑:语言代码混着用。
en 是泛英语,en-US 是美式英语,en-GB 是英式英语。如果你全站主语言用 en,又单独为英国用户建了个 en-GB 版本,谷歌会懵:同一个词,该用 “color” 还是 “colour”?该显示美元还是英镑?建议统一层级:要么全用 en / fr / de 这种语言级,要么全用 en-US / fr-FR / de-DE 这种语言+地区级,别交叉。

第三处隐形故障:URL 结构不一致。
比如英文在 example.com/en/,法文却跑到了 fr.example.com。这时 hreflang 里的链接必须是完整绝对地址,不能写 /en///fr.example.com。曾经有个旅游博客,日文页在 jp.example.com,但中文页的 hreflang 里写的却是 /ja/ ——谷歌压根解析不了,日本用户点搜索结果进来,看到的全是简体中文。

3个你最容易忽略的hreflang细节

  1. 语言和地区代码必须严格按标准来。
    zh 是中文(ISO 639-1),CN 是中国(ISO 3166-1 Alpha 2),合起来是 zh-CNen + US = en-US。别手滑写成 zhoeng-USzh_CH——谷歌不认识,直接当无效处理。

  2. 每个页面必须包含指向自己的 hreflang。
    英文页不仅要写 <link hreflang="fr" ...>,还得有一条 <link hreflang="en" ...> 指向自己。漏掉这条,谷歌可能认为这个页面不属于任何语言分组,干脆不参与多语言分流。

  3. 404 页面和 noindex 页面不用加 hreflang。
    谷歌根本不抓它们,加了也是摆设。尤其注意那些被临时下线、但 URL 还留着的页面——如果还挂着 hreflang,反而会干扰正常页面的闭环关系。

x-default 虽然不是强制项,但强烈建议加上。它不是“默认语言”,而是“兜底入口”。比如你只配了 en-USfr-FR,一个用瑞士德语(de-CH)访问的用户进来,没匹配项,谷歌就随便扔个页面给他。有了 x-default,你就能明确指定:这种时候,请推首页(或英文通用版)。

如何用工具检测hreflang配置是否有效?

别一个个页面右键“查看源码”。真这么干,三天就放弃。

谷歌 Search Console 的“国际定位”报告(在「网站管理」→「国际定位」里)是最直接的诊断窗口。它会清清楚楚标出:“缺少返回链接”、“hreflang 值无效”、“孤立页面”……每周扫一眼,比埋头改代码更省时间。

Screaming Frog SEO Spider 是另一个主力工具。它能一次性爬完你所有语言页面,生成专门的 hreflang 报告,自动标出缺失反向链接、语言代码错误、x-default 缺失等问题。Merke 的在线 hreflang 测试工具也够用——输两个 URL,立刻告诉你它们是否互相认领。

有个做小众户外服饰的品牌,用 Screaming Frog 一扫,发现近三成页面没写回链,还有些页面把 zh-TW 错写成 zh-tw(大小写敏感!)。修复后,非主语言市场的自然流量明显提升,转化率也跟着稳住了。

今天就能执行的3个具体操作步骤

第一步:打开谷歌 Search Console,进入「网站管理」→「国际定位」报告。快速浏览顶部的错误汇总,点开“缺少返回链接”或“孤立页面”这类高亮项,记下前3个出问题的 URL。

第二步:挑你流量最大的语言版本(比如英文站),打开它的任意一个核心页面(如首页或爆款产品页),右键 → “查看页面源代码”,搜索 <link rel="alternate",确认里面是否完整列出了所有语言版本,包括指向自身的那一条。如果缺了,现在就登录 CMS 或服务器,补上。

第三步:打开 Screaming Frog(如果你还没装,官网免费版就够用),输入你主域名,勾选「Crawl JavaScript」和「Parse hreflang」,启动爬取。等跑完后,导出「Hreflang」标签页,重点看“Orphaned URLs”(孤立页面)和“Missing Return Links”这两列。挑出前5个问题最集中的页面,手动补全双向 hreflang 链接。