多语言站点做收录,麻烦往往不在“收不到”,而在“收得不对”:同一批内容有好几个语言版本,搜索结果里出现的可能是英文版,也可能是机器翻译版,甚至几个版本互相顶替,最后每个语言市场都拿不到稳定的展现。这类问题多半不是抓取出了故障,而是版本之间的信号没有理顺。
先确认一件事:每个语言版本都是独立页面
只要 URL 不同,搜索引擎就当成不同页面处理。它们各自需要有自己的标题、正文、内链和入口,不能只靠一套页面加切换语言按钮动态渲染。如果切换语言后 URL 不变、内容靠 JS 或 cookie 变化,蜘蛛通常只会看到一个默认版本,其他语言的内容既没有独立地址,也谈不上被单独索引。
所以第一步很朴素:每种语言、每个地区对应的内容,是否有可直达、可被抓取的独立 URL。
URL 结构:子目录、子域名、独立域名
三种常见做法都可用,差别在于信号的清晰度和维护成本:
- 子目录(example.com/de/):权重集中在同一域名,配置和统计最简单,中小站点首选。
- 子域名(de.example.com):拆得比较干净,但需要额外的站点级验证与配置,容易漏掉某几个版本的 sitemap 和 hreflang。
- 独立域名(example.de):本地化观感强,但要单独维护收录与索引状态,成本最高。
无论选哪种,保持同一站点内的一致性。混合使用,比如一部分语言放子目录、一部分放独立域名,会让版本关系更难表达,也让后续排查变得零碎。
hreflang 最容易出错的几个地方
hreflang 的作用是说明“同一内容的不同语言或地区版本是这几条 URL”,它不是排名工具,只是关系声明。常见错误有:
- 单向标注:德语页面指向英语页面,英语页面没有回指。这种不对称关系容易被忽略,等于只声明了一半。
- 指向打不开的 URL:版本下线后 hreflang 没同步更新,指向 404 或重定向。
- 指向被 noindex 或 canonical 收口的页面:一边说“这是某个语言的正式版本”,一边又告诉搜索引擎别索引它,信号自相矛盾。
- 语言与地区代码写错或混用,把 zh-CN 和 zh-TW 当成一回事,或者只写语言不写地区。
- 靠 JS 注入:爬取阶段不一定执行,容易漏读。放在 HTML 头部或 XML sitemap 里更稳。
另外,x-default 用来指定没有匹配到具体语言时展示哪一版,通常给语言选择页或国际版,不要随手指到一个随机版本上。
canonical 不要跨语言使用
有人为了“集中权重”,把法语页面 canonical 到英语页面,结果法语版本从索引里消失,法语用户搜到的全是英文页面。只有当两个 URL 是同一种语言、同一份内容时,canonical 才是合适的收口手段。跨语言的近似内容,应该用 hreflang 表达版本关系,而不是互相 canonical。
机器翻译页面要不要放出去
自动翻译的页面能不能被索引,关键不在“是不是机器翻的”,而在质量:术语是否一致、导航和按钮有没有翻漏、页面是否只是把原文换了一遍词。大量低质量翻译页被放出去,常见后果是这些页面进了索引却没什么展现,或者同一个语言下出现多个近似版本,彼此消耗。
比较稳妥的做法是分批放出:先放核心栏目和转化路径,观察这些页面的抓取与展现,再决定要不要铺到全站。质量不过关的版本,宁可先 noindex 收着。
自查顺序
- 每个语言版本是否有独立、可直达、返回 200 的 URL。
- hreflang 是否双向对称、目标可访问、且没有被 noindex。
- canonical 是否只在同语言内部使用。
- 各语言版本的 sitemap 是否都提交,且只包含对应语言的 URL。
- 抽查几个语言站内搜索或 site 查询的结果,看返回的是不是该语言版本。
多语言收录的目标不是让每个版本都被收录,而是让每个语言市场搜到的,是对应语言的那个版本。