你的多语言网站流量突然暴跌?八成是 hreflang 标签写错了
上周三晚上十点,一个做独立站的哥们儿发来微信语音:“我法国站今天UV掉了快一半,后台啥都没动,连广告都暂停了……你快帮我看看!”
我让他直接右键“查看网页源代码”,搜 <link rel="alternate" ——两秒后回他:“你德语页写的是 de-de,谷歌只认 de-DE。”
就这一个字母大小写,整个德语流量被当成无效版本,悄悄踢出了索引。
为什么 hreflang 标签比你想的更容易出错?
hreflang 不是贴个标签就完事的装饰品。它像多语言网站的“户口本”,写错一个字,搜索引擎就可能把你某个语言版本当“黑户”处理。
有个真实案例:一家卖厨具的公司,英语页用 en,法语页用 fr,看着挺干净。但他们在 x-default 里填了 en-US。结果呢?谷歌认为“默认”只适用于美国用户,其他所有非美地区(包括加拿大、爱尔兰、新加坡)的访客,全被塞进了美国站——法国主妇点开页面,看到的是“$19.99”和“pint”单位,当场关掉。
hreflang 的底层逻辑很简单:告诉搜索引擎,“这个页面还有哪些孪生兄弟,在哪说哪种话”。但它对格式极其较真。
语言码必须是 ISO 639-1(比如 zh, en, fr),地区码必须是大写的 ISO 3166-1 Alpha-2(比如 CN, GB, FR)。en-gb ≠ en-GB。前者在谷歌眼里就是废码,后者才是英国英语。
还有一条容易被忽略的铁律:每个页面必须包含指向自己的 hreflang 标签。
比如你在德语页上写了英语和法语的链接,却漏了 <link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />,谷歌会直接判定:“这页没有德语版本”,然后把它从多语言索引里移除。
最常见的5个 hreflang 配置错误,你中了几个?
第一个:把语言当国家,把国家当语言。zh 是中文,不是中国;zh-CN 才是中国大陆简体中文。有人图快写 cn,谷歌根本不认识。uk 是乌克兰,英国是 gb。写错一个,整套多语言结构就卡壳。
第二个:只出不回,单向链接等于没链。
英语页写了 <link rel="alternate" hreflang="de-DE" href="https://example.com/de/" />,
那德语页就必须有对应的一行:<link rel="alternate" hreflang="en-US" href="https://example.com/en/" />。
我查过一个旅游平台,英语页列了5个语种,德语页只回了3个。结果谷歌把德语页当成了“孤儿页”,完全不参与多语言分发。
第三个:hreflang 里的 URL 和实际页面地址对不上。
你在标签里写 https://example.com/de/,但用户点进去的真实地址是 https://example.de/?
谷歌会直接跳过这个标签。协议、域名、路径、结尾斜杠——差一丁点都不行。
第四个:用了相对路径。<link rel="alternate" hreflang="fr-FR" href="/fr/" /> —— 这是错的。hreflang 只接受绝对 URL,必须带协议和完整域名:https://example.com/fr/。
第五个:把首页的 hreflang 复制粘贴到产品页、博客页。
首页有英语、德语、法语三个版本,你直接把这三行代码原封不动贴到某款咖啡机的产品页上。
结果用户从英语首页点进德语产品页,看到的却是首页内容。体验崩了,跳出率也跟着崩。
如何用3步彻底排查 hreflang 标签问题?
别靠肉眼扫几百个页面。用对工具,半小时就能定位大部分问题。
第一步:打开 Google Search Console,直奔“语言定向”报告。
路径:搜索功能 → 语言 → 语言定向。
重点看两个子报告:“没有返回标签”和“无效的 hreflang”。
如果有大量报错,说明基础结构已经歪了。注意:GSC 只显示谷歌已发现的问题,不是全部。
第二步:用 Screaming Frog 爬你最核心的 100 个页面。
免费版足够用(500 URL 限额)。设置好爬取范围,让它提取所有页面的 <link rel="alternate" hreflang="...">。
导出 CSV 后,在 Excel 里用筛选+条件格式:高亮所有地区码小写的(比如 en-gb)、所有 href 是 /de/ 这类相对路径的、所有缺失自引用的行。
第三步:挑 3–5 个关键页面,用 Aleyda Solis 的 hreflang 测试工具验证。
输一个 URL,它会列出所有关联版本,并标出格式错误、循环缺失、URL 不匹配等问题。
这个工具模拟的是谷歌的解析逻辑,比你自己盯着源码猜靠谱得多。
这三步做完,95% 的硬性配置错误都能揪出来。剩下那些,大概率出在动态生成环节——比如 CMS 模板漏判了某些参数分支。
动态网站和静态网站的 hreflang 配置有什么不同?
静态站好办。用 Hugo 或 Jekyll,配好 _config.yml 里的语言映射,模板自动吐出正确标签。我见过最离谱的错误,反而是人手改了生成后的 HTML,把 en-GB 改成了 en-gb。
动态站才是真考验。尤其是带参数、分页、AB 测试的电商或内容站。
参数乱飞是头号杀手。
比如产品页实际 URL 是 https://example.com/product/123?ref=fb&utm_medium=social,
但你在 hreflang 里只写了 https://example.com/product/123。
谷歌会认为这是两个不同页面,hreflang 关系直接失效。
解法很简单:要么在 hreflang 里写完整 URL(含必要参数),要么用 <link rel="canonical"> 明确告诉谷歌“哪个才是主版本”。
单页应用(SPA)更棘手。
像 domain.com/#/fr/produits 这种哈希路由,谷歌基本不抓取哈希后面的内容。hreflang 标签即使写了,也大概率被忽略。
必须确保有服务端渲染(SSR)或预渲染版本,让爬虫能拿到真实的 <html> 和 <head> 内容。
一个价值不菲的教训:从错误中学会的 hreflang 最佳实践
2018 年帮一个厨房小家电客户做四国英语站(美国、英国、澳洲、加拿大),我偷懒全用了 en。
结果:英国用户看到美元标价、美国尺码;澳洲用户看到华氏温度、英寸单位。客服邮箱当天爆满,转化率明显下滑。
后来我改了规则:同一语言不同地区,必须用带地区码的写法——en-US、en-GB、en-AU、en-CA。
而且每一页都加自引用,一行都不能少。
另一个教训来自一个双语博客。我在所有页面的 x-default 都指向 en-US,以为“兜底”很稳。
但忘了同步补上 <link rel="alternate" hreflang="en" href="..." />。
结果德语用户访问时,因为没匹配到 de 或 de-DE,也没 en 标签可选,x-default 就没触发——谷歌直接按语言偏好 fallback 到了法语页。
x-default 不是万能保险,它只在“完全找不到匹配项”时才出手。想让它起效,前提是你得先把常规语言选项配齐。
今天就能执行的3个动作,立竿见影
别等明天,现在就打开电脑:
第一:打开你网站的首页,按 Ctrl+U(Mac 是 Cmd+U),在源代码里搜 hreflang。
确认三件事:有没有 hreflang="x-default";每个语言版本是否都包含指向自己的标签;所有 href 值是不是带 https:// 的完整地址。发现错的,立刻改掉。
第二:打开 Screaming Frog(如果你还没装,官网下免费版,2分钟搞定),输入你首页 URL,设置爬取前 100 个页面,启动。
等爬完,点“Export” → “All Inlinks”,导出 CSV。用 Excel 筛选 hreflang 列,找有没有 en-us 这种小写,或者 /fr/ 这种相对路径。改一个,上传一个。
第三:登录 Google Search Console,进“站点地图”,删掉旧 sitemap,重新提交一个新生成的(确保里面包含所有多语言页面的 URL)。
24 小时后,再去看“语言定向”报告。如果报错数开始往下掉,说明你改对了。
这三步做完,不用等算法更新,也不用重做 SEO,多语言流量就能慢慢回血。hreflang 不是玄学,它只是需要你认真对待每一处大小写、每一个斜杠。