同一套内容做了多个语言版本,本来是想覆盖不同地区的搜索需求,但实际看到的结果常常是:英文页被当成中文页的重复内容、某个语言版本一个都没进索引、搜索结果的标题和摘要显示的是另一种语言。这类问题多半不是抓取不够,而是语言版本之间的关系没理清楚。
先看清有几种“语言入口”
在动手改之前,先把站点实际的访问入口列出来。常见的结构有三种:子目录(example.com/en/)、子域名(en.example.com),以及用参数或 Cookie 切换的同一 URL。
- 子目录和子域名:每个语言版本有独立 URL,原则上可以各自被抓取和保留。
- 参数或 Cookie 切换:URL 相同、内容随访客变化,搜索引擎通常只会保留其中一个版本,其余语言很难被单独索引。
- IP 或浏览器语言自动跳转:这是最容易把收录搅乱的做法——蜘蛛从哪个入口进来,看到的内容可能和用户不一样。
hreflang 是提示,不是收录指令
很多人以为加上 hreflang,就等于告诉搜索引擎“这些页面是不同语言版本,请分别收录”。实际上它只是减少误判的提示,本身不保证任何页面被索引。真正起作用的,仍然是页面能不能被抓取、内容是否够独立,以及 canonical 把信号指向了谁。
写 hreflang 时常见的几个问题:
- 缺少自引用:A 页面标注了 B 和 C,却没有标自己。
- 双向不一致:英文页指向中文页,中文页没指回英文页。
- 指向了重定向页、noindex 页或已删除的地址。
- 语言码和区域码写错,例如把 zh-CN 写成 zh_cn。
- 没有 x-default,地区匹配不上时没有默认页可用。
按顺序核对收录状态
- 分语言查收录:不要用一个总数判断,分别看每个语言版本的情况,找出是全体都没进索引,还是只有个别版本缺席。
- 检查 canonical:确认每个语言页的 canonical 指向自己,而不是统一指向主语言版本。跨语言互指是收录丢失的常见原因。
- 检查自动跳转与内容差异:用不带 Cookie、不带地理信息的方式访问一遍,看看返回的是不是目标语言版本。
- 检查站点地图:语言版本是否各自出现在 sitemap 中,或者是否在 sitemap 里带了 hreflang 标注。
- 检查内链:如果全站导航只链向一种语言,其他语言版本只能靠 sitemap 被发现,抓取深度会明显变差。
- 检查内容是否真的不同:整页机翻、只换了几个词、或者干脆是同一段文字的复制,都可能被判为重复内容。
把多语言站点的收录问题拆成两件事看:URL 是否是独立的,内容是否能独立成立。前者决定能不能被单独抓取,后者决定值不值得单独保留。
处理时的取舍
不是每种语言都需要单独建目录。如果某个语言只是翻译工具生成、之后没有维护,合并到主版本,或者干脆不做,往往比让一堆低质翻译页占着索引更清爽。
反过来说,如果某个语言确实有本地化的内容和运营,就应该保证它有独立 URL、独立 canonical、独立的内链入口,并在 sitemap 里单独列出。这样在核对时,才能分清是“没被发现”,还是“被发现但被归并”。
调整之后的观察点
改完不要期待立刻看到变化,可以重点关注三件事:各语言版本的抓取记录是否分开、canonical 是否已经按预期指向自己、搜索结果里的语言与地区是否匹配。如果一段时间后某个版本依然没有进索引,回到第一步,先确认它是否能被正常抓取,再谈内容层面的问题。