Google把hreflang示例改成大写:大小写不影响识别,下划线和UK才是坑

Google把hreflang示例改成大写:大小写不影响识别,下划线和UK才是坑
张文保 21 分钟阅读 2,487 阅读
本文目录
  1. Google的文档到底改了哪里?
  2. 新加的那句话
  3. 同一份文档里没变的那些规则
  4. 大小写为什么不影响识别?
  5. 那大写是谁定的规矩
  6. hreflang里哪些写法真的会出问题?
  7. URL的大小写是要紧的
  8. 下划线和连字符差别很大
  9. UK、EU这些代码Google不认
  10. es-419和自造代码
  11. HTTP头里的写法也一样
  12. 顺带核对的两条老规则
  13. 怎么批量查自己站的hreflang写法?
  14. 中文站的几种写法怎么选?
  15. 已经上线的站要做什么?
  16. 为什么Google要改一个不影响结果的地方
  17. 常见问题解答
  18. hreflang的值要不要改成大写?
  19. Google是什么时候改的这个文档?
  20. 语言代码也要大写吗?
  21. en_GB这种写法可以用吗?
  22. 英国写UK还是GB?
  23. 拉美西班牙语能用es-419吗?
  24. hreflang里的网址大小写有影响吗?
  25. 中文简体应该写zh-CN还是zh-Hans?
  26. 站点地图里的hreflang也不区分大小写吗?
  27. HTML、HTTP头、站点地图三种方式哪个好?
  28. hreflang能让Google把页面当成另一种语言吗?
  29. 有工具把小写地区代码标成警告怎么办?
  30. HTML的lang属性也要按这个大小写写吗?
  31. x-default要写成大写吗?
  32. 权威参考资料

摘要: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-gben-GB
HTML标签示例,美国英语en-usen-US
HTTP头和站点地图示例,瑞士德语de-chde-CH
x-default示例,澳大利亚英语en-auen-AU
语言代码本身,比如德语dede(不变)

语言代码部分一直是小写,没动;动的只是连字符后面那两个字母的地区代码。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-TWGoogle从地区推导出繁体
香港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

继续阅读
发表评论
支持 Ctrl + Enter 提交