多语言网站的字符集与 hreflang
发布时间:2026-06-21 10:48       
更新时间:2026-06-21 23:24
多语言站点要顺利,字符集和 URL 结构得在写第一行代码之前定下来,这两件事跟翻译质量无关,出问题时也最隐蔽。
一、字符集统一到 utf8mb4
MySQL 的 utf8 编码只支持三字节字符,emoji 和一部分生僻字写库时会报错或被截断,正确的选择是 utf8mb4。建库时显式声明:
CREATE DATABASE site DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
应用连接层同步对齐,执行 set names utf8mb4 或在连接串里指定 charset。页面侧再放 ,三处一致才不会出现"页面正常、库里乱码"的分裂状态。测试编码链路最快的办法,是往库里插一条带 emoji 的记录,通不过就说明还有一环没改到。历史项目从 utf8 升级时注意,库表和连接配置要一起改,只改一头会出现写入正常、读取乱码的错位。COLLATE 排序规则也要选对,选错了中文排序看起来就像乱序。
二、URL 结构怎么选
三种常见结构:子目录(example.com/en/)、子域名(en.example.com)、独立域名。中小站点首选子目录,权重集中在一个域名下,证书、备案、收录管理的成本都最低。语言代码用标准缩写 en、ja、zh,自造缩写会让识别失效。语言切换要体现在 URL 上,/en/ 对应英文版,别用 cookie 记忆语言却不反映在地址里,否则搜索引擎只看得到一个版本,其他语言的页面根本进不了索引。每种语言版本的内容要真实完整,用机翻占位的子目录不如先不发布,空壳版本会拉低整站的质量评价。
三、hreflang 是干什么的
hreflang 标签告诉搜索引擎"这个 URL 是某种语言或地区的版本",各语言版本互相声明,减少它们互相竞争排名、用户被引到错误语言页的问题。实现是每个版本的页面头部加一组 link 标签:
互相引用要成对,只写单向是常见错误;再补一条 hreflang="x-default" 作为未匹配语言时的兜底。
四、上线前的检查
逐个语言版本点一遍,重点看乱码、翻译缺失时的兜底显示、切换语言后 URL 是否对应变化,任何一项异常都回到字符集和结构两层去查根。hreflang 写完后用站长平台的国际定位报告核对,确认各语言版本被正确识别。