Google把hreflang示例改成大写:大小写不影响识别,下划线和UK才是坑
本文目录
- Google的文档到底改了哪里?
- 新加的那句话
- 同一份文档里没变的那些规则
- 大小写为什么不影响识别?
- 那大写是谁定的规矩
- hreflang里哪些写法真的会出问题?
- URL的大小写是要紧的
- 下划线和连字符差别很大
- UK、EU这些代码Google不认
- es-419和自造代码
- HTTP头里的写法也一样
- 顺带核对的两条老规则
- 怎么批量查自己站的hreflang写法?
- 中文站的几种写法怎么选?
- 已经上线的站要做什么?
- 为什么Google要改一个不影响结果的地方
- 常见问题解答
- hreflang的值要不要改成大写?
- Google是什么时候改的这个文档?
- 语言代码也要大写吗?
- en_GB这种写法可以用吗?
- 英国写UK还是GB?
- 拉美西班牙语能用es-419吗?
- hreflang里的网址大小写有影响吗?
- 中文简体应该写zh-CN还是zh-Hans?
- 站点地图里的hreflang也不区分大小写吗?
- HTML、HTTP头、站点地图三种方式哪个好?
- hreflang能让Google把页面当成另一种语言吗?
- 有工具把小写地区代码标成警告怎么办?
- HTML的lang属性也要按这个大小写写吗?
- x-default要写成大写吗?
- 权威参考资料
摘要:Google更新了多语言页面版本的说明文档,把所有hreflang示例里的地区代码从小写改成了大写,比如en-gb改成en-GB、de-ch改成de-CH,同时加了一句说明:hreflang的值不区分大小写,Google小写大写都接受,地区代码写成大写是因为ISO 3166-1 Alpha 2的惯例。文档页标注最后更新于2026年9月21日(UTC),Search Central的更新日志没有单独记这一笔。已经用小写的网站不需要改。真正会出问题的是另外几处:URL本身区分大小写,WordPress这类系统输出的en_GB用的是下划线,UK、EU这类代码Google直接忽略,es-419这种区域代码Google不支持。
做多语言站的人,这两天可能在群里看到有人转了一张截图:Google把hreflang示例里的小写全改成大写了,是不是要连夜改站?
先说结论:不用。Google动的只是文档里的示例写法,识别规则一个字没变。
Search Engine Roundtable的Barry Schwartz在9月23日发了一条短消息,标题后半句就叫“但这不重要”。这篇以他的报道为主体,对照Google文档原文和语言标签的国际规范,把为什么不重要讲清楚,再把hreflang里真正跟大小写、格式有关的几个坑列一下,这些才是值得花时间查的。
Google的文档到底改了哪里?
改动发生在Google搜索中心那份介绍网页本地化版本的文档里,也就是大家平时说的hreflang官方文档。页面底部标注的最后更新时间是2026年9月21日(UTC)。
按SER的对比,旧版页面里的示例用的是小写地区代码,新版统一改成了大写。拿文档里几处典型示例对照一下:
| 文档位置 | 旧写法 | 新写法 |
|---|---|---|
| HTML标签示例,英国英语 | en-gb | en-GB |
| HTML标签示例,美国英语 | en-us | en-US |
| HTTP头和站点地图示例,瑞士德语 | de-ch | de-CH |
| x-default示例,澳大利亚英语 | en-au | en-AU |
| 语言代码本身,比如德语 | de | de(不变) |
语言代码部分一直是小写,没动;动的只是连字符后面那两个字母的地区代码。x-default这个保留值也还是小写。
新加的那句话
示例改完,文档在支持的语言和地区代码那一节里补了一句,原文意思是:hreflang的值不区分大小写,Google接受小写和大写代码,但把地区代码写成大写(例如en-GB)符合ISO 3166-1 Alpha 2的惯例。
这句话把事情交代得很干净:改大写图的是示例更规范,规则本身没变。顺带一提,Search Central有一份专门的文档更新日志,9月里记了地区搜索体验差异、搜索资料徽章、聚合单元支持本地商家这几次更新,这次改示例没有单列。Google显然也认为这属于文字层面的修订。
同一份文档里没变的那些规则
既然打开了这份文档,顺手把它的通用要求过一遍,这些才是hreflang生效的前提,这次一条都没改:
- 每个语言版本都要列出自己,也要列出所有其他语言版本,一组页面里每一页的这套标注是完全相同的。
- 备用网址必须写完整,带上https这样的协议,写成//example.com/foo或者/foo都不行。
- 备用网址不必在同一个域名下,用不同国家域名做多语言的站也能互相标注。
- 两个页面没有互相指向,标注就会被忽略,这是防止别的网站随便把自己声明成你的语言版本。
- 同一种语言有好几个地区版本时,建议再给一个不带地区的通用版本兜底,比如在en-IE、en-CA、en-AU之外加一个en。
- 维护全部双向链接太难时,可以在部分页面省略一些语言,Google仍会处理互相指向的那些,但新开的语言版本一定要和主力语言版本双向链上。
这几条里,最常出问题的是第四条。Google文档说两个页面不互相指向,标注就会被忽略,大小写写得再标准也救不回来。
大小写为什么不影响识别?
这件事有两层依据,一层是Google自己的说明,一层是语言标签的国际规范。
Google这边已经白纸黑字写了不区分大小写。再往上追,hreflang的值用的是语言标签,规范来自IETF的BCP 47,具体条文在RFC 5646第2.1.1节。这一节第一段就说,语言标签及其各部分,在任何时候都按不区分大小写处理,大小写的惯例存在,但不能被当作带有含义。
RFC里举的例子很直观:mn-Cyrl-MN和MN-cYRL-mn、mN-cYrL-Mn是同一个标签,意思都是蒙古国使用的西里尔字母蒙古语。乱成这样都算同一个,en-gb和en-GB当然也是。
那大写是谁定的规矩
同一节接着说,大小写虽然不带含义,统一的格式对使用者有帮助,推荐按各ISO标准的习惯来写:
| 部分 | 来源标准 | 推荐写法 | 例子 |
|---|---|---|---|
| 语言 | ISO 639-1 | 全小写 | en、de、zh |
| 文字 | ISO 15924 | 首字母大写,其余小写 | Hans、Hant、Cyrl |
| 地区 | ISO 3166-1 | 全大写 | GB、US、CN、TW |
按这张表,规范的写法应该是en-GB、zh-Hans、zh-Hant-HK。Google这次改示例,就是把文档对齐到这个推荐格式上。浏览器和大多数语言相关的程序库,内部比较语言标签时也都会先统一大小写,这也是这条规范存在的意义。
所以,如果你的站多年来一直输出en-gb、zh-cn,排名和收录不会因为这次文档更新受任何影响。真要为此改模板,除了让代码看起来整齐,没有别的收益,还白白增加一次上线风险。
hreflang里哪些写法真的会出问题?
大小写是虚惊一场,可hreflang值的格式还有几处是实打实会被忽略的。这些在Google文档里都写着,借这次机会对一遍比改大小写有用得多。
URL的大小写是要紧的
hreflang的值不分大小写,href里的网址却分。按网址规范,域名不区分大小写,路径部分是区分的。/en-GB/page和/en-gb/page在服务器上可能是同一个文件,在Google眼里却是两个不同的网址。
常见的翻车场景是这样的:站点目录用的是/en-gb/,有人看到文档改了大写,顺手把模板里拼接网址的那段也改成了大写,结果hreflang指向的/en-GB/要么返回404,要么和页面自己的规范网址对不上。Google文档要求每个语言版本列出自己和所有其他版本,并且互相指向,网址对不上,这一组标注就可能被当成没有回链而忽略。
结论很简单:要改,只改hreflang属性的值;href里的网址必须和页面实际的规范网址一字不差。
下划线和连字符差别很大
WordPress的语言设置、很多后端框架和Java、PHP里的区域设置,习惯用下划线写法,比如en_GB、zh_CN。直接拿这个值填进hreflang,就不是合法的语言标签了。语言标签规定用连字符分隔,Google文档也写明值由一个或两个部分组成,中间用短横线连接。
这个问题比大小写严重得多,因为大小写只关乎好不好看,下划线属于格式错误。自己写模板的站,输出前做一次替换就行。用多语言插件的,检查一下前台源代码里实际输出的是什么。
UK、EU这些代码Google不认
Google文档在常见错误里专门列了一条:用了保留给别的用途的代码,Google会忽略这一部分,例子就是EU、UN和UK,写在hreflang里对Google搜索没有作用。英国的正确代码是GB,所以英国英语要写en-GB,写成en-UK等于没写。
另一个常见错误是把地区代码单独当语言用。文档举的例子是比利时:想给比利时用户,写be是错的,be是白俄罗斯语的语言代码。正确的是按语言来,de-BE、nl-BE、fr-BE。只写地区不写语言,同样无效。
es-419和自造代码
做拉美西语市场的人经常用es-419表示拉丁美洲西班牙语,这个写法在BCP 47里是合法的,419是联合国的地区编号。但Google文档明确说只支持ISO 639-1的语言代码和ISO 3166-1 Alpha 2的地区代码,es-419这类不在两个标准里的代码不支持。想覆盖拉美,要么用es加上一个x-default之类的兜底页,要么按国家分别写es-MX、es-AR、es-CO。
站内之前用一批实际站点数过hreflang里声明的地区和真实页面对不对得上,很多站写了一长串地区代码,背后只有少数几个真实页面,这比大小写值得查得多。
HTTP头里的写法也一样
PDF这类不是HTML的文件,可以用HTTP响应头声明语言版本。文档示例里,一个PDF有三个版本,返回的Link头大致是这样:
Link: <https://example.com/file.pdf>; rel="alternate"; hreflang="en",
<https://de-ch.example.com/file.pdf>; rel="alternate"; hreflang="de-CH",
<https://de.example.com/file.pdf>; rel="alternate"; hreflang="de"注意示例里的子域名de-ch是小写,hreflang值de-CH是大写,两者本来就不需要一致。子域名是网址的一部分,域名不分大小写;hreflang值也不分。真正要对上的,是尖括号里的网址和文件实际的地址。每个版本返回的Link头都要完全相同,并且包含被请求的那个版本自己。
顺带核对的两条老规则
文档里还有两条和格式相关的要求,这次没改,但很多站没注意。
一条是2024年6月文档里补充说明的:表示备用版本的link标签不能合并,比如不要把hreflang标注和media这类属性写在同一个link标签里。早年做移动版的站,有的会把移动端备用和语言备用写在一起,这种写法要分开。
另一条是Google反复强调的:Google不用hreflang或HTML的lang属性来判断页面是什么语言,语言是算法自己识别的。hreflang只负责告诉Google这些页面互为本地化版本。所以页面正文是英文、hreflang却写成de,并不会让Google把它当德语页。指望靠改hreflang值来改变页面在哪个语言市场出现,是行不通的。
怎么批量查自己站的hreflang写法?
页面不多的站,打开源代码搜一下就行。页面多的,可以写个小脚本批量过一遍。下面这段Python只检查格式,不检查回链,思路是把每个值和几条规则比对:
import re
# 语言(2位) + 可选文字(4位) + 可选地区(2位),或 x-default,大小写不限
PATTERN = re.compile(r'^(x-default|[a-z]{2}(-[a-z]{4})?(-[a-z]{2})?)$', re.I)
RESERVED = {'uk', 'eu', 'un'}
def check(value):
v = value.strip()
if '_' in v:
return '用了下划线,应改成连字符'
if not PATTERN.match(v):
return '格式不合Google要求(如es-419、三位语言代码)'
region = v.split('-')[-1].lower() if v.count('-') else ''
if len(region) == 2 and region in RESERVED:
return '用了保留代码,Google会忽略地区部分'
return 'OK'
for v in ['en-gb', 'en-GB', 'en_GB', 'en-UK', 'es-419', 'zh-Hans-CN', 'x-default']:
print(v, check(v))跑出来的结果里,en-gb和en-GB都是OK,这正好对应Google那句不区分大小写;en_GB、en-UK、es-419会被分别标出来。这段脚本没有核对代码是否真的存在于ISO 639-1和ISO 3166-1的列表里,比如写成en-XX也能通过格式检查,要严格的话,可以再接一份官方代码表做比对。
抓取工具方面,主流的网站爬虫工具基本都有hreflang报表,会列出值无效、缺少回链、指向非规范网址等问题。这类工具的判断标准未必和Google完全一致,比如有的工具会把小写地区代码标成警告,看到这类提示,对照Google文档那句话就知道可以忽略。
中文站的几种写法怎么选?
国内读者做多语言站,中文版本的写法问题最多,这里单独说一下。
Google文档的说法是,文字的写法可以从地区推导出来。比如给台湾用户用zh-TW,Google会自动推出是繁体中文。也可以用ISO 15924的文字代码显式写出来:zh-Hant是繁体,zh-Hans是简体,还可以再加地区,比如zh-Hans-US表示给美国用户的简体中文。
| 目标用户 | 常见写法 | 说明 |
|---|---|---|
| 中国大陆 | zh-CN、zh-Hans-CN | 两种都合法,选一种全站统一 |
| 台湾 | zh-TW | Google从地区推导出繁体 |
| 香港 | zh-HK、zh-Hant-HK | 想把繁体写明白可以加Hant |
| 新加坡、马来西亚的华人用户 | zh-SG、zh-MY、zh-Hans-SG | 新加坡通用简体,写清更稳 |
| 所有看简体的用户,不分地区 | zh-Hans | 只有一个简体版本时可用 |
| 所有看繁体的用户,不分地区 | zh-Hant | 只有一个繁体版本时可用 |
按规范大小写,zh-Hans的H是大写,其余小写,地区全大写。不过和前面一样,写成zh-hans也能被识别,只是看起来不够规整。
要提醒一句,只做简体和繁体两个版本的站,用zh-Hans和zh-Hant比用zh-CN和zh-TW更贴切,因为后者把海外的华人用户排除在了明确匹配之外。当然,有x-default兜底时,这个影响会小一些。
已经上线的站要做什么?
按轻重缓急,大概是这几步。
- 大小写不用动。已经是小写的保持原样;正在做新模板的,可以顺手按语言小写、地区大写的惯例写,和Google示例一致,以后排查起来对眼。
- 查一遍有没有下划线。打开几个语言版本的页面源代码,搜hreflang,看值里有没有en_GB这类写法,有就改成连字符。
- 查地区代码是不是官方代码。重点看UK、EU这类保留代码和es-419这类Google不支持的代码,换成GB或者按国家分别写。
- 核对href和规范网址。每个hreflang指向的网址都应该返回200、是规范网址、并且回指过来。网址大小写和页面实际地址完全一致。
- 三种实现方式别混着用。Google文档说HTML标签、HTTP头和站点地图三种方式等效,可以同时用但在搜索上没有额外好处,反而更难维护,选一种就够了。
站点地图写法里还有一个小细节。站点地图是XML文件,XML的元素名和属性名区分大小写,xhtml:link和hreflang这些名字必须照文档写成小写,值可以按惯例写大写。这和HTML里属性名不分大小写的情况不一样,自己拼XML的人要留意。
如果你是从零开始落地hreflang,站内那篇回链对称与x-default的落地避坑写得更完整。至于hreflang声明的那些版本在索引里的地位,可以看Google怎么对待hreflang里的备用网址。
为什么Google要改一个不影响结果的地方
Google没解释动机,SER也只说这不重要。比较合理的推测是减少误解:文档里的示例会被大量工具、插件和教程直接抄走,示例写成小写,有人就以为必须小写;写成大写又不说明,又会有人以为必须大写。现在示例按规范写,再补一句不区分大小写,两种误解都堵上了。
对做SEO的人来说,这次更新最大的价值,大概是提醒大家回头看一眼自己的hreflang。大小写是对的,那别的地方呢。
常见问题解答
hreflang的值要不要改成大写?
不需要。Google文档写明hreflang的值不区分大小写,小写和大写都接受。改大写只是符合ISO 3166-1 Alpha 2的书写惯例,不影响识别和排名。
Google是什么时候改的这个文档?
文档页面标注最后更新于2026年9月21日(UTC),SER在9月23日报道。Search Central的文档更新日志没有单独记录这次示例修改。
语言代码也要大写吗?
不用。按RFC 5646推荐的惯例,语言代码小写,文字代码首字母大写,地区代码大写,比如zh-Hans-CN。但这些都只是惯例,大小写不带含义。
en_GB这种写法可以用吗?
不行。语言标签用连字符分隔,下划线是很多系统区域设置的写法,直接填进hreflang属于格式错误,要改成en-GB。
英国写UK还是GB?
写GB。Google文档说EU、UN、UK这类保留代码在hreflang里没有作用,英国英语应写en-GB。
拉美西班牙语能用es-419吗?
Google不支持。文档说只支持ISO 639-1语言代码和ISO 3166-1 Alpha 2地区代码,es-419不在其中,可以按国家分别写或者用es加兜底页。
hreflang里的网址大小写有影响吗?
有。网址路径区分大小写,/en-GB/和/en-gb/是两个不同网址。hreflang的href必须和页面的规范网址完全一致,否则可能被当成没有回链。
中文简体应该写zh-CN还是zh-Hans?
都合法。面向中国大陆用zh-CN,只有一个不分地区的简体版本时用zh-Hans更贴切。全站选定一种写法保持统一。
站点地图里的hreflang也不区分大小写吗?
值不区分,但站点地图是XML,元素名和属性名区分大小写,xhtml:link、rel、hreflang这些名字要按文档写成小写。
HTML、HTTP头、站点地图三种方式哪个好?
Google说三种方式在它看来是等效的,可以同时用,但对搜索没有额外好处,反而更难维护。按站点情况选最方便的一种即可,PDF这类文件只能用HTTP头。
hreflang能让Google把页面当成另一种语言吗?
不能。Google文档说不使用hreflang或HTML lang属性判断页面语言,语言由算法识别,hreflang只说明哪些页面互为本地化版本。
有工具把小写地区代码标成警告怎么办?
可以忽略。Google明确接受小写和大写,工具的规则是工具自己定的。更该看的是无效代码、下划线、缺少回链和指向非规范网址这几类问题。
HTML的lang属性也要按这个大小写写吗?
lang属性用的也是BCP 47语言标签,同样不区分大小写,按惯例写成en-GB、zh-Hans更规整。Google不靠lang属性判断页面语言,但浏览器的朗读、翻译、字体选择会用到它,最好和页面实际语言一致。
x-default要写成大写吗?
不用。x-default是保留值,Google文档的示例一直写成小写,这次也没有改。
权威参考资料
本文标题:《Google把hreflang示例改成大写:大小写不影响识别,下划线和UK才是坑》
本文链接:https://zhangwenbao.com/google-hreflang-uppercase-region-codes-case-insensitive.html
版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0