谷歌自己的文档里写得很明白:它判断一个页面是什么语言,不靠hreflang,也不看html里的lang属性,它用算法去读内容本身。一个专门给多语言站用的标签,谷歌居然不拿它认语言,这句话第一次看到确实有点别扭。那它到底管什么?它管的是让谷歌知道,这几页是同一篇内容的本地化版本,好让谷歌把对的网址给对的人。hreflang标签就是干这个的,换网址,不是加名次。猎者出海讲这个标签,先讲它不管什么,再讲它怎么写。
另有一个东西也叫hreflang,容易混。HTML里a链接上可以写一个hreflang属性,那是给浏览器和读者看的提示,跟这里说的SEO用法不是一回事。这篇只说后面这种,它放在页面头部、HTTP响应头或者sitemap里,由谷歌读取。
SEO我做了十几年,技术类的活儿,坑基本都藏在细节里,hreflang就是个典型。
- 三种放法,HTML头部、HTTP头、sitemap,谷歌说三者等价,挑一种就行
- 语言代码用ISO 639-1,地区代码用ISO 3166-1,英国写GB不写UK
- 两个页面不互相指回标签,整组标签会被忽略
- Search Console的国际定位报告2022年已下线,现在没有专门的hreflang错误报告
- Silly Santa 7个国家各一个独立域名的案例里,代理商直接归到hreflang头上的数是挪威站本地流量占比从80%到93%
这篇从它是什么讲到代码放哪、x-default设到哪、跟canonical怎么配、WordPress和Shopify要不要自己动手、出错怎么查、AI能替你做哪几步。网址结构用子目录、子域名还是独立域名,是另一个话题,多语言网站结构怎么选 和 子域名和子目录哪个更利于SEO 里说过了,这篇不重复。
本文目录
- hreflang标签是什么:管「给谁看哪个版本」,不管排名,也不帮谷歌认语言
- hreflang代码怎么写:HTML头部、HTTP头、sitemap三种放法
- hreflang语言和地区代码怎么填:en-GB、zh-Hans、zh-TW写对没有
- x-default是什么:语言对不上时的兜底页,设在语言选择页或主力版本
- hreflang双向回链和自引用:两页不互相指回,整组标签被忽略
- hreflang和canonical怎么配:每个语言版本canonical指向自己
- Silly Santa 7个国家域名配hreflang:挪威站本地流量占比80%到93%,总流量涨幅混了别的工作
- WordPress多语言网站怎么输出hreflang:Polylang、WPML自带,Shopify按市场自动生成
- hreflang常见错误:按IP自动跳转、一页混两种语言、指向404或跳转页
- hreflang怎么检查:Search Console国际定位报告2022年已下线,现在看网址检查和源代码
- 用AI配hreflang:AI按对应表出整组标签,人定哪些页算同一篇
- 常见问题
hreflang标签是什么:管「给谁看哪个版本」,不管排名,也不帮谷歌认语言
谷歌官方文档里那句原话,划定了hreflang的全部边界:不用hreflang、也不用html里的lang属性去判断一个页面是什么语言,它用算法看内容本身。
那它干什么?让谷歌知道这几页是同一篇内容的本地化版本,好在结果里把对的网址给对的人。英文用户看到英文页,德文用户看到德文页。仅此而已。
别指望它加分。谷歌从没说hreflang能提升排名,官方给它的定位就是换网址。做了它,页面不会因此排得更高;不做它,谷歌也可能自己摸到其他语言版本,官方只是说,明确标出来更好。
什么时候需要hreflang
谷歌列了三种情况,对上一种就该配。
- 主体内容只有一种语言,只翻译了导航和页脚这类模板,论坛这类用户生成内容的站常见
- 同一语言给不同地区做了小调整,比如英文版分别给美国、英国、爱尔兰用户
- 整站翻译成多种语言
第二种最容易被忽略。英文站做了美国、英国、澳洲三个版本,内容差不多,只是价格和单位不一样,这种情况不标,谷歌可能在英国用户的搜索里给美国页。
翻译过的页面算不算重复内容
官方原话的意思是,本地化版本只有在主体内容没翻译的时候才算重复内容,翻译过的页面不算。落点在「主体内容」这四个字。
只把导航和页脚翻了,正文还是英文,那仍然算重复。正文翻了,哪怕翻得一般,也不算。这条不改变你怎么配hreflang,改变的是你要不要担心被当成重复页处理。
hreflang属于技术SEO的一部分,Google SEO教程 里有它在整个体系里的位置。
hreflang代码怎么写:HTML头部、HTTP头、sitemap三种放法
谷歌说这三种对它等价。挑一种最方便的就行。三种同时用没有搜索上的好处,反而更难维护。
HTML写法
在页面的head里放一组link标签,每条rel写alternate,hreflang写语言代码,href写这个版本的完整网址。一个英文、德文、简体中文的三语站,加一条兜底,一组四条长这样。
| 这一条指向谁 | hreflang 值 | href 填什么 |
|---|---|---|
| 英文版 | en | https://example.com/en/ |
| 德文版 | de | https://example.com/de/ |
| 简体中文版 | zh-Hans | https://example.com/zh/ |
| 兜底页 | x-default | https://example.com/ |
这一整组四条,要原样出现在这四个页面每一页的head里,包括指向自己的那条。德文页的head里也要有「德文版de指向自己」这么一条。少了自己那条,这组就不完整。
head的结构要完整。标签被塞进body、或者head提前断掉,标签就失效。hreflang也不能跟media这类属性写在同一个标签里。没有sitemap、或者改不了HTTP头的站,用这种。
HTTP头写法
给PDF这类不是网页的文件用。格式是在Link响应头里串一列「网址加rel="alternate"加hreflang」,网址两边要加一对尖括号,几条之间用逗号隔开。
每个版本返回的头都一样,包括指向自己的那条。网页文件一般不用这种方式。
sitemap写法
在sitemap的urlset上声明xmlns:xhtml="http://www.w3.org/1999/xhtml"。每个网址一个url加一个loc,loc下面用xhtml:link把全部版本列出来,包括自己。
几条xhtml:link的先后顺序无所谓,谷歌不看这个。这些xhtml:link子元素也不计入sitemap的网址条数上限。sitemap只能收它自己所在目录下的网址,跨目录的地址放进去不会被处理。

sitemap本身的格式有讲究,sitemap 那篇里有详细写法。
三种放法选哪个
我的建议:WordPress站用多语言插件输出的HTML标签就行,一般不用再手写一套。几万页的大站放sitemap里好维护,改一次模板能影响全站。改不了服务器响应头的,也用HTML。
不建议三种一起上。多一处就多一处会写错的地方,出了问题还得三处对着查。多语言结构这种事,最好在开发阶段就定下来。猎者出海的AI Agent建站分十个阶段,每段一道闸门。像这种后期改起来会连累一大片正文内链的决定,放在前面定省事得多。
hreflang语言和地区代码怎么填:en-GB、zh-Hans、zh-TW写对没有
语言代码用ISO 639-1,可选再加一个地区代码ISO 3166-1 Alpha 2,中间用连字符连起来。不区分大小写,en-GB和en-gb是一回事。
| 写法 | 对不对 | 为什么 |
|---|---|---|
| en-GB | 对 | 英国 |
| en-UK | 错 | UK 是保留地区码,会被忽略,英国要写 GB |
| ja | 对 | 只写语言可以 |
| jp | 错 | 日语的语言码是 ja,jp 是地区码,只写地区不行 |
| de | 对 | 德语,不带地区也认 |
| be | 单看没错,但不是比利时 | be 是白俄罗斯语,比利时的语言是 nl、fr、de |
| es-419 | 不支持 | 拉美西语不在那两个标准里 |
| EU、UN | 被忽略 | 保留地区码,谷歌不认 |
| en_US | 错 | 中间要用连字符,不能用下划线 |
| zh-TW | 对 | 默认理解成繁体 |
| zh-Hant、zh-Hans | 对 | 用 ISO 15924 明写繁简,后面还能接地区,如 zh-Hans-US |
这张表里最容易踩的是en-UK和下划线这两种。前者是习惯写法,后者是从WordPress的语言区域设置直接抄过来的。Polylang会把en_ZA换成en-ZA再输出,你手动写的时候得自己换。
还有一条要记:谷歌不会从网址里的国家码或者子域名去推断目标受众。你以为域名里带个en-gb谷歌就懂了,它不懂,必须用hreflang明说。
中文站用zh-CN还是zh-Hans
面向大陆读者,zh-CN或zh-Hans都对,官方两种都认,WPML官网自己的简体中文页用的是zh-Hans。
同时做繁体给台湾和香港,可以分别写zh-TW、zh-HK,也可以用zh-Hant合成一个。zh-CHS、zh-CHT这类老式写法不属于ISO标准,别用。
x-default是什么:语言对不上时的兜底页,设在语言选择页或主力版本
x-default是给语言设置跟你所有版本都对不上的用户准备的那一条。写法就是hreflang="x-default",后面不带语言码。
它本来是给语言和国家选择页设计的,任何页面都能用。官方建议在语言选择页、或者会自动跳转的首页上加。官方的例子里,这一条指向的是https://example.com/country-selector这样一个选择页。
没有语言选择页怎么办?我的建议是指主力语言版。Polylang的官方示例也是把x-default设成英文版。
这里有个容易混的地方。同一语言有多个地区版本时,官方建议再给一条这个语言的通用版。比如你有en-IE、en-CA、en-AU三个英文页,再补一条en,给美国、英国这些其他英语用户看,这一条可以就是三个地区页里的某一个。这跟x-default是两件事:x-default兜的是语言都对不上的人,通用版兜的是同一种语言但地区没覆盖的人。
hreflang双向回链和自引用:两页不互相指回,整组标签被忽略
这是hreflang最容易崩的一环。官方原话的意思很硬:两个页面不互相指向对方,标签就会被忽略。
注意是「被忽略」,不是报错。页面不会因此出什么问题,只是这几个标签等于没写,谷歌照旧自己猜。
为什么要这么设计?防的是别人冒认。如果单方面指一下就算数,任何人都可以在自己站上加一条,说自己的页面是你英文站的另一个语言版本,把你的流量引过去。这就像两个人握手,一边伸了手,另一边不理,这手就没握上。必须两边都认,才算一组。
自引用是怎么回事
每页列出的那一整组里,必须有一条指向自己。德文页的那组标签里,要有「de指向这个德文页」这条。这条看着多余,实际是这一组完整的一部分。
规模大了怎么不出错
手工维护几十几百页的hreflang,出错是迟早的事。我的建议是别手写,用模板、插件或者sitemap统一生成,改一处全站跟着变。前面sitemap那节和后面WordPress那节讲的都是这个办法。
官方还给了一条退路。维护不过来的时候,可以在一些页面上省掉一些语言,谷歌仍然会处理那些互相指回的页。但新扩的语言页,一定要跟原始版本或者主力语言版本双向连上。官方举的例子是一家原来的法国站,后来做了墨西哥和西班牙的页面,这两个新页要先跟法国站双向连,比它俩互相连更重要。
还有两个硬要求。网址必须是带https的完整地址,https://example.com/de/这种,不能写成以双斜杠或者单斜杠开头的相对地址。各版本之间可以跨域名,七个国家七个域名这种情况是允许的。

hreflang和canonical怎么配:每个语言版本canonical指向自己
官方有句话的意思是:用了hreflang,就要给每一页指定同一语言的规范网址,没有同语言的,就用最接近的替代语言。谷歌在选规范网址的时候,会偏向hreflang组里的网址。
另外一条要记住:带着hreflang属性的rel="canonical"不用于规范化。这两种信号不能塞进同一个标签,各写各的。sitemap和hreflang里放的网址,都要用HTTPS版。
一种错法,是德文页的canonical指到英文页。这等于告诉谷歌「德文页是英文页的重复,别收它」,跟hreflang说的「这是德文版」正好相反。两个信号对着干,谷歌到底听哪个,就不用赌了。
照标准做:每个语言版本的canonical指自己。Silly Santa那四个页面,canonical都指自己,下面会讲到。canonical本身是个大话题,canonical标签 那篇讲得更细。
2018年有位站长问过:canonical写错了谷歌还认吗
谷歌的人在2018年回答过站长。当时的场景是,一位站长把英国站和印度站的英文页canonical到了美国页,结果谷歌仍然按hreflang,在英国和印度的搜索结果里换成对应的网址显示。
谷歌的回答是,它会把其中一个版本当规范网址收录,收录之后再按语言和国家换网址来显示,同一种语言有多个国家的情况更常见。
但这不能指望。照标准做,每个版本canonical指自己,别指望谷歌帮你兜。
Silly Santa 7个国家域名配hreflang:挪威站本地流量占比80%到93%,总流量涨幅混了别的工作
Silly Santa是一家卖圣诞毛衣、圣诞睡衣的欧洲服饰电商,德国、丹麦、芬兰、荷兰、挪威、瑞典、英国7个国家各用一个独立域名、7种语言。这些是给它做SEO的代理商公开的案例页(2026年)里的信息。

它原来的情况是,自然流量里有一部分来自语言相近的邻国。这不算坏事,但让每个域名对应的市场对不准。对方做了两件基础工作:把hreflang信号写干净,每个域名按本地关键词写本地内容。

对方直接归到hreflang头上的只有一个数
代理商自己直接挂到hreflang上的只有一个数:挪威站用hreflang标清市场之后,本地流量占比从80%到93%,其他国家「也有类似效果」。

这个数要照原样看。对方没写时间段,没给截图,也没说这个占比是怎么算出来的。按它给的两个数算,非本地流量占比从20%降到7%,少了约65%。
对方公开的GA4数据比的是什么
对方公开的GA4自然搜索数据,比的是两个旺季:2024年8月到2025年1月,对2025年8月到2026年1月。7个站的用户数是这样。
| 站 | 用户数(2024年8月至2025年1月) | 用户数(2025年8月至2026年1月) | 对方写的涨幅 |
|---|---|---|---|
| 德国 | 136,249 | 183,888 | +34.9% |
| 丹麦 | 29,523 | 53,007 | +79.5% |
| 芬兰 | 28,730 | 37,298 | +29.8% |
| 荷兰 | 24,226 | 58,412 | +141.1% |
| 挪威 | 74,408 | 83,771 | +12.6% |
| 瑞典 | 57,381 | 94,186 | +64.1% |
| 英国 | 41,301 | 164,184 | +297.5% |

英国站从41,301到164,184,按这两个数算是约4倍。德国那条+34.9%是对方写的,照用。

这些涨幅不能算成hreflang带来的
同期代理商还做了一堆事:重点分类页和季节落地页的内容审查,标题和描述全面重写,H1到H3按搜索意图调整,从主题相关来源做外链、每个国家做本地外链,做分类内互链和站与站之间的互链,优化Shopify的购物体验。
所以上面这张表里的涨幅,混了内容、外链、内链这些工作,不是hreflang一招的结果。这些数字不能全记在hreflang头上。
挪威那个数说明了什么
猎者出海在这件事上的判断是:挪威站用户只涨12.6%,是7个站里最少的,可代理商归到hreflang头上的恰恰是挪威。hreflang管的是「来的人是不是对的国家」,不是「来的人多不多」。

北欧几国的语言相近,挪威语、丹麦语、瑞典语互相能看懂一部分。没标清的时候,谷歌容易把邻国的页面给错人。标清之后,来的人里杂质少了,本地占比就上去了,总数未必跟着大动。
2026年10月它的源代码里是什么样
2026年10月它的分类页源代码里,毛衣分类页一组8条标签。x-default指英文、欧元结算的通用站,另外7条分别是de-DE、da-DK、fi-FI、nl-NL、nb-NO、sv-SE、en-GB,各指本国的同类页,网址里的词都是本地语言,挪威用julegenser、瑞典用jultrojor、德国用weihnachtspullover。

英国站、挪威站、瑞典站和通用站这四个页面,这组标签完全一样,每页的canonical都指自己,自引用和双向回链都齐,canonical跟hreflang不打架。挪威用的是nb-NO,nb是书面挪威语。

首页不一样。德国、英国、挪威三个站的首页源代码里都没有hreflang,sitemap里也没有,只有分类页有。官方允许只给一部分页面配,但首页不在组里,谷歌就只能自己判断哪国的首页给谁。

WordPress多语言网站怎么输出hreflang:Polylang、WPML自带,Shopify按市场自动生成
Polylang
Polylang会自动给多语言页面加hreflang,不用你手动设。它的x-default默认只加在首页,条件是首页会按语言跳转。想让每一页都有x-default,要用它的过滤器pll_rel_hreflang_attributes加代码,官方示例是把x-default设成英文版。
WPML
WPML官网自己的首页源代码里,2026年10月看是15条hreflang,14种语言加一条指向英文首页的x-default。它的简体中文页是同一组15条,canonical指自己。它的page-sitemap里也给每个网址写了同一组。

等于它HTML和sitemap两处都写了。谷歌说两处都写没必要,但也不算错。
多语言插件装好后怎么确认它在输出hreflang
hreflang一般由多语言插件输出。装好以后打开页面源代码搜hreflang,看有没有、对不对、是不是整组都在。这是最直接的确认方式,别照着设置页的说明想当然。
Shopify
Shopify帮助中心说hreflang按市场和语言配置自动生成,所有店默认开启。它只给有独立域名、子域名或者子目录的市场生成,子目录版本自动互连,另有一条x-default指向主域名。
所以用Shopify的站,先看后台的市场设置,别再手写一套重复的。Silly Santa是7个各自独立的店,它的hreflang怎么生成的,对方没说,这里不写。
hreflang常见错误:按IP自动跳转、一页混两种语言、指向404或跳转页
按浏览器语言或IP自动跳转
官方明确说别这么做。用户和搜索引擎会因为跳转看不到全部版本。Googlebot大部分从美国发起抓取,而且不带Accept-Language,按浏览器语言切内容的站,谷歌可能抓不到其他语言版本。
那怎么办?在页面上放显眼的语言切换链接,让人自己点。别猜。
一页里左右对照两种语言
每页只用一种语言写正文和导航。谷歌建议别左右对照翻译。只翻模板、正文还是一种语言,效果也可能不好。
hreflang指向的页面是404、跳转页或noindex页
我的建议:指过去的每个网址,都要是200状态、能被收录的那个最终网址。指向404或跳转页,那一页给不出指回来的标签,这一对回链就对不上。
head结构坏了
标签被放进body,或者head提前断掉,标签失效。hreflang跟media属性写在同一个标签里,也一样失效。
把没有对应版本的页面也塞进组里
一篇只有英文、没有德文版的文章,别拿德文首页凑数放进它的组里。hreflang只连同一内容的不同版本,放进去等于告诉谷歌这几页是同一内容的本地化版本,可它们并不是。
还有一句放这里:把别人的内容机器翻译后批量发,属于谷歌垃圾政策里的规模化内容滥用。AI写作怎么不被判低质 那篇讲得细。
hreflang怎么检查:Search Console国际定位报告2022年已下线,现在看网址检查和源代码
先说一件事。Search Console的国际定位报告2022年已经下线了。这个报告原来能看到hreflang错误,也能设整站目标国家。谷歌的说法是它继续支持和使用hreflang,但在Search Console里按国家定位整站的功能不再支持。下线之后,Search Console里就没有专门的hreflang错误报告了。

网上还有不少老教程教你去国际定位报告里看错误,那个入口现在不存在了。
现在按这个顺序查,这是我的建议。
- 打开几个页面的源代码搜hreflang,看整组在不在,有没有指向自己的那条
- 挨个打开指过去的网址,看是不是200,是不是也指回来,canonical是不是指自己
- 在Search Console的网址检查里,看谷歌选的规范网址是不是你想要的那个语言版本
- 站大了用爬虫导出全站的hreflang和canonical,再批量核
Search Console的网址检查怎么用,Google Search Console教程 里有。
谷歌文档里还点名了两个外部工具,一个生成标签,一个测单个线上页面。谷歌说它们不由谷歌维护,用的时候自己核结果。
改完要等谷歌重新抓取这些页面,没有固定的天数。这套流程属于技术SEO的常规自查,技术SEO自查 里还有别的项可以一起过。
上线之后的运营,猎者出海的AI Agent里是运营员工负责,它自己拉数据,每周给一张改稿单,写清楚改哪几篇、改什么、先改哪篇。人要做的是定方向、下命令、验收。
用AI配hreflang:AI按对应表出整组标签,人定哪些页算同一篇
这事AI能省不少手工。前提是你先把「页面对应表」做出来,一行一组:中文网址、英文网址、德文网址。表是人的活,标签是AI的活。下面三段可以直接复制,后面贴上你的表。
让AI生成每页head里的整组标签
「下面是我网站的多语言页面对应表,每行是同一篇内容的几个语言版本。请按谷歌 hreflang 规则,给每个页面生成要放进 head 的完整 link 标签:每页都列出自己和所有其他版本,网址用完整的 https 地址,语言代码用 ISO 639-1,地区用 ISO 3166-1,最后加一条 x-default 指向英文版。」
让AI生成sitemap里的xhtml:link
「下面是我网站的多语言页面对应表。请按谷歌 hreflang 的 sitemap 写法,给每个网址生成一段 xhtml:link,列出全部版本包括自己,sitemap 的 urlset 上要声明 xmlns:xhtml。按网址分组输出,别漏掉自己那条。」
让AI把爬虫数据逐页查一遍
「下面是爬虫导出的每个页面的 hreflang 列表和 canonical。请逐页检查:有没有指向自己的那条;它指向的每个页面是否也指回它;语言代码是否有 en-UK、jp、下划线这类错误;有没有指向非 200 的页面;canonical 是否指向自己。把有问题的页面列成一张改单。」
人必须自己做的那几件
AI不知道你哪篇翻译了、哪篇只是同题不同内容。哪些页面算同一篇的不同语言版本,只有你能定。x-default指哪一页,也是你定。
标签上线以后,自己打开源代码和Search Console网址检查抽查,别只看AI说完成了。翻译质量自己把关或者找母语的人看。AI生成的标签不等于谷歌认了。
猎者出海的AI Agent在这条线上是分工:SEO/GEO优化员工管技术SEO这块的标签和站内,写作编辑员工管本地化。人要做的是定方向、下命令、验收。
hreflang这组标签,说到底就是让对的网址出现在对的人面前。它不难,难在细心:每一组要有自己那条,每一页要指回来,canonical要指自己。把这几条守住,剩下的交给抓取和时间。猎者出海的 Google SEO 栏目里还有别的环节可以一起过。
常见问题
hreflang怎么读
没有官方读法。它是href加lang两个词拼起来的,href是链接地址,lang是语言,一般读成h-ref-lang。
只有一种语言的英文站要不要加
不用。hreflang是给同一篇内容的多个版本用的,你只有一个语言版本,没有版本可换。
机器翻译的页面能不能挂hreflang
能挂。hreflang不管翻译质量,它只管给谁看哪个版本。只翻了模板、正文没翻的页面谷歌算重复版本,但谷歌列的第一种情况就是这种,照样可以用hreflang标明给谁看。翻译质量差的页面读者会走。把别人的内容机器翻译后批量发,属于规模化内容滥用。
hreflang能不能提升排名
谷歌没说它能。谷歌不用它判断语言,官方给它的定位就是换网址,把对的链接给对的人。
加了多久生效
官方没给天数。要等谷歌重新抓取这些页面,抓到了才会按新的标签换。
Shopify要不要自己写
先看后台市场设置。Shopify按市场和语言自动生成hreflang,所有店默认开启。后台配好了就别手写一套重复的。
发表评论