事情本身不复杂,线索都在日志里。中文页的 canonical 指向了英文版,同时又用 hreflang 声明自己是中文版本,GSC 里两个版本的收录状态都很奇怪。

真正麻烦的地方在于,几个原因的现象几乎一样。canonical 用来收敛重复内容,hreflang 用来区分语言版本。还有一种是把 hreflang 语言页写成 canonical 目标,等于说它们不是同一组。

另外,模板在分页和语言切换时输出了不同的目标地址。

第一件事是逐个检查页面上的两组标签

curl -s https://www.example.com/zh/ | grep -iE 'canonical|hreflang'

语言版本各自 canonical 到自己

add_filter('wpseo_canonical', 'self_canonical');

hreflang 之间保持双向指向

curl -s https://www.example.com/en/ | grep -i hreflang

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

怎么算真的好了,看的是同一批现象。两组标签不再冲突,各语言版本分别进入索引,切换语言时排名归位。

hreflang 解决的是展示给哪个地区的用户,canonical 解决的是收录哪一条,两个目标不同的标签不能互相顶替。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189