hreflang标签必须在每个语言版本页面的<head>中成对互指全部版本,使用绝对URL、符合BCP 47规范,且与lang属性无关;优先采用子目录/子域名结构,避免参数路由,并通过Search Console验证连通性。

hreflang 标签必须在每个语言版本页面的 <head> 中显式声明全部互指关系,漏掉任意一个都会导致搜索引擎无法建立语言闭环,轻则分流不准,重则整组页面被降权。
hreflang 必须成对互指,不能只写单向
常见错误是只在英文页里加指向中文页的 <link rel="alternate" hreflang="zh-CN" href="/zh/">,却忘了在中文页里补上回指英文页的 <link rel="alternate" hreflang="en" href="/en/">。搜索引擎会把这理解为“中文页没有对应英文版”,从而放弃索引或错配流量。
正确做法是:每个语言页都要列出所有语言版本(含自己),包括 x-default(可选):
<link rel="alternate" hreflang="en" href="https://example.com/en/" /> <link rel="alternate" hreflang="zh-CN" href="https://example.com/zh/" /> <link rel="alternate" hreflang="ja" href="https://example.com/ja/" /> <link rel="alternate" hreflang="x-default" href="https://example.com/en/" />
- 所有
href必须是绝对 URL,相对路径会被忽略 - 每个
hreflang值必须符合 BCP 47(如zh-Hans可用,zh_CN或chinese无效) - 不要在同一个页面中重复声明同一
hreflang值
hreflang 和 lang 属性完全无关,别混用
很多人以为加了 <link rel="alternate" hreflang="zh-CN"> 就等于页面自动变成中文渲染——不是的。这个标签只对搜索引擎起作用;浏览器是否按中文排版、朗读、拼写检查,全看 <html lang="zh-CN"> 和局部 lang 属性。
立即学习“前端免费学习笔记(深入)”;
典型翻车场景:
- 英文页
<html lang="en">,但嵌入一段中文说明没加<p lang="zh-CN">→ 屏幕阅读器用英语念中文词 - 中文页写了
hreflang="en"指向英文版,但英文版<html>仍为lang="zh-CN"→ 搜索引擎收了 hreflang,浏览器却当它是中文页渲染
记住:hreflang 是给爬虫看的链接关系,lang 是给浏览器和辅助技术看的内容语言。
URL 结构决定 hreflang 配置粒度
hreflang 不是“页面级开关”,它绑定的是具体 URL。如果你用子目录(/en/, /zh/)或子域名(en.example.com),每个 URL 都要独立配置 hreflang;但若用参数(?lang=zh),Google 明确不推荐——它可能忽略参数版 hreflang,或误判为重复内容。
所以实际操作中:
- 优先选子目录或子域名,避免 query 参数做多语言路由
- 每个语言 URL 对应一个静态 HTML 文件(或 SSR 渲染结果),确保
<head>中 hreflang 可稳定输出 - SPA 类应用(如 React/Vue)必须在服务端注入 hreflang,不能仅靠 JS 动态生成 —— 爬虫不执行 JS
验证 hreflang 是否生效,别只信浏览器源码
即使你手写的所有 <link rel="alternate" hreflang="..."> 都出现在源码里,也不代表 Google 已接受。真正要查的是 Google Search Console 的「国际化目标」报告,或用第三方工具(如 Screaming Frog、Ahrefs Site Audit)抓取后分析 hreflang 网络连通性。
最容易被忽略的三个失效点:
-
href地址返回 404 或重定向到其他语言页(比如/zh/302 跳转到/) - 某语言页缺失
hreflang="x-default",且用户浏览器Accept-Language匹配不到任何已声明语言时,Google 不知道该推哪个 - HTTP 响应头中同时存在
Link: <...>; rel="alternate"; hreflang="...",与 HTML 中的 hreflang 冲突(二者选其一即可,混用易出错)
复杂点在于:hreflang 是一组强依赖关系,只要其中一环断开(比如日文页上线晚、链接写错、服务器未配好),整组语言版本的国际 SEO 权重都可能被稀释——这不是单页问题,是拓扑问题。



















