hreflang标签怎么落地?return tags对称与x-default实操避坑

hreflang标签怎么落地?return tags对称与x-default实操避坑
张文保 26 分钟阅读 3,237 阅读
本文目录
  1. 一个被悄悄废弃的报告,让hreflang开始裸奔
  2. 先分清:hreflang管什么,不管什么
  3. 三种放置方式,按站点规模选
  4. self-referential:每个页面必须先指向自己
  5. return tags对称:最常见也最致命的死穴
  6. x-default到底指向哪,别再当成“默认语言”
  7. 语言地区代码:en-GB不是en-UK,差一个字母就报废
  8. 绝对URL与协议一致,别用相对路径
  9. canonical与hreflang自指对齐:最致命的隐形冲突
  10. hreflang不是排名魔法,它是“等价提示”
  11. 国际定位报告废弃后,怎么自查hreflang
  12. hreflang多久才生效?上线后展示飘忽别急着改
  13. 几万条hreflang的大站怎么维护
  14. 从head法迁到sitemap法,别让两套实现打架
  15. AI搜索时代,hreflang还重要吗
  16. 真实案例:三市场hreflang织错网,两周掉量
  17. hreflang实施10步落地清单
  18. 5个最常踩的坑
  19. 常见问题解答
  20. hreflang必须三种放置方式都用吗?
  21. 少了self-referential自指标签会怎样?
  22. x-default是必填的吗?指向哪里最好?
  23. en-UK和en-GB有什么区别,写错会怎样?
  24. canonical和hreflang冲突时听谁的?
  25. hreflang写错了怎么自己发现?现在Search Console还能看吗?
  26. 权威参考资料

摘要:hreflang不是写几行标签那么简单,它是一张需要每个语言版本互相对上号的网,断一根线整组失效。这篇把实施拆成可执行的几步:三种放置方式怎么选、self-referential自指为什么不能省、return tags对称为什么是头号死穴、x-default到底该指向语言选择器还是英文版、en-GB和en-UK差一个字母就报废、canonical和hreflang自指对齐的致命冲突。更要紧的是一个被很多老教程忽略的现实:2022年9月之后,Google Search Console的国际定位报告没了,hreflang等于在裸奔,写错了不再有官方仪表盘提醒你,只能靠自己的爬虫和手动抽查兜底。文末给一张10步落地清单和5个最常踩的坑。

一个被悄悄废弃的报告,让hreflang开始裸奔

先说一件很多人没注意、但直接影响实施策略的事。2022年9月22日,Google把用了八年的国际定位报告(International Targeting report)从Search Console里下线了。这个报告原本有两个作用:一个是给整站设国家定位,另一个是监控你的hreflang用得对不对、有没有报错。前一个功能Google说对生态价值不大直接砍掉,后一个监控hreflang错误的能力,也随着报告一起消失了。

这意味着什么?过去你hreflang写错了——比如某一组少了一条返回链接——Google会在那个报告里给你标出来,你照着改就行。现在没有这个仪表盘了。你写对写错,线上不会再有一个官方界面告诉你。Google在国际定位报告废弃的官方公告里也明确:会继续支持hreflang,但不再提供这个监控入口。

很多英文老教程到今天还在教你“实施完去Search Console的国际定位报告看有没有错”,这个步骤已经失效好几年了。结论很现实:hreflang现在是裸奔状态,写错了没人提醒,所以你必须一次落地就对、对称、能自检。这篇就按这个标准来拆。

先分清:hreflang管什么,不管什么

hreflang是一个HTML属性,2011年由Google引入,用来告诉搜索引擎“同一份内容,我有这几个语言或地区的版本,请按用户的语言地区给他匹配那一版”。按维基百科hreflang词条的定义,它帮搜索引擎理解网站的语言和地理定向,并在搜索结果里展示正确的URL。

关键是要破除两个常见误解。第一,hreflang不是排名因素,它不会让你的页面排得更高,它只决定“在已经要展示你的情况下,展示哪个语言版本”。第二,hreflang不传递权重,它不是canonical的替代品。A页面挂了指向B的hreflang,不代表A把权重让给了B,两个页面各自独立竞争,hreflang只是给它们贴了“互为等价版本”的标签。

所以hreflang解决的是一类很具体的痛点:你有美国英语站和英国英语站,内容几乎一样,Google容易判成重复、只收一个,或者把美国版展示给英国用户。这种同语言多地区互相打架的场景,正是hreflang的主战场,保哥在同语言多地区站怎么不自己跟自己打架那篇里专门拆过这个去重逻辑。但前提是hreflang本身得织对,织错了反而帮倒忙。

三种放置方式,按站点规模选

Google在本地化版本的官方说明文档里给了三种放置hreflang的方式,三种等价、不能混用同一组、各有适用场景。

第一种,HTML head里的link标签。在每个页面的 <head> 里,为每个语言地区版本放一条link,再加一条指向自己的。写法长这样:

<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

这是最直观的方式,适合页面数量不大的站。缺点是每多一个语言版本,每个页面的head就多一行,10个语言就是每页10行,几千个页面乘起来体积可观,而且任何一处改动都要动HTML模板。

第二种,XML sitemap里的xhtml:link条目。把hreflang写进sitemap,每个URL节点下挂上所有语言版本的xhtml:link。这是大站的首选,因为它把hreflang从页面HTML里抽出来集中管理,改一处就行,不用动模板,也不增加页面体积。代价是sitemap文件会变得很大,需要工程化生成。

第三种,HTTP响应头里的Link字段。这是给非HTML文件用的,比如PDF。PDF没有head可写link,就只能在服务器返回PDF时,在HTTP头里带上hreflang信息。普通网页几乎用不到这种。

选哪种?小站用HTML head法直观好维护;几万页以上的大站,几乎只能走sitemap法,否则维护成本爆炸。Ahrefs在它的hreflang指南里也持同样看法,认为sitemap法对规模化站点更省心。

self-referential:每个页面必须先指向自己

这是初学者最容易漏的一条。每个页面的hreflang集合里,除了列出所有兄弟版本,还必须包含一条指向自己的。Google的原话是“每个语言版本必须列出自己以及所有其他语言版本”。

为什么自指不能省?因为hreflang是一组互相引用的集合,Google需要确认这个集合里每个成员都认同自己是成员之一。少了自指,这一组的引用关系就不完整,Google可能直接忽略整组标签。维基百科的措辞更直接:每个URL都必须引用完整的URL集合,自指是必需的,包含标签的这个文档本身永远是集合的一部分。

实操上记一个动作:写hreflang时,先写指向自己的那一条,再写指向兄弟版本的。把自指放在第一行当成肌肉记忆,就不容易漏。

return tags对称:最常见也最致命的死穴

如果说hreflang只有一个头号坑,那就是返回链接(return tags)不对称。规则极其刚性:如果A页面指向了B,那么B页面必须也指回A。两边只要有一边没指回去,Google就会把这一对标签全部丢弃——不是丢一条,是两边都失效。

Google的判定逻辑是这样的:Googlebot抓到一个带hreflang的页面后,会顺着它列的每个URL去抓,逐一核对对方有没有反向指回来。对上了才认,对不上整组作废。Ahrefs在它的hreflang实战指南里把这一条列为最高频错误:返回链接缺失,Google直接放弃整组注解。

为什么这么容易错?因为现实里语言版本不是一次性建好的。你先有美国站和英国站,互相指对了;过半年加了澳大利亚站,你在美国站和英国站上加了指向澳洲的,却忘了在澳洲站上回指美国和英国——这一组立刻断网。语言版本越多、上线时间越分散,断线概率越高。这也是为什么大站宁可用sitemap集中管理,一个脚本统一吐出全集,对称性由程序保证,而不是靠人手一处处改。在用AI写脚本从爬虫结果自动生成hreflang sitemap那篇里给过完整的自动化方案,核心就是把对称性这件事交给机器,别交给记性。

x-default到底指向哪,别再当成“默认语言”

x-default是被误解最深的一个值。很多人以为它是“默认语言版本”,把它指向英文版就完事——这只对了一半。

x-default的准确含义是:当用户的语言地区跟你列的所有版本都匹配不上时,给他展示哪一页。它是兜底页,不是默认语言页。最理想的指向对象是你的语言选择器页面——就是那种让用户自己选国家/语言的着陆页。如果没有语言选择器,再退而求其次指向你的主版本(通常是英文版)。

Yoast在它的hreflang终极指南里把这层说得很清楚:x-default指定的是当其他hreflang链接里的语言都不匹配用户浏览器设置时,该把用户送到哪里。换句话说,假设一个用户的浏览器是阿拉伯语,而你只有中英法三个版本,没有x-default的话Google就自己拍脑袋给他塞一个,有了x-default你就能主动决定他落到语言选择器、自己挑。

两个实操要点。第一,x-default整组里只用一次,不是每个版本都写。第二,没设x-default不会报错,但等于把“匹配不上时展示谁”的决定权交给Google,对多语言站来说这是个不该放弃的控制权。

语言地区代码:en-GB不是en-UK,差一个字母就报废

hreflang的值由两部分组成:语言代码(ISO 639-1格式)加上可选的地区代码(ISO 3166-1 Alpha 2格式),中间用连字符连。语言在前、地区在后,这个顺序不能颠倒。

最经典的错误是把英国写成en-UK。正确写法是en-GB——因为ISO 3166-1里英国的国家代码是GB(Great Britain),不是UK。Yoast指出这是个普遍问题,好在Google对en-uk这种常见错还能容错纠正,但有些错它救不了,比如en-EU,因为EU(欧盟)根本不是一个ISO国家代码,这种会直接整条失效。

再记几个容易混的:

  • 只标语言不标地区是允许的,比如 hreflang="en" 表示所有英语用户,hreflang="zh" 表示所有中文用户。
  • 同语言多地区才需要带地区码,比如en-US、en-GB、en-AU三个英语版本要区分。
  • 中文要小心:简体常写zh-Hans或zh-CN,繁体写zh-Hant或zh-TW,别只写zh然后指望Google自己分简繁。
  • 大小写不敏感,en-us和en-US等价,但团队内部最好统一成“语言小写、地区大写”的写法,方便人眼核对。

这种字母级的错最阴,因为页面看起来一切正常,标签也在,只是悄悄没生效。这正好呼应前面那个点:国际定位报告没了,这类错误现在不会主动跳出来提醒你。

绝对URL与协议一致,别用相对路径

Google的要求是hreflang里的URL必须是完全限定的,包含传输协议。也就是说要写 https://example.com/foo,不能写 //example.com/foo,更不能写 /foo 这种相对路径。相对路径Google不认。

顺带还有几个一致性要求:协议要统一,全站HTTPS就别在hreflang里混进HTTP的版本;带不带www、带不带末尾斜杠也要跟你页面实际可访问的URL完全一致,hreflang指向的URL最好是能直接返回200的终态地址,别指向一个会301跳转的中间URL,跳转会削弱信号。

canonical与hreflang自指对齐:最致命的隐形冲突

这是高阶坑,也是最容易让整套hreflang默默失效的一个。规则是:每个被hreflang引用的页面,它的canonical必须指向自己(self-canonical)。

想象一个常见的错误配置:你有en-US和en-GB两个版本,hreflang织得很对称,但你为了“防止重复内容”,把en-GB页面的canonical指向了en-US。结果是灾难性的——Google看到canonical说“en-GB的规范版本是en-US”,就会跟随canonical、忽略en-GB这个页面,连带把它身上的hreflang一起无视掉。你以为自己同时做了canonical去重和hreflang定向,实际上canonical把hreflang整个掀翻了。

正确做法:每个语言版本各自canonical到自己,让hreflang去负责“告诉Google这几个是等价的不同语言版本”。canonical管“同一语言内的重复”,hreflang管“跨语言的等价”,两者分工,绝不能让canonical跨语言指。如果你对canonical和noindex、跨页面的配合还拿不准,可以先把canonical这块的判断逻辑理顺再来碰hreflang。

hreflang不是排名魔法,它是“等价提示”

再强调一遍这个心态,因为它影响你怎么排实施优先级。hreflang不会提升排名,它只在Google已经决定展示你的前提下,帮你把对的语言版本送到对的用户面前。它的价值是体验和转化层面的——一个英国用户搜到你,看到的是带英镑价格、英式拼写的英国版,而不是美元美式拼写的美国版,跳出率会更低、转化会更顺。

所以别指望靠hreflang救一个排不上去的站。它是国际化做对之后的临门一脚,前面的域名结构、内容质量、链接建设都得先到位。选哪种域名结构本身就是国际站的第一道分叉题,保哥在国际站域名结构三选一那篇里专门算过ccTLD、子目录、子域名的三笔账,hreflang是在你选好结构之后才上场的。

国际定位报告废弃后,怎么自查hreflang

回到开头那个现实:没有官方仪表盘了,自检只能靠自己。给一套可落地的三层验证法。

第一层,爬虫工具批量扫。用Screaming Frog、Sitebliss这类爬虫跑全站,它们能批量提取每个页面的hreflang,自动检出返回链接缺失、自指缺失、无效语言代码这三类高频错。这是替代国际定位报告的主力手段,大站基本只能靠它。Semrush在它的hreflang指南里也建议用站点审计工具定期扫hreflang一致性,把它当成常规体检项。

第二层,手动抽查关键页。对首页、主要分类页、爆款产品页这种高价值页面,直接看源码或用浏览器插件核对hreflang。重点查三样:自指在不在、return tags两边对不对得上、x-default指向对不对。抽查不求全,求覆盖最重要的几个页面模板。

第三层,看日志和收录情况。翻服务器日志看Googlebot有没有正常抓取各语言版本,再用site: 在Google搜各语言版本的URL看收没收录、展示给目标地区的对不对。GSC的效果报表虽然没了国际定位,但还能按国家维度看各市场的曝光点击,间接判断hreflang有没有把对的版本送到对的市场。

把这三层做成每月一次的固定动作,就能补上官方报告留下的空缺。错误不会自己跳出来,你得主动去捞。

hreflang多久才生效?上线后展示飘忽别急着改

很多人hreflang一上线就盯着搜索结果看,发现各语言版本展示忽隐忽现,以为没生效又开始乱改——这恰恰是最该忍住手的时候。

hreflang的生效是渐进的,不是上线即刻全网认账。Google要先重新抓取这一组里的每一个语言版本,再逐一核对返回链接对不对得上,全部对上了才会按hreflang去匹配展示。这个过程取决于各版本被重新抓取的速度,小站可能几天,大站或抓取频率低的站可能要两三周。在这段窗口里,有的版本已经被重新抓取认了、有的还没轮到,展示飘忽是正常现象,不是写错了。

所以上线后给它一点时间,别在没看清错误的情况下反复改标签。每改一次,Google就要重新走一遍抓取核对的流程,越改生效越慢。正确的节奏是:上线前用爬虫工具把对称性、自指、代码格式这些静态错误一次性扫干净,上线后只观察不动手,等两三周稳定下来再判断要不要调整。真要动,也是基于爬虫扫出的明确错误去动,而不是凭搜索结果一时的表现拍脑袋。

几万条hreflang的大站怎么维护

页面一多,hreflang就从“写几行标签”变成“工程问题”。手写绝对不可行——10个语言、5000个页面,就是5万条hreflang关系,任何一处人工改动都可能打破对称性。

大站的标准解法是把hreflang抽进XML sitemap,用程序统一生成。流程大致是:先爬一遍全站,建立“同一份内容对应哪几个语言URL”的映射表;再用脚本按这张表批量吐出带xhtml:link的sitemap,对称性和自指由程序保证;内容有增删时增量更新映射表、重新生成。这样人只维护那张映射表,具体的hreflang关系交给机器织。

这套自动化的好处是把最容易出错的对称性问题彻底消灭——只要映射表对,生成出来的hreflang天然对称、天然自指。具体的脚本实现和爬虫到sitemap的串接,前面提到的那篇自动生成方案里有完整代码思路,这里不重复。

从head法迁到sitemap法,别让两套实现打架

站点长大后,常会想把hreflang从HTML head法迁到sitemap法集中管理。迁移本身没问题,但有个隐蔽的坑:别让两套实现同时存在、还互相矛盾。

如果你head里还留着一组旧的hreflang,sitemap里又生成了一组新的,两组只要有出入——比如旧head里某个版本的URL带末尾斜杠、新sitemap里不带——Google收到的就是互相打架的信号,可能两套都不认。正确做法是迁移时一刀切:要么彻底清掉head里的hreflang只留sitemap一套,要么反过来,绝不让两套并存。

迁移完照例用爬虫全站扫一遍,确认head里的旧hreflang已经清干净、sitemap里的新hreflang对称自指都齐。这一步别省,并存的残留是迁移后最隐蔽的故障源,偏偏又没有官方报告替你盯着。

AI搜索时代,hreflang还重要吗

有人问,都AI搜索了,用户问AI、AI给答案,还需要hreflang吗?需要,而且逻辑变了。

传统搜索里hreflang决定“展示哪个URL给哪个地区”。AI搜索里,模型是整块理解你的内容、再生成答案,它不是简单地选一个URL展示。这时hreflang的作用更偏向帮模型理清“这几个URL是同一内容的不同语言版本,不是各自独立的重复内容”,避免模型把你的多语言版本误判成互相矛盾或重复的来源。

更深一层的风险是跨市场的知识一致性——你在德国说的和在美国说的如果对不上,AI可能把矛盾信息混在一起污染你的品牌表述。这块单独成题,保哥在国际SEO进入AI时代那篇里专门拆过跨市场知识污染,这里点到为止:hreflang在AI时代不是没用了,而是从“选URL”升级成了“帮模型对齐多语言实体”的基础信号,该织还得织对。

真实案例:三市场hreflang织错网,两周掉量

保哥手上一个做户外储能电源的出海客户,主攻北美和欧洲,先后上了美国(en-US)、英国(en-GB)、德国(de-DE)三个站。前两个站上线时hreflang对称织好,收录和展示都正常。问题出在德国站后补的时候。

技术同事在德国站加了指向美英两站的hreflang,但没在美国站和英国站上回指德国站——经典的返回链接不对称。更糟的是,为了“防重复”,他把德国站里几个产品页的canonical指向了对应的英国站页面。两个错叠在一起:return tags断了一半,canonical又跨语言乱指。

后果是德国站上线后头两周,德语搜索里产品页的展示忽隐忽现,有时候Google干脆把英国版展示给德国用户。因为国际定位报告早没了,前两周根本没人发现哪里错,是后来用爬虫工具全站扫,才一次性揪出return tags缺失和canonical跨语言指两个问题。

修复动作就两步:在美英两站补上回指德国站的hreflang,把对称性补全;把德国站所有产品页的canonical改回自指。改完重新提交sitemap,大约两周后德语搜索里的展示稳定下来,德国版正常展示给德国用户。一句话教训:hreflang是一张网,补新版本时务必全网回织,别只在新站单向挂;canonical永远自指,别拿它去跨语言去重。

hreflang实施10步落地清单

把上面的零碎规则收成一张可执行清单,照着走基本不翻车:

  1. 列清楚你有哪些语言地区版本,确认每一份内容对应哪几个URL。
  2. 选放置方式:小站用HTML head法,几万页大站用XML sitemap法。
  3. 每个页面先写自指那一条hreflang,放第一行。
  4. 为每个兄弟版本各加一条,确保这一组互相都列全了。
  5. 检查return tags对称:A指B,B必须指回A,一对都不能漏。
  6. 加一条x-default,指向语言选择器页或主版本,整组只写一次。
  7. 核对语言地区代码:ISO 639-1语言 + ISO 3166-1地区,别写en-UK、en-EU。
  8. 所有URL用绝对地址、协议一致、指向200终态页,不要相对路径不要指向跳转。
  9. 确认每个被引用页面的canonical都是自指,绝不跨语言指。
  10. 上线后用爬虫工具全站扫一遍,把这套自检做成每月固定动作。

5个最常踩的坑

坑一:return tags不对称。头号死穴,新增语言版本时只单向挂、忘了回指,整组失效。补版本必须全网回织。

坑二:canonical跨语言乱指。为了防重复把B语言版canonical指向A语言版,结果hreflang被canonical掀翻。canonical永远自指。

坑三:x-default当成默认语言。它是匹配不上时的兜底页,最好指语言选择器,不是简单丢给英文版了事,而且整组只写一次。

坑四:语言地区代码写错。en-UK、en-EU这种字母级错误,页面看着正常却悄悄不生效,又没有官方报告提醒,最阴。

坑五:以为hreflang能提排名。它不传权重、不是排名因素,只管“展示哪个版本给谁”,别指望它救一个本来就排不上的站。

常见问题解答

hreflang必须三种放置方式都用吗?

不需要,三种方式(HTML head、XML sitemap、HTTP头)是等价的备选,针对同一组语言版本选其中一种即可,混用反而可能冲突。普通网页用HTML head法或sitemap法二选一,PDF等非HTML文件才需要HTTP头法。小站推荐head法直观好维护,几万页大站推荐sitemap法集中管理。

少了self-referential自指标签会怎样?

很可能整组hreflang被Google忽略。hreflang是一组互相引用的集合,每个成员必须包含指向自己的那一条,集合的引用关系才完整。实操上把自指写在hreflang的第一行当成固定动作,就不容易漏。

x-default是必填的吗?指向哪里最好?

不是强制必填,缺了不会报错,但强烈建议加。它的作用是当用户语言地区跟你所有版本都匹配不上时决定展示哪页。最佳指向是语言选择器页面,让用户自己挑;没有语言选择器就指向主版本(通常英文版)。整组只写一次x-default,不要每个版本都加。

en-UK和en-GB有什么区别,写错会怎样?

en-GB才是正确写法,因为ISO 3166-1里英国的国家代码是GB不是UK。en-UK属于无效地区码。Google对en-uk这种常见错还能容错纠正,但像en-EU这种(EU不是ISO国家代码)会直接整条失效。代码错的隐蔽之处在于页面看起来一切正常,标签也在,只是悄悄没生效。

canonical和hreflang冲突时听谁的?

canonical优先,这正是危险所在。如果B语言版的canonical指向了A语言版,Google会跟随canonical、忽略B页面,连带把B身上的hreflang一起作废。正确做法是每个语言版本各自canonical到自己,让hreflang负责跨语言的等价关系,canonical只管同语言内的重复,两者分工绝不交叉。

hreflang写错了怎么自己发现?现在Search Console还能看吗?

2022年9月国际定位报告下线后,Search Console不再提供专门的hreflang错误监控仪表盘。现在自查靠三层:用Screaming Frog这类爬虫工具批量扫全站检出返回链接缺失、自指缺失、无效代码;对高价值页面手动抽查源码核对自指和对称;翻日志和用site: 看各语言版本的收录展示情况。建议做成每月固定动作,因为错误不会再主动跳出来提醒你。

权威参考资料

分享到
标签
版权声明

本文标题:《hreflang标签怎么落地?return tags对称与x-default实操避坑》

本文链接:https://zhangwenbao.com/hreflang-implementation-return-tags-x-default-canonical-mistakes.html

版权声明:本文原创,转载与引用请注明作者与原文链接。许可协议: CC BY 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交