先把当时的情况摆出来。多语言站 Search Console 的国际定位报告显示六成页面语言被判成英文,实际主站是中文,html lang 和 hreflang 都写了 zh-CN,日语目录 /ja/ 反而被判成中文。试过改 hreflang 顺序,没有变化。

把日志和配置对完,能解释这个现象的基本就这几处。html lang 被主题写死成 en,和 hreflang 的信号互相冲突。还有一种是服务器没有发 Content-Language,判断只能靠正文猜。

还有一种情况,日语目录里大量中文模板文案,整页文本把语言识别带偏。另外,hreflang 只做了单向声明,集群不完整导致回退到默认语言。

先看响应头有没有语言声明

curl -sI https://www.example.com/ja/ | grep -i content-language

再往下核对页面上的 lang 属性

curl -s https://www.example.com/ja/ | grep -o '<html[^>]*lang="[^"]*"'

接着在 Nginx 里按目录补头

add_header Content-Language "ja" always;

剩下的就是检查 hreflang 是否成组

curl -s https://www.example.com/ja/ | grep -o 'hreflang="[^"]*"' | sort | uniq -c

怎么算真的好了,看的是同一批现象。报告里语言判错的比例从六成降到五个点以下,日语页在日语关键词下的展现量两周内翻了一倍。

容易忽略的是,语言判定看的是整页文本,导航和页脚的中文会稀释信号,模板文案必须跟着语言走。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189