先说结论
多语言路由的核心不是"加前缀",是让每个语种成为一个完整闭环:URL、导航、内链、sitemap 全部自洽。
路由设计
/ 默认语言首页
/products/door 默认语言内页
/ja/products/door 日语
/ru/products/door 俄语
三种实现方式:
| 方式 | 例子 | 评价 |
|---|---|---|
| 语言前缀 | /ja/... | 推荐:清晰、利于收录 |
| 子域名 | ja.example.com | 可行,但要独立配置证书与 GSC |
| 参数 | ?lang=ja | 不推荐:爬虫视为同页 |
语言识别顺序
- URL 前缀(最高优先级)
- 用户手动选择(存 Cookie)
- 浏览器 Accept-Language(仅用于首次提示,不做强制跳转)
- 默认语言
不要按 IP 强制跳转——爬虫只用一个 IP,会把你的站当成单语站。
RTL 怎么处理
阿拉伯语、希伯来语、波斯语、乌尔都语是 RTL(从右到左)。
最小实现:
<html lang="ar" dir="rtl">
CSS 用逻辑属性代替方向属性:
/* 不要 */ margin-left: 16px;
/* 要 */ margin-inline-start: 16px;
这样同一套样式在 LTR / RTL 下都正确。
常见坑
- 图标方向:返回箭头在 RTL 下要翻转
- 数字与型号:RTL 段落里的英文型号要用
dir="ltr"包裹 - 表单对齐:标签与输入框的位置要跟随方向
SEO 联动
每个语种页面输出:
- 自身 canonical
- 全语种 hreflang(含 x-default)
- 当前语种的 sitemap 分片
选择是:默认语言挂在根路径,其他语种加前缀。RTL 适配改了三处:图标方向(返回箭头)、表单标签对齐、表格首列。数字与型号在 RTL 段落里用 dir="ltr" 单独包裹,否则 -25℃ 会显示成 25℃-。