免费工具 hreflang 标签生成器 · 代码逐个校验
多语言站、外贸站、简繁体分开的站,要用 hreflang 告诉 Google 哪个版本给哪些用户看。语法不难,却很容易写错一点点:en-UK 应该是 en-GB、zh_CN 用了下划线、网址写成相对路径、页面忘了把自己列进去。每行写一个版本,三种写法一次生成,每个错误都告诉你怎么改。
- 按 ISO 639-1 / 3166-1 校验
- 标签、sitemap、响应头
- 本地生成
列出各语言版本
每行一个版本:语言代码(可带文字或地区),空格,再写完整网址。点「看常见错误」可以看看各种写错的情况会怎么提示。
格式:代码 网址,如 zh-TW https://example.com/zh-tw/。中间用空格、Tab 或逗号都行,可以直接从表格里复制两列。
选填。语言都对不上的用户去哪个页面,通常是语言选择页或英文主站。
版本列表
| 代码 | 含义 | 网址 | 状态 |
|---|---|---|---|
zh-CN | 中文(中国) | https://www.example.com/zh-cn/ | 有效 |
zh-TW | 中文(台湾) | https://www.example.com/zh-tw/ | 有效 |
zh-HK | 中文(中国香港特别行政区) | https://www.example.com/zh-hk/ | 有效 |
en | 英语 | https://www.example.com/en/ | 有效 |
x-default | 其他所有用户 | https://www.example.com/en/ | 有效 |
检查清单
- 提示zh-CN, zh-TW, zh-HK 没有不带地区的 zh 版本。Google 建议给其他地区说这种语言的用户一个兜底网址:加一行 zh,或者靠 x-default。
- 通过4 个语言版本,代码和网址都有效。
- 提示这 5 行要原样放到清单里的每个网址上。每个页面都要列出自己和其他全部版本;A 页列了 B,B 页却没列 A,Google 会忽略这一对。
<link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh-cn/" />
<link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/" />
<link rel="alternate" hreflang="zh-HK" href="https://www.example.com/zh-hk/" />
<link rel="alternate" hreflang="en" href="https://www.example.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://www.example.com/en/" />放进列出的每个页面的 <head>,每页完全相同。
Link: <https://www.example.com/zh-cn/>; rel="alternate"; hreflang="zh-CN", <https://www.example.com/zh-tw/>; rel="alternate"; hreflang="zh-TW", <https://www.example.com/zh-hk/>; rel="alternate"; hreflang="zh-HK", <https://www.example.com/en/>; rel="alternate"; hreflang="en", <https://www.example.com/en/>; rel="alternate"; hreflang="x-default"
# Nginx (server / location)
add_header Link '<https://www.example.com/zh-cn/>; rel="alternate"; hreflang="zh-CN", <https://www.example.com/zh-tw/>; rel="alternate"; hreflang="zh-TW", <https://www.example.com/zh-hk/>; rel="alternate"; hreflang="zh-HK", <https://www.example.com/en/>; rel="alternate"; hreflang="en", <https://www.example.com/en/>; rel="alternate"; hreflang="x-default"';
# Apache (.htaccess, mod_headers)
Header set Link "<https://www.example.com/zh-cn/>; rel=\"alternate\"; hreflang=\"zh-CN\", <https://www.example.com/zh-tw/>; rel=\"alternate\"; hreflang=\"zh-TW\", <https://www.example.com/zh-hk/>; rel=\"alternate\"; hreflang=\"zh-HK\", <https://www.example.com/en/>; rel=\"alternate\"; hreflang=\"en\", <https://www.example.com/en/>; rel=\"alternate\"; hreflang=\"x-default\""给 PDF 等非网页文件用,附 Nginx(宝塔面板可用)和 Apache 写法。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.com/zh-cn/</loc>
<xhtml:link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh-cn/"/>
<xhtml:link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/"/>
<xhtml:link rel="alternate" hreflang="zh-HK" href="https://www.example.com/zh-hk/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/"/>
</url>
<url>
<loc>https://www.example.com/zh-tw/</loc>
<xhtml:link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh-cn/"/>
<xhtml:link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/"/>
<xhtml:link rel="alternate" hreflang="zh-HK" href="https://www.example.com/zh-hk/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/"/>
</url>
<url>
<loc>https://www.example.com/zh-hk/</loc>
<xhtml:link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh-cn/"/>
<xhtml:link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/"/>
<xhtml:link rel="alternate" hreflang="zh-HK" href="https://www.example.com/zh-hk/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/"/>
</url>
<url>
<loc>https://www.example.com/en/</loc>
<xhtml:link rel="alternate" hreflang="zh-CN" href="https://www.example.com/zh-cn/"/>
<xhtml:link rel="alternate" hreflang="zh-TW" href="https://www.example.com/zh-tw/"/>
<xhtml:link rel="alternate" hreflang="zh-HK" href="https://www.example.com/zh-hk/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.com/en/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://www.example.com/en/"/>
</url>
</urlset>每个版本一个 <url>,每个都列出全部版本。
分享这组输入:数值写在链接的 # 后面,不会发到服务器。
https://tapcub.com/zh/tools/hreflang-generator
版本 v1.0更新于 更新记录
生成器告诉你的几件事
表格显示每个代码被怎么理解;检查清单解释哪里错了、哪里值得再看一眼;三个代码块是同一组内容的三种写法。
代码和含义
有效的代码会显示成通行写法,并写出它的含义,方便发现「写得对但不是你想要的」:uk 是乌克兰语,se 是北萨米语,单独的 DE 是德语而不是德国。
错误和未生成的行
Google 会忽略的代码(en-UK、jp、zh_CN、es-419)和相对网址都算错误。这些行不会进入下面的代码,避免你复制出无效的标签;提示里会给出正确写法。
简体、繁体怎么写
zh-CN、zh-TW、zh-HK 按地区区分;zh-Hans、zh-Hant 按简繁字形区分,不限地区。只有一个繁体站同时给台湾和香港用,写 zh-Hant 更准确;分开做了才分别写 zh-TW、zh-HK。
三种写法
标签、sitemap、响应头效果相同,每个页面选一种即可。页面多用 sitemap,模板不用动;PDF 用响应头;其余用标签最直接。
生成器只能检查你给的代码和网址,看不到清单里的每个页面是否真的放了同一组标签;这种「回链」检查需要抓取线上页面。另外,百度不使用 hreflang,中文站在百度的表现不受它影响。
三步
两个版本和两百个版本,用法都一样。
-
1
列出全部版本
这个页面的每个语言 / 地区版本各写一行,包括你正在改的这一页。手上有网址对照表的话,直接从表格复制两列粘贴。
-
2
处理标出的问题
从上往下看检查清单。错误表示那一行没生成;提示是建议,比如补一个不带地区的兜底版本或 x-default。
-
3
复制一种写法
把标签放进每个页面的 head,或者把 sitemap 片段加进站点地图,或者在 Nginx / 宝塔面板里配置响应头。同一组内容放到每个版本上。
有效的 hreflang 值长什么样
出自 Google 关于多语言版本的文档。值不区分大小写;通行写法是语言小写、文字首字母大写、地区大写。
- 语言:ISO 639-1 两字母;地区:ISO 3166-1 两字母;文字:ISO 15924 四字母
- 只写地区无效;只写语言可以
- 网址必须是完整地址,每个版本都要列出自己和其他全部版本
| 写法 | 有效吗 | 原因 |
|---|---|---|
zh | 有效 | 中文,不限地区和字形 |
zh-CN、zh-TW | 有效 | 中国大陆中文、台湾中文 |
zh-Hans、zh-Hant | 有效 | 简体中文、繁体中文 |
x-default | 有效 | 语言都对不上时的兜底 |
zh_CN | 无效 | 下划线,应为 zh-CN |
cn、jp | 无效 | 国家代码;中文是 zh,日语是 ja |
zh-CHS | 无效 | 旧写法,应为 zh-Hans |
en-UK | 无效 | UK 是保留代码,英国是 GB |
CN | 无效 | 只有地区,没有语言 |
「常见错误」清单逐行改
点「看常见错误」按钮后,清单里每一行的检查结果和改法。
| 行 | 写的是 | 问题 | 改成 |
|---|---|---|---|
| 1 | en-UK | 保留的地区代码 | en-GB |
| 2 | jp | 国家代码当成了语言代码 | ja |
| 3 | zh_CN | 用了下划线 | zh-CN |
| 4 | es-419 | 数字地区(拉丁美洲) | es,或按国家写 es-MX、es-AR…… |
| 5 | de /de/ | 相对网址 | https://www.example.com/de/ |
| 6–7 | en-us 两次 | 同一代码两个网址 | en-US 只保留一个网址 |
七行里照原样只有一行能用,而只有一个版本的 hreflang 等于没写。改完后是六个版本;再加一个 x-default,把同一组标签放到这六个页面上。
Google 为什么不认你的 hreflang
代码写错很容易查出来;下面这些问题语法都对,照样会让设置失效。
没有回链
中文页列了英文页,英文页却没列回中文页。Google 需要双向互指,否则忽略这一对。
忘了列自己
每个版本都要把自己的网址写进去。模板里只列「其他语言」的写法,会让每一页都出这个错。
指向跳转或 noindex 的网址
hreflang 里的网址应该是最终的、可收录的规范网址。会 301 跳转或带 noindex 的网址会拖累整组设置。
当成自动跳转用
hreflang 只影响搜索结果里显示哪个网址,不会把访客转走。按 IP 或浏览器语言自动跳转,反而可能让 Google 抓不到其他版本。
确认每个版本迎来了对的用户
hreflang 上线后要看的是:每个语言版本有没有拿到目标国家的搜索流量。
hreflang 是什么?
一种标注,告诉搜索引擎这个页面还有其他语言或地区的版本,以及哪个是哪个。Google 据此在搜索结果里显示对应的版本,比如给香港用户显示繁体页面。它只是提示,不是跳转。
百度认 hreflang 吗?
百度没有关于 hreflang 的公开文档,可以认为不使用。中文站在百度的收录和排名不受它影响;hreflang 主要是给 Google(以及 Yandex 等)看的,做外贸站、出海站时才需要认真配置。
用 HTML 标签、sitemap 还是响应头?
任选一种,Google 认为三者等效,同时用并不会更好。小站用标签最简单;大站用 sitemap,模板不用改;PDF 等非网页文件用响应头。
x-default 是什么?
给语言和地区都对不上的用户准备的网址,通常是语言选择页或英文主站。它是选填的,但不写的话,这些用户落到哪个版本由 Google 决定。
简体中文写 zh-CN 还是 zh-Hans?
都有效。zh-Hans / zh-Hant 按简繁字形区分,不限地区;zh-CN / zh-TW / zh-HK 按地区区分。如果只有一个简体站给所有地区的人看,zh-Hans 或直接写 zh 更准确;简体、台湾繁体、香港繁体分开做了,就分别写 zh-CN、zh-TW、zh-HK。
每个页面都要列出自己吗?
要。Google 文档明确要求每个语言版本都列出自己和其他所有版本,每一页放的是完全相同的一组。
hreflang 可以跨域名吗?
可以。各版本可以在不同域名上,比如 example.com 和 example.cn,只要每个页面都互相指回来。用 Search Console 监控的话,每个域名都要验证。
我的清单会上传吗?
不会。校验和生成都在你的浏览器里完成。复制分享链接时,清单写在网址 # 号后面,浏览器不会把这一段发给服务器。