多语言站的技术结构,说复杂很复杂,说简单也就三条原则:每种语言一个独立 URL、每个 URL 一个固定版本、版本之间的对应关系明确写出来。违背这三条,后面全是坑。
URL 结构怎么选
三种常见做法,各有取舍:
| 方式 | 示例 | 适合 | 问题 |
|---|---|---|---|
| 子目录 | example.com/en/ |
同一个团队维护,站点规模中等 | 主域权重共享,但也互相牵连 |
| 子域名 | en.example.com |
各语言市场差异大,独立运营 | 需要单独做权重积累,配置成本高 |
| 独立域名 | example.co.uk |
目标市场有本地化品牌需求 | 成本最高,每个域名都要单独维护 |
大多数外贸企业用子目录就够:`example.com/` 中文,`example.com/en/` 英文。简单、好维护、权重共享。
hreflang 怎么写
hreflang 的作用是告诉搜索引擎:这几个 URL 是同一内容的不同语言版本,别当成重复内容;同时告诉它哪个版本给哪个地区的用户。
写法有三种位置:HTML head 里的 link 标签、HTTP 响应头、XML sitemap。任选一种,不要混用多种造成冲突。中小企业站推荐用 HTML head,最直观。
基本格式:
<link rel="alternate" hreflang="zh-CN" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/" />
要点:
- 必须双向互指。A 页面写了指向 B,B 页面也必须写指向 A。单向标注不生效。
- 每个语言版本里都要包含全部的 hreflang 列表,包括指向自己的那条。
- x-default 指向默认版本,通常是英文版或语言选择页。
- href 必须是绝对 URL,且能被正常访问。
- 语言代码要规范:`en` 表示英语,`en-US` 表示美式英语,`zh-CN` 表示简体中文。别写 `cn` 或 `zh_CN`。
最容易出错的五件事
一、版本之间内容完全不同
英文版只有 5 个页面,中文版有 50 个。这种情况下不该对所有页面标 hreflang,只标真实存在对应关系的那些。硬凑出来的对应关系会让搜索引擎困惑。
二、用自动跳转代替版本选择
按 IP 或浏览器语言自动跳转,看起来贴心,实际上会造成两个问题:抓取工具可能只抓到跳转后的版本,永远看不到另一个;用户想切回另一个版本却找不到入口。
正确做法:语言切换是显式链接,不自动跳。
三、URL 带参数做语言区分
`example.com/?lang=en` 这种写法,参数容易被忽略,也容易产生重复内容。用路径,不用参数。
四、hreflang 指向 301 或 404
改版后 URL 变了,hreflang 没同步更新。指向跳转页或失效页的 hreflang 会被忽略。
五、语言和地区混用
`en-GB` 和 `en-US` 是不同地区,如果内容完全一样,没必要分两个版本。只有内容真的针对地区调整过(货币、单位、认证、联系地址),才值得分。
上线前怎么验
- 抓每个语言版本的页面,确认 hreflang 列表完整且互指
- 逐个访问 hreflang 里的 URL,确认全部返回 200
- 确认没有两个 URL 内容完全相同却都标了不同的语言
- 确认语言切换链接在页面上可见、可用
- 用纯文本抓取英文版,确认正文是英文而不是空壳
常见问题
只有中英两个版本,需要 hreflang 吗
需要。不加的话,两个版本很可能被判定为重复内容,只有一个会被保留。
hreflang 和 canonical 冲突吗
不冲突,但要各司其职:hreflang 说明语言版本关系,canonical 说明同一语言内的唯一版本。不要在英文版页面里 canonical 指向中文版,那是明确错误。