问题出现得很突然,日志倒是留得挺全。日语内容放在 /ja/ 下,模板里只有中文页和英文页输出了 hreflang,日语页一行都没有,结果搜日语词时出来的全是 /en/ 的页面。
刚开始盯着「页面 lang 写成 ja 但 hreflang 缺省,Google 只能靠内容猜语言」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。日语目录的模板分支没接进语言数组,标签根本没渲染。还有一种是hreflang 用绝对地址拼装,/ja/ 前缀被域名变量吃掉。
少数情况下是日语页的 canonical 指向了英文版,信号互相打架。
上来先看一下 /ja/ 页面里到底有没有标签
curl -s https://www.example.com/ja/ | grep -ci hreflang
然后对比中英日三版的输出差异
for d in / /en/ /ja/; do echo $d; curl -s https://www.example.com$d | grep -c hreflang; done
接着在语言数组里补上 ja 键值
define('WP_LANG_DIR', '/ja/');
末了重新生成并抽查页面源码
curl -s https://www.example.com/ja/post-1/ | grep hreflang
怎么算真的好了,看的是同一批现象。日语页源码里出现 ja、zh-CN、en 互指的完整一组,两周后日语词的首位结果换回 /ja/ 目录,英文页的日文展现量下降。
这里还有个坑。语言版本增删时最容易漏模板分支,加目录必须同步检查输出,否则新语言会长期靠内容猜语言。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
