做了多语言或者多地区版本之后,很多站点会遇到一种情况:同一份内容在索引里冒出好几个地址,用户从搜索结果点进来,看到的却不是他想要的语言版本。这通常不是“收录不了”的问题,而是几个版本之间的关系没有理清。版本之间关系混乱,重复内容、语言错位、展现语言不符这些现象就会一起出现。
一、先分清是版本关系问题还是 URL 结构问题
这两种情况表现很像,但处理顺序不一样。URL 结构问题,是同一个语言下同一篇内容对应了多个地址;版本关系问题,是不同的语言版本在抢同一个查询。可以先从几个现象入手判断:
- 只有一个语言版本被大量记录,其他版本几乎没有痕迹
- 同一篇文章在索引里出现两三个不同后缀的地址
- 搜某个语言的关键词,返回的却是另一语言的页面
- 切换语言之后地址变了,但内容指向的还是原来那一份
二、三种常见 URL 结构,各有各的代价
子域名
比如 en、jp 各占一个子域名。好处是版本之间隔离清楚,服务器和模板可以分开管;代价是链接权重分散,新版本从零开始积累,互相之间的信号传递要靠 hreflang 和站内链接补。
子目录
比如 /en/、/jp/。主域集中,权重容易叠加,是多数中小站点更省事的选择;代价是目录规则必须统一,尾斜杠、大小写、默认语言的位置都要一次定清楚,否则同一个页面会裂成几个地址。
参数或地区后缀
用 ?lang= 这类参数区分,最容易出现重复地址。如果必须用参数,至少要让不同语言有各自的规范地址,并且不要让参数组合被内链大量扩散。
三、hreflang 能做什么,不能做什么
hreflang 是给搜索引擎的提示,用来说明某个语言或地区对应哪个地址。它不阻止抓取,也不等同于 canonical,更不能保证一定被采用。常见的几个要求:
- 版本之间要相互指向,不能只从主版本指出去
- 每个版本也要包含指向自身的 hreflang
- 语言代码按规范写,地区代码可选但不要臆造
- 如果存在一个通用版本,用 x-default 指过去
四、版本之间不要互相 canonical
这是多语言站点里比较常见也比较致命的一处:英文页的 canonical 指向中文页,或者反过来。这样等于告诉搜索引擎“这几个地址里只留一个”,另一个版本会慢慢从索引里退出。正确的做法是每个语言版本的 canonical 指向自己,版本之间的关系交给 hreflang 去表达。
五、自动跳转和语言切换链接的坑
按 IP 或浏览器语言做自动跳转,看起来对用户友好,但蜘蛛通常只会看到默认版本,其他版本就失去了被发现的机会。如果确实要跳,尽量让跳转可逆,并保证每个版本都有稳定的直达地址。
语言切换链接也有类似的问题:如果它靠脚本渲染,或者写法上没有可抓取的 href,蜘蛛顺着页面爬不到其他版本。切换入口应该是一组真实的链接,能直接点开、能被抓到。
六、一个可执行的检查顺序
- 先定一个默认版本,明确它承担什么角色
- 检查 URL 结构是否统一,大小写和尾斜杠是否一致
- 检查 hreflang 是否双向指向,并且包含自身
- 检查 canonical 是否指向同语言版本,而不是指向别的语言
- 检查语言切换入口是不是可抓取的链接
- 检查 sitemap 是否覆盖了各个版本的规范地址
- 用站内查询观察各版本的收录与展现是否和预期一致
多语言收录的重点不是把每个版本都推上去,而是让每个版本只出现在它该出现的查询里。
调整之后不要急着下结论,观察一段时间各版本的收录变化。如果某个版本始终没有记录,先回到抓取和链接发现这两个环节,看看它是不是根本没被蜘蛛走到,而不是直接归因于页面质量。