网站收录

多语言站点的收录:语言版本之间怎么不互相打架

多语言站点的收录问题,往往不是页面没被爬,而是同一份内容在索引里出现多个语言版本,信号互相冲突。本文从 URL 结构的选择、hreflang 的正确理解、自动跳转的坑、内容差异化,到具体排查顺序,说明怎么让每个语言版本被清晰识别,减少重复收录带来的干扰。

网站收录

多语言站点的收录:语言版本之间怎么不互相打架

做多语言或面向多地区的站点时,收录问题往往不是「页面没被爬」,而是「同一份内容在索引里出现了好几个语言版本,信号和展示都对不上」。这类问题的根源多半在 URL 结构和信号冲突上,先把这两件事理清,比反复提交 sitemap 更有效。

先确定语言版本用什么 URL 结构

常见的三种做法:子目录(example.com/en/)、子域名(en.example.com)、独立域名(example.de)。它们对收录的影响主要在两点:一是信号继承,子目录通常能沿用主域已有的历史积累和抓取习惯;二是统一管理,语言数量多时,子目录更容易把 sitemap、内链和模板收敛到一套体系里。

语言版本尽量不要用参数(如 ?lang=en)承载,也不要只靠 cookie 记住语言偏好。参数版本容易被当成同一页面的多个副本,而 cookie 版本对爬虫来说不可见——它每次抓到的都是默认语言那一版。

hreflang 是提示,不负责解决重复

hreflang 的作用是告诉搜索引擎「这几个页面是同一内容的语言或地区版本,请把对应版本给对应的用户」。它不是用来防止重复收录的工具。如果两个语言版本的正文几乎一样,即使 hreflang 写对了,索引里也可能只保留其中一个,或者两个都留着但互相抢词。

常见写法错误:单向标注(A 指向 B,B 不指回 A);指向了已重定向或不可抓取的 URL;语言代码与地区代码用错。这些不会立刻让页面掉出索引,但会让信号互相矛盾,之后的处理成本比一开始就写对要高。

自动跳转和语言切换器的坑

按浏览器语言自动 302 或用 JS 跳转,是多语言站点最容易踩的一个坑。爬虫通常不带普通用户的语言偏好,它抓到的可能是跳转后的默认语言版本,于是目标语言页面长期停在「已发现,尚未编入索引」的状态。

  • 优先用可点击的显式链接做语言切换,而不是自动跳转;
  • 如果一定要自动跳转,至少保证每个语言版本都有一个固定、可直达的 URL,并且站内链接指向它;
  • 语言切换器里的链接要是真的 a 标签,不要用 JS 事件或表单提交来模拟导航。

内容重合度高时,索引会自己收敛

如果几个语言版本只是机器翻译,正文结构完全一致,连产品参数和常见问题都一模一样,搜索引擎很难判断哪一版更值得保留。常见结果是:主语言版本被收录,其余版本要么不进索引,要么过一段时间消失。

想改善,重点不在技术标注,而在内容本身的差异化:本地化的标题和描述、地区特定的价格与单位、面向当地用户的联系方式和案例说明。哪怕只有这些部分不同,页面被当成独立文档处理的可能性也会高一些。

排查顺序

  1. 从抓取日志里挑一个目标语言页面,确认爬虫实际抓到的是不是这一版,返回 200 还是跳转;
  2. 检查该页面的 canonical 是否指向自己,而不是指向主语言版本——多语言站点误用 canonical 的情况很常见;
  3. 核对 hreflang 是否双向、每组是否自指、指向的 URL 能否直接访问;
  4. 确认 sitemap 包含所有语言版本,各语言版本的 sitemap 不互相混入;
  5. 看各语言版本的收录比例,找出长期为零的那几组,优先处理。
多语言收录问题的本质不是「怎么让蜘蛛多来」,而是「让蜘蛛清楚哪个 URL 对应哪个语言、哪个是主版本」。信号一致比数量堆叠更重要。

最后提醒一点:语言版本越多,可用的抓取资源越会被摊薄。与其一次上线十几种语言的空壳页面,不如先把两三个真正有本地化内容的版本做扎实,收录状态和索引质量通常更可控。