多语言或多地区站点常遇到一类现象:明明每个语言版本都有独立 URL,搜索结果里却只出现其中一两个,或者中文页面出现在英文搜索结果里。这通常不是蜘蛛对你的站有意见,而是语言版本之间的关系没有表达清楚:哪几个是同一份内容的不同版本、哪几个是各自独立的页面,搜索引擎只能从代码和链接里读取答案。
先分清两件事:语言版本不是重复内容
同一个页面翻译成五种语言,本质上是五个面向不同用户群的独立页面,理论上应该各自被索引。但如果处理不当——比如所有语言版本共用同一个 canonical,或者语言版本之间只有 JS 切换、没有独立可访问的 URL——就会被当成一份内容处理。
反过来,同一语言下的不同 URL(带参数、大小写差异、带默认文件名)才是需要收口的重复内容。这两件事的解法刚好相反:前者要突出各自的独立性,后者要合并到唯一地址。混在一起改,往往越改越乱。
第一步:确认 URL 结构是否可被抓取
三种常见结构
- 子目录:example.com/zh/、example.com/en/,最容易维护,信号集中,适合大多数站点。
- 子域名:zh.example.com、en.example.com,部署灵活,但常被当成独立站点看待,需要更多信号来关联彼此。
- 独立域名或地区域名:example.cn、example.com,地区信号最强,但内容同步和运营成本最高。
结构本身没有绝对好坏,问题多出在混用:一部分语言放在子目录,一部分放在子域名,导航又互相跳转。抓取路径越绕,被完整发现的机会就越少。
第二步:hreflang 写对了吗
hreflang 的作用是告诉搜索引擎这几组地址是同一内容的不同语言版本,请分别处理。常见错误有:
- 只写了单向引用,A 指向 B,B 却没有指回 A。
- 语言代码格式写错,例如把 zh-CN 写成 zh_CN 或 cn。
- 指向了会跳转的旧地址,或者指向已经 404 的页面。
- 只写在 sitemap 里而页面 HTML 里没有,两边说法不一致。
- 漏写自己指向自己这一条。
hreflang 不解决收录问题,它只负责把语言版本之间的关系说清楚。页面能不能进索引,前提仍然是可被抓取、有内链入口、内容本身站得住。
第三步:canonical 要指向本语言版本
最常见的错误是:所有语言版本的 canonical 全部指向英文或主语言版本。这等于直接声明其他语言页面是副本,长期看这些页面很难稳定留在索引中。
正确做法是每个语言版本的 canonical 指向自身。只有在处理同语言下内容确实相同的变体地址时,才让 canonical 指向另一个地址。
第四步:入口和语言切换方式
- 语言切换尽量做成可点击的普通链接,而不是纯 JS 下拉或按钮跳转。
- 每个语言版本都应有对应的导航和栏目页,不要只翻译一个首页。
- 默认语言入口放在根路径或首页显眼位置,方便顺着链接走。
- 如使用自动跳转,要提供手动切换,避免跳到无法返回的页面。
自查清单
- 每个语言版本是否有稳定、不重叠的 URL,且可直接访问?
- hreflang 是否双向、语言代码正确、指向可访问地址、包含自引用?
- canonical 是否都指向自身语言版本?
- 页面 HTML 与 sitemap 中的 hreflang 是否一致?
- 语言切换是否为普通链接,蜘蛛能顺着链接走遍所有版本?
- 各语言版本是否有真正的本地化,而不只是机器翻译后一字不改?
收口顺序建议
先解决能不能被抓到(入口与链接),再解决是不是被当成同一份(hreflang 与 canonical),最后才看内容质量与本地化程度。顺序颠倒的话,改完 hreflang 但语言页面根本没有内链入口,短期内很难看到变化。
调整之后建议观察一段时间,用站点日志确认各语言版本的抓取频次,再结合索引状态判断。多语言站点的信号传递本来就比单语言站点慢一些,一次改动之后不必反复来回修改配置。