91,000 页面,30 种语言,无需 WordPress Multisite
你的客户在晚上 9 点发来邮件:"我们能在下个季度添加日语吗?"你的心沉了下去。Multisite 网络在 12 种语言下已经步履蹒跚。WPML 上个月的更新破坏了你的波兰语布局。共享的 wp_options 表已达 840 MB,克隆暂存环境需要十一分钟。你已经为这个架构打过三次补丁,每个修复都让下一次语言启动变得更加困难。我们曾运行过完全相同的设置——91,000+ 页面、30 种语言、企业级负载——并完全放弃了 Multisite 和 WPML。没有插件续费。没有共享表。没有跨语言污染。新堆栈部署更快,托管成本减少 40%,扩展时没有恐惧感。以下是我们实际部署的架构、迁移中的失败,以及使其有效的四个决策。
因此我们停止了这样做。如今,我们的生产系统在 每个区域 118+ 页面的 30 种语言中提供服务——总共 91,000+ 个动态页面——不使用 WordPress Multisite、不使用 WPML,也不使用任何一个带来的年度许可证焦虑。添加新语言大约需要 45 分钟,成本大约 22 美元的 API 令牌。
本文是完整的分解。架构、工具、成本以及我们在多个企业项目中完善的迁移路径。
目录
- 为什么 WordPress Multisite 在扩展时崩溃
- WPML 和 WordPress 多语言插件的真实成本
- 现代架构:Next.js + next-intl + 无头 CMS
- 设置翻译管道
- AI 翻译:改变一切的经济学
- 多语言内容的无头 CMS 选项
- 分步指南:构建 30 种语言网站
- 迁移路径:WordPress 至无头多语言
- 成本比较:WordPress Multisite vs. 无头多语言
- 性能基准
- 常见问题
为什么 WordPress Multisite 在扩展时崩溃
WordPress Multisite 在 2010 年为在单个安装上运行多个博客而设计。它从未为真正的多语言企业部署而架构设计。以下是当你扩展它时会发生的情况:
共享数据库,共享问题。 Multisite 网络中的每个网站共享同一个 wp_ 数据库,表名添加前缀(wp_2_posts、wp_3_posts 等)。跨网站内容共享很脆弱。一个网站上的插件更新可能会在整个网络中级联故障。我曾看到单个格式错误的迁移脚本同时破坏 12 种语言变体。
管理复杂性不断增加。 每个子网站都有自己的管理仪表板,但它们并非真正隔离。超级管理员看到所有内容。网站管理员看到很少。没有干净的方式让德国内容团队仅访问他们的内容,而不使用每次 WordPress 主要更新时都会中断的自定义角色管理。
插件兼容性是一个地雷。 并非每个插件都与 Multisite 兼容。当你的西班牙网站需要一个与 Multisite 不兼容的表单插件时,你陷入了在能力和稳定性之间选择。将这个决定乘以 10+ 种语言。
没有真正的 API 优先架构。 是的,WP REST API 存在。但它不是为了现代多语言网站所需的那种区域感知、边缘部署、CDN 缓存的内容交付而设计的。你最终会添加多个缓存和自定义端点层,这些本身就成为维护负担。
WPML 和 WordPress 多语言插件的真实成本
让我们谈论数字,因为这是 WordPress 多语言故事变得不舒服的地方。
WPML 许可证:每年 199 美元用于多语言代理计划。这是认真进行多语言工作的入门点。它是按网站的——或在 Multisite 中按网络的,听起来更好,直到你意识到你永远被锁定在他们的续费周期中。
性能影响:页面加载速度降低 20-40%。 我在多个客户网站上进行了这种基准测试。WPML 在每次页面加载中添加数据库查询以解析翻译、切换语言并管理字符串翻译。在内容丰富的页面上,那是数十个额外查询。你的 LCP 分数受影响。你的用户会注意到。
翻译管理成本是真正的杀手。 专业翻译机构收费每个单词 0.10-0.20 美元。对于一个企业网站,有 50,000 个单词的内容跨 10 种语言:
- 低估:50,000 × $0.10 × 10 = $50,000/年
- 高估:50,000 × $0.20 × 10 = $100,000/年
这只是初始翻译。每次内容更新、每个新页面、每篇博客文章——都需要回到翻译管道。
有更好的方法。
现代架构:Next.js + next-intl + 无头 CMS
以下是我们在企业部署中构建和战斗测试的堆栈:
┌─────────────────────────────────────────────┐
│ 边缘 / CDN 层 │
│ (Vercel / Cloudflare) │
├─────────────────────────────────────────────┤
│ Next.js 应用程序 │
│ ┌─────────────────────────────────┐ │
│ │ next-intl (i18n 路由) │ │
│ │ /en/about /de/ueber-uns │ │
│ │ /ja/about /ar/about │ │
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│ 无头 CMS / Supabase │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ 内容 │ │ 翻译 │ │
│ │ 模型 │ │ 表 (i18n) │ │
│ └──────────┘ └──────────────────┘ │
├─────────────────────────────────────────────┤
│ AI 翻译管道 │
│ (Claude API → 审核 → 发布) │
└─────────────────────────────────────────────┘
关键洞察:将内容管理与翻译管理分离,再与演示层分离。 每个层可以独立演变。无需触及翻译即可交换 CMS。无需迁移内容即可更改前端框架。添加语言无需触及代码。
next-intl 配置
以下是我们的路由设置在实践中的样子:
// src/i18n/routing.ts
import { defineRouting } from 'next-intl/routing';
export const routing = defineRouting({
locales: [
'en', 'es', 'fr', 'de', 'pt', 'it', 'nl', 'sv', 'no', 'da',
'fi', 'pl', 'cs', 'ro', 'tr', 'ar', 'hi', 'ja', 'ko',
'zh-CN', 'zh-TW', 'th', 'vi', 'id', 'ms', 'ru', 'uk'
],
defaultLocale: 'en',
localePrefix: 'as-needed'
});
// src/middleware.ts
import createMiddleware from 'next-intl/middleware';
import { routing } from './i18n/routing';
export default createMiddleware(routing);
export const config = {
matcher: ['/', '/(de|es|fr|ja|...)/:path*']
};
这给你干净的 URL 结构:/en/services、/de/dienstleistungen、/ja/サービス。每个区域得到自己的静态生成页面,从边缘提供。无需数据库查询在运行时进行语言解析。
Supabase 翻译表
我们在 Supabase 中使用简单但有效的架构存储翻译:
CREATE TABLE translations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
namespace TEXT NOT NULL,
key TEXT NOT NULL,
locale TEXT NOT NULL,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(namespace, key, locale)
);
CREATE INDEX idx_translations_locale ON translations(locale);
CREATE INDEX idx_translations_namespace ON translations(namespace, locale);
这个架构处理 30 种语言 × 数千个翻译键而不费力。查询很简单、可缓存且快速。
设置翻译管道
翻译管道是这个架构真正发光的地方。以下是我们的工作流程:
- 内容在英文中创作在无头 CMS 中
- 构建脚本提取所有可翻译字符串到 JSON 文件中
- Claude API 翻译每个 JSON 文件为目标区域
- 审核步骤(可选,对于关键内容)允许人类编辑批准翻译
- 翻译被提交到存储库或推送到 Supabase
- Next.js 重建通过 ISR 或完整重建影响的页面
// scripts/translate.ts
import Anthropic from '@anthropic-ai/sdk';
import { readFileSync, writeFileSync } from 'fs';
const anthropic = new Anthropic();
async function translateFile(sourcePath: string, targetLocale: string) {
const source = JSON.parse(readFileSync(sourcePath, 'utf-8'));
const message = await anthropic.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 4096,
messages: [{
role: 'user',
content: `将以下 JSON 值(不是键)翻译为 ${targetLocale}。
保持确切的 JSON 结构。使用自然、专业的语言
适合公司网站。保留任何 HTML 标签或
插值变量如 {name}。
${JSON.stringify(source, null, 2)}`
}]
});
const translated = JSON.parse(message.content[0].text);
writeFileSync(
sourcePath.replace('/en/', `/${targetLocale}/`),
JSON.stringify(translated, null, 2)
);
}
这是简化版本,但它捕捉了核心思想。在生产中,我们批处理请求、处理速率限制、验证输出结构并运行自动质量检查。
AI 翻译:改变一切的经济学
这是数学变得有趣的地方。
我们网站的传统翻译(118+ 页面,每种语言约 50,000 个单词):
- 每种语言: $5,000-$10,000(代理费率)
- 30 种语言: $150,000-$300,000
- 年度更新: $50,000-$100,000
AI 翻译使用 Claude:
- 每种语言: ~$22 的 API 令牌
- 每种语言的时间: ~45 分钟
- 30 种语言: ~$660 总计,~22.5 小时
- 添加新语言: 45 分钟,$22
这不是打字错误。每种语言二十二美元。
现在,我想在这里诚实。2026 年的 AI 翻译并非对每种用例都完美。法律文件、医疗内容、高度细致的营销文案——这些仍然受益于人工审核。但对于企业网站、产品描述、文档和博客内容?质量非常好。我们有日语、阿拉伯语和德语的母语使用者审核我们的 AI 翻译内容,反馈一致地落在"专业质量,偶尔有措辞偏好"上。
真正的优势不仅仅是成本——这是速度。当你发布新的英文页面并希望它以 30 种语言提供时,你看的是小时,而不是周。没有代理协调。没有翻译记忆管理。没有关于术语的来回。
多语言内容的无头 CMS 选项
你在这里有选择,正确的选择取决于你的团队和规模。以下是我们评估的内容:
| 平台 | i18n 支持 | 自托管 | 定价 (2026) | 最佳用途 |
|---|---|---|---|---|
| Sanity | 原生字段级 | 云 + 自托管 | 免费层、$15+/月专业版 | 结构化内容、实时协作 |
| Payload CMS | 原生,TypeScript | 是 | 免费 / OSS | 想要完全控制的开发团队 |
| Strapi | 基于插件的 i18n | 是 | 免费 / OSS | 已经在 Strapi 生态系统中的团队 |
| Storyblok | 原生字段级 | 仅云 | $106+/月 | 可视编辑、市场营销团队 |
| Supabase (原始) | 自定义架构 | 是 | 免费层、$25+/月 | 最大灵活性、开发人员繁重的团队 |
对于我们的无头 CMS 开发项目,我们通常建议Sanity 或 Payload用于内容丰富的网站,直接 Supabase 当团队想要对翻译管道的最大控制时。
重要的区别:使用无头方法,CMS 处理内容存储和编辑工作流。翻译管理存在于应用层中。这种分离意味着你永远不会被 CMS 供应商关于多语言内容应该如何工作的想法锁定。
分步指南:构建 30 种语言网站
以下是我们遵循的多语言网站开发的实际流程:
步骤 1:定义你的区域策略
在编写代码之前,决定:
- 你实际需要哪些语言?(检查你的分析)
- 你会使用本地化的 URL(
/de/kontakt)还是子域(de.example.com)? - 你需要区域变体(
en-USvsen-GB)或仅是语言代码? - 哪些内容是翻译的,哪些是特定于区域的?
我们默认基于路径的路由(/de/、/ja/),因为它对 SEO 更简单,对单个域更容易部署,并与 Next.js 中间件自然配合。
步骤 2:使用 next-intl 设置 Next.js
安装和配置:
npm install next-intl
构造你的消息目录:
messages/
├── en.json
├── de.json
├── ja.json
├── ar.json
└── ... (30 个区域文件)
每个文件包含命名空间翻译:
{
"navigation": {
"home": "首页",
"about": "关于我们",
"services": "服务",
"contact": "联系我们"
},
"hero": {
"title": "企业网站开发",
"subtitle": "为性能而构建,为规模而设计"
}
}
步骤 3:构建翻译管道
创建一个脚本,其中:
- 读取你的英文源文件
- 将它们发送给 Claude API 进行翻译
- 验证输出 JSON 结构
- 写入区域文件
- 运行自动质量检查(缺失的键、损坏的插值变量)
步骤 4:实现 hreflang 和 SEO
这是许多多语言实现处理不当的地方。每个页面都需要适当的 hreflang 标签:
// src/components/LocaleHead.tsx
export function LocaleHead({ currentLocale, path }: Props) {
const locales = routing.locales;
return (
<>
{locales.map((locale) => (
<link
key={locale}
rel="alternate"
hrefLang={locale}
href={`https://example.com/${locale}${path}`}
/>
))}
<link
rel="alternate"
hrefLang="x-default"
href={`https://example.com${path}`}
/>
</>
);
}
步骤 5:处理 RTL 语言
如果你支持阿拉伯语、希伯来语或其他 RTL 语言(我们支持阿拉伯语),你需要方向性 CSS:
// src/app/[locale]/layout.tsx
export default function LocaleLayout({ children, params: { locale } }) {
const direction = ['ar', 'he', 'fa'].includes(locale) ? 'rtl' : 'ltr';
return (
<html lang={locale} dir={direction}>
<body className={direction === 'rtl' ? 'font-arabic' : 'font-sans'}>
{children}
</body>
</html>
);
}
Tailwind CSS v4 原生支持 rtl: 变体,这使得方向性样式可管理。
步骤 6:部署和监控
通过 Vercel 上的 Next.js,每个区域的页面是静态生成的,从最靠近用户的边缘节点提供。德国用户点击 /de/dienstleistungen 从法兰克福边缘节点在不到 100 毫秒内获得响应。没有数据库查询。没有 WPML 查找。只是静态 HTML。
迁移路径:WordPress 至无头多语言
如果你目前在 WordPress Multisite 上使用 WPML,以下是我们在多个客户项目中完善的迁移路径。你可以在我们的 WordPress 至 Next.js 迁移指南中找到更多详情。
第 1-2 周:内容导出和审计
- 通过 WP REST API 导出所有内容(包括 WPML 翻译)
- 将内容类型映射到无头 CMS 模型
- 识别孤立翻译和内容缺口
- 记录所有 URL 模式以进行 301 重定向
第 2-4 周:无头 CMS 设置和内容导入
- 在选择的无头 CMS 中配置内容模型
- 导入英文源内容
- 设置 Supabase 翻译表
- 为所有目标语言运行 AI 翻译管道
第 4-6 周:前端构建
- 使用 next-intl 构建 Next.js 应用程序
- 实现所有页面模板
- 配置 hreflang 标签和站点地图生成
- 为新内容设置自动翻译管道
第 6-8 周:测试、重定向和启动
- 跨浏览器和跨区域测试
- 实现从旧 URL 模式的 301 重定向
- 向 Google Search Console 提交更新的站点地图
- 监控启动后的索引和流量模式
总时间表:4-8 周取决于内容量和复杂性。
成本比较:WordPress Multisite vs. 无头多语言
以下是 10 种语言企业网站 3 年的诚实成本明细:
| 成本类别 | WordPress Multisite + WPML | Next.js + 无头 + AI 翻译 |
|---|---|---|
| CMS 许可证(3 年) | $0 (WP 免费) | $0-$540 (Sanity pro) 或 $0 (Payload OSS) |
| WPML 许可证(3 年) | $597 | $0 |
| 专业翻译(初始) | $50,000-$100,000 | $220 (AI, 10 langs × $22) |
| 翻译更新(3 年) | $30,000-$60,000 | $500 (估计 AI 成本) |
| 托管(3 年) | $3,600-$7,200 (托管 WP) | $0-$720 (Vercel 免费-专业层) |
| 开发(初始构建) | $30,000-$60,000 | $40,000-$70,000 |
| 维护(3 年) | $18,000-$36,000 | $6,000-$12,000 |
| 3 年总成本 | $132,197-$263,797 | $46,720-$83,460 |
无头方法的开发成本初期稍高——你在构建自定义基础设施而不是配置插件。但持续节省是巨大的。没有 WPML 续费。没有翻译机构发票。没有 Multisite 维护烦恼。
性能基准
我们在我们的生产多语言网站上运行了 Lighthouse 审计,并与等效的 WordPress Multisite + WPML 实现进行了比较:
| 指标 | WordPress + WPML | Next.js + next-intl |
|---|---|---|
| LCP (最大内容绘制) | 2.8-4.2s | 0.8-1.2s |
| FID (首次输入延迟) | 120-280ms | 10-40ms |
| CLS (累积布局偏移) | 0.12-0.25 | 0.01-0.05 |
| 首字节时间 (TTFB) | 800-1,400ms | 50-150ms |
| Lighthouse 性能分数 | 45-65 | 95-100 |
| 每种语言的页面 | ~118 | ~118 |
| 总索引页面 | ~1,180 (10 langs) | ~91,000+ (30 langs) |
TTFB 差异本身就值得迁移。当你的页面是静态生成的并从边缘 CDN 提供时,你不需要等待 PHP 启动 WordPress、加载 WPML、查询数据库、解析翻译和渲染模板。HTML 只是...在那里。
常见问题
AI 翻译是否足够好用于企业网站? 对于大多数公司内容——是的。在 2026 年,Claude 和 GPT-4 为商务内容、产品描述和文档生成母语使用者评为专业质量的翻译。我们已在包括日语、阿拉伯语、韩语以及中文(简体和繁体)在内的 30 种语言中部署了 AI 翻译,获得了母语使用者审核者的正面反馈。法律、医疗或高度受管制的内容可能仍然需要人工审核,但即使在那里,AI + 人工审核也远便宜于纯人工翻译。
向无头多语言网站添加新语言需要多少费用? 使用我们的管道,添加新语言大约需要 22 美元的 Claude API 令牌和大约 45 分钟的工程时间。这涵盖了翻译所有页面内容、导航、元数据和 UI 字符串。与 WPML 的按网站许可加上典型企业网站的 $5,000-$10,000 专业翻译成本相比。
最好的 WordPress Multisite 多语言替代方案是什么? 对于企业部署,无头 CMS(Sanity、Payload 或 Strapi)配对 Next.js 和 next-intl 提供最灵活和高性能的架构。你可以获得真正的内容/演示分离、边缘部署的页面以及独立于 CMS 管理翻译的能力。对于 50 页以下的简单网站,Webflow 及其本地化功能可以工作,但你会在企业规模时遇到限制。
你如何处理 30+ 种语言版本的 SEO?
每个页面为指向所有语言变体加上 x-default 标签的所有语言生成适当的 hreflang 标签。我们生成每个区域的 XML 站点地图并将其提交给 Google Search Console。每个区域获得自己的元标题、描述和 Open Graph 标签集——都通过 AI 管道翻译。Google 已索引我们 30 种语言变体中的超过 91,000 页。
你能从 WordPress Multisite 迁移到无头而不失去 SEO 排名吗? 可以,但这需要仔细规划。关键步骤是:从旧 URL 到新区域前缀 URL 的全面 301 重定向映射、从第一天开始的正确 hreflang 实现以及启动后立即提交更新的站点地图。我们通常看到 1-3 周的索引转换期,之后由于更好的 Core Web Vitals 分数而排名改进。
2026 年最好的 WPML 替代方案是什么? Next.js 应用程序的 next-intl,或 Nuxt 应用程序的 nuxt-i18n。两者在框架层中原生处理区域路由、消息格式化和 SEO 元数据——没有 WordPress 插件的性能开销。与 WPML 不同,没有年度许可费、没有数据库开销,没有与其他插件的兼容性问题。i18n 逻辑存在于属于它的应用代码中。
你如何在 30 种语言中管理翻译质量? 我们使用多层方法:AI 翻译作为基础层、自动质量检查(JSON 结构验证、插值变量保留、长度比较)以及对高可见性内容如主页标题和 CTA 的可选人工审核。我们还为每种语言维护术语表,该术语表会传递给 AI 作为上下文,确保品牌术语、产品名称和技术词汇得到一致处理。
这种方法对于具有频繁内容更新的网站是否可行? 绝对是——它实际上比 WPML 更适合频繁更新。当你发布或更新英文页面时,翻译管道可以通过 webhook 自动运行。新翻译在几分钟内生成,而不是几天。使用 Next.js 中的 ISR(增量静态再生成),更新的页面上线而无需完整网站重建。我们有客户每天发布博客文章,在一小时内以 30 种语言出现,同一天被搜索引擎完全索引。