多语言站点常见的收录问题不是「没做翻译」,而是搜索引擎分不清几个语言版本之间的关系:把德语页当成英语页的重复内容,只保留其中一个版本参与排名。hreflang 标注的作用就是把这种关系说清楚。
一、hreflang 解决什么问题
当同一个产品页存在英文、德文、西班牙文三个版本时,搜索引擎需要知道三件事:这些页面是同一内容的语言版本;面向德语用户的搜索结果应当展示德文页;如果不存在匹配语言,应当回退到哪个版本。
hreflang 标注提供的就是这三层信息。它本身不提升排名,但会明显影响「哪个语言版本被收录、以及被展示给哪一类用户」。
二、三种标注方式与选择依据
- HTML head 中的 link 标签:在每个页面头部列出全部语言版本的地址,适合页面数量适中、模板可批量输出的站点;
- HTTP 响应头:适用于非 HTML 文件(如 PDF 报价单),配置成本较高,一般站点不必采用;
- XML 站点地图:在 sitemap 中为每个地址声明 xhtml:link 关系,适合页面规模大、模板不易统一调整的站点。
三种方式选一种即可,同时叠加多套声明容易互相冲突。对采用「一语言一物理表」架构的站点,第 1 种或第 3 种都可以通过模板统一生成,新增语种时不必手工维护。
三、每一条标注必须包含的要素
- 语言代码:使用 ISO 639-1 两位代码,如
en、de、es、ja; - 地区代码(可选):使用 ISO 3166-1 Alpha 2,如
de-DE、es-MX、pt-BR,顺序为语言在前、地区在后,中间用连字符; - 自我引用:每个语言版本都要在自己的页面里列出包括自身在内的全部版本,缺一行可能导致整组标注被忽略;
- 双向互指:英文页指向德文页,德文页也必须指向英文页,单向标注视为无效;
- x-default:声明无语言匹配时的回退版本,通常指向通用英语页或语言选择页,整组中出现一次。
一个英文页的写法形如 hreflang="en" 指向英文地址,随后依次列出 de、es 与 x-default 三行。需要注意两点:地址必须使用绝对地址(含 https 与完整域名);标注中的地址要与该页 canonical 指向的地址保持一致,包括末尾斜杠。
四、URL 结构与语种目录的配合
三种常见结构各有取舍:
- 子目录(如
/de/):域名权重集中、配置成本低,是独立站较常见的选择; - 子域名(如
de.example.com):可分离部署与独立统计,但权重分散,需要额外做互链; - 参数切换(如
?lang=de):不利于独立收录与独立优化,不建议用于以自然流量为目标的站点。
采用子目录结构时,建议 URL 中的路径段也做本地化,例如德语页使用 /de/wasseraufbereitung/ 而不是 /de/water-treatment/。路径本地化对本地用户的点击判断有正面影响,也便于本地搜索的词形匹配。
五、五类常见错误
- 单向标注:只在一个页面添加标注,搜索引擎无法确认语言版本之间的关系;
- 漏掉自我引用:一组五条标注里只写了另外四种语言;
- 语言与地区代码写错:地区代码用了非 ISO 3166 组合,或把语言与地区的顺序颠倒;
- 规范地址冲突:canonical 指向英语页,hreflang 却把德语页声明为独立版本;
- 标注了不存在的地址:把返回 404 或 302 跳转的地址写入标注,影响整组标注的判断。
六、验证与监控方法
配置完成后建议按以下顺序检查:
- 打开任一语言版本,查看源代码中的标注行数是否与语种数量一致;
- 在搜索控制台的国际定位报告中查看是否存在「缺少返回链接」提示;
- 抽查三条地址,确认 canonical、hreflang 与站点地图中的地址完全一致,包括末尾斜杠与大小写;
- 新增语种时同步更新全部已有页面的标注,避免新语种只被自身指向;
- 站点改版后重新验证一次,重点确认 301 之后的页面标注是否仍指向旧地址。
hreflang 不影响排名,它影响的是「哪一版被收录、展示给谁」。配置正确时它几乎不会被注意到,配置错误时多语言流量会长期缺一块。
