做多语言网站,第一个要决定的问题就是:URL 结构怎么选。目前主流的有两种方案:子目录(Subdirectory)子域名(Subdomain)

子目录就是在主域名下面加语言路径,比如 example.com/zh/example.com/en/。子域名就是每个语言一个独立的子域名,比如 zh.example.comen.example.com

选哪个好?这个问题没有标准答案,要看你的具体情况。下面从多个维度来分析。

多语言的一般做法

在对比两种方案之前,先了解一下多语言网站常见的几种 URL 结构:

1. 子目录(Subdirectory / Subfolder)

example.com/zh/
example.com/en/
example.com/ja/

所有语言版本都在同一个主域名下,通过路径区分语言。这是最常见的做法。

2. 子域名(Subdomain)

zh.example.com
en.example.com
ja.example.com

每个语言一个独立的子域名,技术上是不同的站点。

3. 独立域名(ccTLD)

example.cn
example.com
example.jp

每个国家/地区一个独立的顶级域名。这种方案成本最高,适合大型跨国公司。

4. 参数方式

example.com/?lang=zh
example.com/?lang=en

用 URL 参数区分语言。这种方式最简单,但 SEO 效果最差,一般不推荐。

5. 其他方式

还有一些不太常见的方式,比如不同语言放在不同端口、或者基于内容协商(同一 URL 根据 Accept-Language 返回不同语言)。这些都不适合 SEO,就不展开了。

总的来说,子目录和子域名是目前最主流、SEO 友好度最高的两种方案,也是本文重点讨论的对象。

子目录方案(Subdirectory)

实现方式

子目录方案的核心是:所有语言共享同一个域名,通过 URL 路径的第一层区分语言。

技术上的实现方式:

1. 服务端路由

在服务器端根据路径前缀渲染不同语言的内容。比如用 Node.js + Express:

app.get('/zh/about', (req, res) => {
  res.render('about', { lang: 'zh' });
});

app.get('/en/about', (req, res) => {
  res.render('about', { lang: 'en' });
});

2. 前端框架国际化

Nuxt、Next.js 等框架都有成熟的 i18n 模块,配置一下就能自动生成带语言前缀的路由。比如 Nuxt 的 @nuxtjs/i18n

// nuxt.config.js
i18n: {
  locales: ['zh', 'en', 'ja'],
  defaultLocale: 'zh',
  strategy: 'prefix_except_default',
}

生成的 URL 就是:

  • 默认语言:example.com/about
  • 英文:example.com/en/about
  • 日文:example.com/ja/about

3. 静态站点生成

如果是纯静态站点,可以每个语言一个目录,生成静态 HTML 文件。比如:

/
  index.html
  about.html
  en/
    index.html
    about.html
  ja/
    index.html
    about.html

优点

1. 域名权重集中

这是子目录方案最大的优势。所有语言版本都在同一个域名下,外链、权重、信任度都集中在一起。一个语言积累的权重,其他语言也能间接受益。

2. 更容易被搜索引擎理解

搜索引擎把子目录视为同一个网站的不同部分,理解起来更直接。内部链接的权重传递也更顺畅。

3. 建站成本低

只需要一个域名、一个服务器、一套代码(大多数情况下),维护成本低。

4. 管理方便

所有语言在同一个后台管理,内容、用户、订单等数据天然在一起,不需要做跨子域名的数据同步。

缺点

1. 地区针对性弱

子域名或独立域名更容易让搜索引擎和用户一眼看出"这是针对某个国家/地区的版本"。子目录在这方面弱一些,需要配合 hreflang 标签来明确。

2. 大型站点可能结构混乱

如果语言很多(比如十几个),加上每个语言下又有很多分类和页面,URL 结构可能会变得很深很复杂。

3. 服务器压力集中

所有语言的流量都打在同一个服务器上,峰值压力会比较大。当然这个可以通过 CDN 和负载均衡解决。

子域名方案(Subdomain)

实现方式

子域名方案的核心是:每个语言一个独立的子域名,技术上是独立的站点。

技术上的实现方式:

1. 通配符子域名 + 服务端判断

DNS 配置 *.example.com 都指向同一个服务器,服务端根据请求的子域名判断语言,返回对应内容。

app.get('/', (req, res) => {
  const subdomain = req.subdomains[0]; // 'zh', 'en', etc.
  res.render('home', { lang: subdomain });
});

2. 多应用部署

每个子域名对应一个独立的应用,部署在不同的服务器或不同的进程中。这种方式隔离性好,但维护成本高。

3. WordPress 多站点

WordPress 的多站点(Multisite)功能可以很方便地实现子域名方案,每个子站一个语言版本。

优点

1. 地区/语言定位清晰

用户和搜索引擎一看域名就知道这是哪个语言的版本。比如 fr.example.com 明显是法语版,对法国用户来说也更有亲切感。

2. 站点隔离,风险分散

每个子域名在搜索引擎眼中是相对独立的站点。如果某个语言版本出了问题(比如被惩罚、被黑),对其他版本的影响相对较小。

3. 适合差异化运营

不同地区的业务可能差异很大——产品线不同、定价不同、活动不同。子域名方案下每个站点可以独立运营,互不干扰。

4. 技术架构灵活

不同语言版本可以用不同的技术栈、部署在不同的服务器上,团队也可以独立维护。

缺点

1. 域名权重分散

这是子域名方案最大的劣势。每个子域名在搜索引擎看来是不同的站点,外链、权重都是分开计算的。中文站积累的权重不会自动传递给英文站。

虽然子域名之间会有一些关联(毕竟在同一个主域名下),但权重传递的效果远不如子目录方案。

2. SEO 成本高

每个子域名都需要单独做 SEO —— 单独建外链、单独积累权重、单独提交 Search Console。对于资源有限的团队来说,压力很大。

3. 维护成本高

多个子域名意味着多个站点,代码部署、内容管理、数据同步都更复杂。

4. 起步慢

新增加一个语言版本,相当于从零开始做一个新站,排名见效慢。而子目录方案下,新语言可以借助主站已有的权重更快起步。

什么场景选什么方案

优先选择子目录的场景

  1. 中小型网站:语言数量不多(2-5 种),团队规模小,资源有限
  2. 内容为主的网站:博客、资讯站、知识库等,内容是核心,权重集中更重要
  3. 初创期/成长期:还在积累权重的阶段,子目录能更快见效
  4. 多语言版本内容高度相似:只是翻译一下,业务逻辑相同
  5. SEO 资源有限:没有足够的精力给每个语言单独做外链和推广

优先选择子域名的场景

  1. 大型跨国企业:每个地区有独立的团队和业务,需要独立运营
  2. 地区差异大:不同语言/地区的产品、定价、服务差异很大
  3. 合规要求:某些国家要求数据存放在当地,或者有特定的合规要求
  4. 品牌本地化需求强:希望给当地用户"这是我们本地站"的感觉
  5. 有充足的 SEO 资源:每个语言都有专门的人做推广和外链

什么时候用独立域名(ccTLD)

如果你的业务在某个国家非常重要,需要最强的本地化信号,而且预算充足,可以考虑用独立的国家顶级域名,比如 .cn.co.jp.co.uk 等。

独立域名在本地化搜索中的表现最好,但成本也最高,适合大型跨国公司。

两种方案的对比总结

维度子目录子域名
域名权重✅ 集中,共享❌ 分散,各自独立
SEO 见效速度✅ 快,借主站权重❌ 慢,相当于新站
地区针对性❌ 一般,需配合 hreflang✅ 强,一目了然
建站成本✅ 低,一套代码❌ 高,多套系统
维护成本✅ 低❌ 高
风险隔离❌ 一损俱损✅ 互不影响
运营灵活性❌ 统一管理✅ 独立运营
技术复杂度✅ 简单❌ 复杂

注意事项

不管选哪种方案,以下几点都需要注意:

1. 做好 hreflang 标签

无论是子目录还是子域名,都需要正确设置 hreflang 标签,告诉搜索引擎各语言版本之间的对应关系。这一点两种方案都一样重要。

2. 默认语言的处理

子目录方案中,默认语言要不要加前缀?有两种做法:

  • 加前缀example.com/zh/example.com/en/,所有语言都统一有前缀
  • 不加前缀example.com/ 是默认语言,example.com/en/ 是英文

各有利弊。加前缀结构更统一,不加前缀默认语言的 URL 更短。根据自己的情况选择,但选了之后要全站保持一致。

3. 避免自动跳转

有些网站会根据用户的 IP 或浏览器语言自动跳转到对应语言版本。这种做法对 SEO 不友好,因为搜索引擎爬虫主要来自美国,可能被自动跳转到英文版,导致中文内容不被正确抓取。

正确的做法是:让用户自己选择语言,或者通过 hreflang 让搜索引擎自己判断展示哪个版本。

4. 语言切换要方便

页面上要有清晰的语言切换入口,用户可以随时切换到其他语言版本。切换后保持在当前页面,不要跳到首页。

5. 不要用机器翻译凑数

多语言网站的核心是内容质量。如果某个语言版本全是机器翻译的低质量内容,反而会拉低整个网站的质量信号。宁缺毋滥,做一个语言就把它做好。

6. 内容不要高度重复

不同语言版本的内容如果只是简单翻译,SEO 效果会打折扣。如果能针对当地市场做本地化的内容(比如当地的案例、当地的新闻),效果会好很多。

7. Search Console 单独提交

子域名方案下,每个子域名都需要单独添加到 Google Search Console,单独提交 sitemap。子目录方案下,只需要添加主域名就行。

8. 内部链接的处理

子目录方案下,跨语言的内部链接权重传递更自然。子域名方案下,跨子域名的链接算外链,虽然有一定价值,但传递效果不如站内链接。

写在最后

子目录和子域名没有绝对的好坏,关键看你的业务阶段和资源。

对于大多数网站来说,子目录方案是更稳妥的起点——权重集中、见效快、维护简单。等业务发展到一定规模,某个地区的业务足够大了,再考虑拆成子域名甚至独立域名也不迟。

当然,如果你是从一开始就定位为跨国企业、有充足的资源和团队,那直接上子域名甚至独立域名也是合理的选择。

记住:URL 结构只是多语言 SEO 的第一步,真正决定效果的还是内容质量和用户体验。