多语言、多地区站点最容易出现的一种情况是:同一个页面有中文、英文、日文几个版本,内容其实各不相同,但在蜘蛛眼里却像几份互相竞争、甚至互相重复的页面。问题通常不在翻译质量,而在版本之间的关系没有说清楚。
先确认版本之间有没有互相声明
hreflang 的作用是告诉搜索引擎:这几个 URL 是同一内容的不同语言或地区版本,请按用户的语言环境展示对应版本。它不是“多语言站点的加分项”,而是一张关系表。关系表最容易出问题的地方是单向声明。
- 英文页指向中文页,中文页却没有指回英文页;
- 只有首页做了声明,栏目页和详情页全都没有;
- 新增语言版本后,忘了回头补旧版本的声明。
建议的做法是:把语言版本当成一组 URL 来维护,任何一组里只要有一个 URL 变了,整组都要同步更新。用模板统一输出比手工写标签更可靠。
语言代码和地区代码别混着写
语言与地区是两层
en 表示英语,en-US、en-GB 表示不同地区。如果只是语言不同,用 en、zh、ja 就够了;如果同一语言面向不同市场(价格、货币、法规不同),才需要加地区代码。混着写会导致同一个页面被声明两次,关系表自己打架。
x-default 要有一个明确的落点
x-default 用来兜底:当用户的语言环境不在你声明的那几种里时,默认展示哪个版本。它应该指向一个内容完整、不强制跳转的页面,通常选英语版或主语言版。不要把它指向一个“语言选择页”,那会让用户和蜘蛛都停在中间页。
与 canonical 的关系要理顺
常见误解是:多语言版本应该全部 canonical 到主语言版本,否则会被判重复。这种做法会让其他语言版本很难被单独索引。更合理的思路是——各语言版本各自 canonical 到自己,同时用 hreflang 把它们串起来。只有当同一语言下的几个 URL 内容几乎一致(例如带参数的变体)时,才该合并 canonical。
一句话记法:hreflang 管“谁和谁是兄弟”,canonical 管“这一组里哪个是代表”。两者不冲突,但指向必须各自明确。
自动跳转与机器翻译页
根据浏览器语言自动跳转看起来贴心,实际常常挡住蜘蛛——不少爬虫带着单一的语言头访问,被跳到另一个版本后,原来的 URL 就再也抓不到了。更稳妥的做法是:URL 保持可访问,用页面内的语言切换入口引导用户,必要时给一个不依赖脚本的提示条。
机器翻译生成的大量页面则要控制规模。翻译质量低、内容重复度高的页面,建议先不提交、不加索引,等人工校对后再开放。宁可少几十个语言版本,也不要把整站拖进低质量内容的泥潭。
一份可执行的自查清单
- 列出站内所有语言与地区版本,确认每一组 URL 的对应关系完整。
- 随机抽五组页面,检查声明是否双向、语言与地区代码是否互相匹配。
- 确认每组都有且只有一个 x-default。
- 检查各语言版本的 canonical 是否指向自己,而不是统一指向主语言。
- 关掉自动跳转,用真实请求分别访问几个语言版本,看返回内容是否一致。
- 在搜索后台对比各语言版本的收录情况,长期零收录的版本重点排查。
- 新增语言时,把“补 hreflang、补 sitemap、补内链入口”写进上线流程。
入口和抓取路径同样重要
声明写得再规范,如果其他语言版本没有任何内链入口,蜘蛛也很难发现它们。建议在页脚或顶部语言切换区给每个版本一个真实的 a 链接,而不是纯 JS 按钮;同时在 sitemap 里分别标注各语言版本,方便蜘蛛按组抓取。
做完这些不必期待立刻见效。多语言站点的收录和展示调整通常比较慢,重点是把关系表维护清楚,让它随着内容更新一直保持准确,而不是上线时检查一次就放着不管。