什么是 hreflang:包含错误示例的完整指南

本文内容:hreflang 的简单解释,如何为不同的 URL 结构设置它,语言和区域代码表,Google 和 Yandex 的区别,常见错误,清单和常见问题解答。
Hreflang 是一个 HTML 属性,它告诉搜索引擎哪些网站页面是彼此的翻译,以及每个版本是为哪种语言或地区设计的。 简单来说:它是一种告诉 Google 和 Yandex “这个页面是俄语的,适用于俄罗斯,而这个页面是德语的,适用于德国,不要将它们相互替换显示”的方式。
如果没有 hreflang,多语言网站会将版本选择权交给搜索引擎。如果不同语言的页面具有相同的结构和含义,搜索引擎可能会将它们视为重复页面,并且只在搜索结果中保留一个——通常不是用户需要的那个。正确配置的 hreflang 消除了这种不确定性,并将版本分配到不同的语言和区域搜索结果段。

什么是 hreflang 以及为什么需要它

hreflang 是 rel="alternate" 链接属性,它告诉搜索引擎哪些 URL 是当前页面的语言或区域变体。
如果没有 hreflang,搜索引擎可能会:
  • 向德国用户显示俄语版本
  • 将翻译视为重复内容并将其合并为一个文档
  • 不在相应的本地搜索结果中显示区域版本
通过hreflang,搜索引擎知道:这是德国的德语页面,这是法国的法语页面,这是其他所有地区的英语页面。它允许您为同一语言但不同地区设置不同版本,并为同一国家指定多种语言——例如,加拿大的英语和法语(en-CA和fr-CA)。这对于本地化很重要:在加拿大,即使是法语页面,价格也以加元显示,而在法国则以欧元显示。

hreflang 的外观

该属性被添加到每个页面的 <head> 部分:
<link rel="alternate" hreflang="ru" href="https://mysite.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://mysite.com/en/about/" />
<link rel="alternate" hreflang="de" href="https://mysite.com/de/about/" />
<link rel="alternate" hreflang="x-default" href="https://mysite.com/en/about/" />
关键部分:
  • rel="alternate" — 表示这是页面的替代版本
  • hreflang="ru" — 根据 ISO 639-1 的语言代码
  • href — 版本的完整绝对URL(带协议和域名)
  • hreflang="x-default" — 默认版本,如果没有其他版本适用

表格:常用语言和地区代码

属性格式:语言或语言-国家。以下是经常出错的代码:
代码
值
ru
俄语(任何地区)
ru-RU
俄语,俄罗斯
en
英语(任何地区)
en-US
英语,美国
en-GB
英语,英国
de
德语
fr
法语
fr-CA
法语,加拿大
kk
哈萨克语(不是kz——那是国家代码,不是语言)
hy
亚美尼亚语(不是am——也是地区代码)
uz
乌兹别克语
x-default
默认版本
只有当同一语言的内容在不同地区有所不同时,才添加国家代码。
  • 仅语言 — hreflang="en" — 适用于所有英语用户,无论国家如何
  • 语言 + 国家 — hreflang="en-US" 适用于美国,hreflang="en-GB" 适用于英国 — 例如,美元价格与英镑价格
  • 如果内容对所有母语使用者都相同,则仅使用语言代码而无需国家代码

互惠性:最常被违反的规则

每个页面都应包含指向所有语言版本的hreflang,包括其自身(自引用)。这是一条关键规则:如果您的网站有三种语言,则每个版本都必须链接到所有三种语言,包括其自身。这创建了一个封闭的链接集,搜索引擎通过它了解版本之间的关系。
正确:俄语页面包含指向德语、英语和其自身的链接。德语页面包含指向俄语、英语和其自身的链接。英语页面包含指向俄语、德语和其自身的链接。
错误:俄语和德语版本有指向英语版本的链接,但英语版本没有反向链接。搜索引擎认为这种实现不正确,可能会忽略整个集合。
<!-- 正确的 hreflang 集合示例 -->
<link rel="alternate" hreflang="de" href="https://mysite.com/de/about/" />
<link rel="alternate" hreflang="ru" href="https://mysite.com/ru/about/" />
<link rel="alternate" hreflang="en" href="https://mysite.com/en/about/" />
<link rel="alternate" hreflang="x-default" href="https://mysite.com/en/about/" />

x-default:其他版本

hreflang="x-default" — 是一个特殊值,用于当没有其他版本适合用户时显示的页面。这通常是网站的主要语言版本(通常是俄语或英语)。
如果您的网站有俄语和哈萨克语版本,但没有英语版本,x-default 可以指向其中一个版本——或者根本不使用。这不是一个强制属性,但 Google 推荐使用。

实现方式

除了 <head> 中的标签,hreflang 还可以通过以下方式指定:
通过 HTTP 标头。对于 PDF 和其他非 HTML 资源,这是唯一的选择。
通过站点地图。不是在每个页面上使用属性,而是一个站点地图,其中每个链接都列出了该页面在其他语言中的变体。这对于 Google 上的大型网站很方便。
所有选项对 Google 来说都是等效的——选择最容易维护的那个。顺便说一句,Multify 会自动将所需的元标签添加到页面的 HTML 代码和站点地图中。

重要区别:Google 和 Yandex 处理 hreflang 的方式不同

大多数关于hreflang的俄语指南只考虑了Google——而对于面向俄罗斯和独联体国家的网站来说,这只是一半的情况。
  • Google支持所有三种标记方式:中的HTML标签、HTTP头和XML Sitemap中的hreflang。
  • Yandex 已停止通过 XML Sitemap 支持 hreflang。为 Yandex 指定语言和区域版本的唯一可靠方法是直接在每个页面的 <head> 中使用 HTML 标签 <link rel="alternate" hreflang="...">。
实际结论:如果您在 Yandex(俄罗斯、哈萨克斯坦、白俄罗斯)有受众,请不要依赖站点地图实现——它适用于 Google,但在 Yandex 中无效。<head> 中的标签是唯一在两个系统中都同样有效的选项。

不想手动编写 hreflang?

Multify 在添加任何语言时都会自动为所有页面生成 hreflang,无论是在 HTML 中还是在站点地图中。

常见错误

根据 Ahrefs 的研究(374,756 个域名),67% 使用 hreflang 的网站至少存在一个实施错误。

错误 1:没有相互链接

最常见的错误。检查:每个版本的每个页面是否都包含指向所有其他版本的 hreflang?如果没有,搜索引擎可能会错误地解释网站结构,甚至完全忽略标记。

错误 2:URL 不正确或相对

hreflang 需要带有协议的绝对 URL:https://mysite.com/en/about/,而不是 /en/about/。相对路径不起作用。一致性也很重要:如果规范 URL 以斜杠结尾 (/about/),那么 hreflang 中也必须有斜杠——反之亦然。

错误 3:hreflang 指向非规范 URL

如果目标页面本身被标记为 rel="canonical" 到另一个 URL,搜索引擎可能会将其忽略为替代版本。hreflang 必须严格指向每个版本的规范地址,而不是重复或参数化 URL。

错误 4:不存在的版本

hreflang 中指定的链接指向不存在的页面——例如,并非所有产品都已翻译,但所有属性都已指定。搜索引擎将检测到 404 并忽略不匹配的块。如果页面没有翻译,则根本不要为其指定 hreflang。

错误 5:同一页面上的重复

同一页面上有两个具有相同 hreflang 的属性——例如,由于插件冲突或手动编辑标记。Google 会选择第一个,忽略第二个;结果不可预测。

错误 6:错误的语言代码

hreflang="kk" 是哈萨克语的正确代码(根据 ISO 639-1 列表)。不能使用 kz——这是国家代码,而不是语言代码。亚美尼亚语也存在同样的错误:hy 是语言代码,am 是地区代码。

错误 7:重定向或被阻止页面上的 hreflang

如果带有 hreflang 的页面返回 301 重定向,搜索引擎会跟随它并丢失属性——hreflang 应该在最终页面上,而不是中间页面。对于在 robots.txt 中关闭的 URL 或不可索引的页面 (noindex) 也是如此:hreflang 不会被考虑在内。

如何检查 hreflang

Hreflang Testing Tool. 它会显示错误:无效属性、缺少反向链接。缺点是页面需要手动上传。
Screaming Frog 或 Ahrefs。 扫描整个网站。Screaming Frog 免费扫描多达 500 个 URL,并显示所有 hreflang 属性,并检查互惠性。
Google Search Console 在“国际定位”部分(对于已确认为域属性的域)显示部分 hreflang 错误,但不能替代完整的爬虫。

发布 hreflang 前的检查清单

  • 每个版本都链接到自身和所有其他版本(互惠性)
  • 所有 URL 都是绝对的,带有协议和一致的斜杠
  • hreflang 指向规范的、可索引的、返回 200 的 URL
  • 语言代码符合 ISO 639-1,国家代码符合 ISO 3166-1(不要混淆 kk/kz, hy/am)
  • 有 x-default 用于指定语言/区域之外的用户
  • 对于 Yandex,标记在 <head> 中重复,而不仅仅在 sitemap 中

hreflang 和 Tilda

Tilda不会自行添加hreflang。实际选择有限:
通过HTML块手动添加。在代码块中添加<link>标签。如果网站结构发生变化,则需要手动更新。不适用于动态目录页面或博客。对于小型网站来说,这是可以接受的。
通过Multify。代理会自动为所有语言版本的所有页面生成hreflang,包括商品和博客文章。添加语言时,属性会立即出现在所有地方,互惠性会自动维护——并且标记对于Google和Yandex都能正常工作。
对于一个拥有50个页面和3种语言的网站,手动维护hreflang意味着150组属性。每次添加页面或语言都需要更新所有版本。自动化可以完全解决这个问题。

无需手动操作即可添加 hreflang

尝试使用Multify,在网站发生任何更改时自动生成hreflang,同时支持Google和Yandex。

准备好第一次就正确设置hreflang了吗?

Multify 自动为 Tilda 网站的所有语言版本设置正确的 hreflang,支持 Google 和 Yandex,无需手动标记,也避免了上述清单中的错误风险。

常见问题

Hreflang 和网站翻译是一回事吗?
不。Hreflang 不会翻译内容,也不会创建语言版本,它只会告诉搜索引擎哪些现有页面是彼此的版本。首先,您需要将翻译后的内容放在单独的 URL 上,然后使用 hreflang 将它们链接起来。
如果网站只有一种语言,是否需要 hreflang?
不,只要内容和受众完全相同。一旦出现同一页面的第二个语言或区域版本,就需要 Hreflang。
可以在没有 x-default 的情况下使用 hreflang 吗?
可以,这不是必需的属性。但如果没有它,语言与任何版本都不匹配的用户将获得搜索引擎选择的默认版本,而不是您选择的版本。
如何检查 hreflang 是否在 Yandex 中工作?
在 Yandex.Webmaster 中,索引部分显示了哪些语言版本的页面已被索引。如果 hreflang 仅在站点地图中标记,而不是在页面源代码中标记,Yandex 将不会考虑它。
如何在 Tilda 网站上设置 hreflang?
Tilda 在独立项目或语言块之间没有内置的 hreflang 机制。标签可以在每个页面的设置中手动编写,或者通过代理自动生成所有版本的 hreflang。其工作原理如 Multify 主页所示。

我们将 Multify 连接到您的网站

您问题的答案将帮助我们了解如何更好地连接您的网站

网站类型
页面数量
每月网站访问量
首选联系方式 *