先分清:被收录的是哪个版本
多语言站点遇到的困惑,往往不是“页面没被收录”,而是收录归属跑到了别处:德语页出现在英语结果里,地区版本被主语言版本替代,或者同一份内容的两个语言版本都留在索引里互相竞争。索引里最终保留的通常是站点信号最一致、最明确的那一个 URL。所以核对的重点不是“收没收”,而是“哪个 URL 拿到了这次收录”。
三种常见的归属冲突
1. 漏掉自指 hreflang
每个语言版本都应当在页面上指回自己,包括自己那一行。不少站点只写了“其他语言版本”,唯独漏掉自指。这样机器收到的语言集合是不完整的,归属判断就容易交给别的信号,比如 canonical 或者内链指向的版本。
2. hreflang 与 canonical 指向不同
语言版本 A 的 hreflang 表示“我是德语版”,但它的 canonical 却指向英语版。两个信号方向相反,最终哪个生效并不由页面自己决定。比较稳妥的做法是:canonical 自指到当前语言版本,语言关系交给 hreflang 去表达。除非这个语言版本本身就是另一种语言的翻译替身,否则不要让 canonical 跨语言。
3. 缺少 x-default
当用户语言不匹配任何一个已声明版本,或者站点有语言选择页时,x-default 用来指定兜底版本。缺了它,机器只能从现有版本里挑一个,挑中的未必是你希望的入口页。
按顺序核对
- 先看每个语言版本是否自指。逐页确认 hreflang 列表里包含自己那条,且代码、地区写法与 URL 对得上。
- 再看是否互相回指。德语页列出英语页,英语页也要列出德语页。单向声明等于半截信号。
- 检查 x-default 是否落在合适的入口上。通常是语言选择页或主语言首页。
- 确认 canonical 与 hreflang 不冲突。两个信号指向同一个 URL 时才算对齐。
- 核对内链与站点地图。导航、面包屑和 sitemap 是否也只指向对应语言版本,而不是全部甩给主语言页。
- 最后看抓取与收录状态。如果某个语言版本长期只被“已发现”,先回到前面几步,而不是急着提交 URL。
容易被忽略的两类信号
- 站内搜索与筛选参数。带语言参数的组合页可能被当成独立版本,反而稀释了真正的语言版本。
- 站点地图分文件。语言版本越多,越容易在 sitemap 里漏掉某一个地区,或者把旧的语言前缀 URL 一起提交进去。
自动跳转要谨慎
按 IP 或浏览器语言自动跳转,看似贴心,却常常让抓取端只能看到一个版本:蜘蛛从某个地区访问时被跳到主语言页,其他语言版本就失去了被抓取的机会。更稳妥的是把跳转做成用户可撤销的提示,或者只在用户主动选择后记住偏好,而不是在首次请求时就强制改写路径。
归属问题的排查顺序和收录问题一样:先在页面层面把信号对齐,再看站点层面是否一致,最后才去看抓取和索引状态。顺序反了,容易在错误的方向上反复提交。
语言结构切换之后
如果站点刚把语言结构从参数改成子目录,或从子域名改到子目录,旧 URL 的收录归属不会立刻消失。这时需要让旧地址以 301 指向对应的新语言版本,同时更新内链和站点地图,并给自己留出观察周期。期间看到旧版本仍偶尔出现,属于正常过渡,不必急于反复调整信号。
整件事的核心其实很简单:每个语言版本都清楚地说明自己是谁、和谁对应、谁是兜底,剩下的交给抓取和索引去处理。信号一致,归属才稳定。