我之前有个项目,需要用Nuxt做多语言网站,甲方很关心SEO。
我花时间测了各种配置,结论是:能,但需要正确配置。
不配置的话,效果可能还不如一个单语言的静态站。
Nuxt 3里,搞国际化主要是两个路子:
一个是基于路由,比如 /en/about 和 /zh/about。
另一个是用子域名或顶级域名,比如 en.site.com 和 site.cn。
从SEO角度看,它们区别很大。
| 方式 | 配置复杂度 | SEO友好度 | 实现关键点 |
|---|---|---|---|
| 路由前缀 (如 /en, /zh) | 低 | 中高 | 需要正确设置hreflang标签 |
| 子域名 (如 en.site.com) | 中 | 高 | 通常被视为独立站点,需单独积累权重 |
| 顶级域名 (如 site.co.uk) | 高 | 最高 | 地域信号最强,但成本和管理难度大 |
大部分项目用的是第一种,路由前缀。
因为它在同一个域名下,权重可以集中,管理也方便。
这是影响SEO最关键的东西。
hreflang标签告诉搜索引擎,某个页面对应哪些其他语言的版本。
如果没设置或设错了,搜索引擎可能把不同语言页面当成重复内容,或者不知道该把哪个版本展示给对应地区的用户。
在Nuxt项目里,你需要确保每个页面都能生成正确的hreflang标签。
我用的是@nuxtjs/i18n模块,版本是8.0以上。
这是nuxt.config.ts里的一部分配置:
i18n: {
strategy: 'prefix_except_default',
defaultLocale: 'en',
locales: [
{ code: 'en', iso: 'en-US' },
{ code: 'zh', iso: 'zh-CN' }
],
detectBrowserLanguage: false
}
重点在iso字段,它必须符合标准。
en-US 表示美国英语,zh-CN 表示简体中文。
这个iso值会直接用在生成的hreflang标签里。
Nuxt有自动生成sitemap的模块,比如@nuxtjs/sitemap。
但在多语言环境下,默认生成的可能不够用。
它可能只生成默认语言的URL,或者没把多语言关系写进去。
我当时的做法是自定义sitemap配置。
手动指定所有需要包含的路由,并为每个路由的各个语言版本设置链接关系。
下面是一个简化的配置示例:
sitemap: {
sources: ['/api/__sitemap__/urls'],
},
// 然后在对应的API路由里,返回所有语言版本的URL数组
每个URL对象里,需要包含links属性,列出该页面的所有其他语言版本。
这样生成的sitemap.xml里,才会包含完整的多语言信息。
如果你的站有大量动态路由,比如博客文章 /blog/[slug]。
那么每种语言下,这些文章都要有对应的翻译内容。
我的做法是在数据库里,把不同语言的文章通过一个共同ID关联起来。
前端根据当前语言和这个ID,去请求对应语言的内容。
路由看起来是这样:
/en/blog/my-post-title
/zh/blog/我的文章标题
在服务器端渲染时,需要根据当前语言和slug,获取正确的内容。
这要求你的后端API或数据库查询逻辑能支持这种关联查找。
网站上线后,我建议用这几个工具检查一下:
我当时遇到一个坑,是缓存导致某个语言的页面返回了另一个语言的内容。
因为CDN没区分语言前缀做缓存键。
后来在CDN设置里,把语言前缀加到缓存键里就解决了。
总的来说,Nuxt做国际化SEO是可行的,但整个链条上的每个环节都要打通。
从代码配置,到内容管理,再到部署运维,都得考虑到多语言这个因素。
只要配置对了,效果是看得见的,我那个项目后期各语言版本的收录和排名都上来了。
本文由小艾于2026-04-27发表在爱普号,如有疑问,请联系我们。
本文链接:https://www.ipbcms.com/4804.html