事情本身不复杂,线索都在日志里。中文页的 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 解决的是收录哪一条,两个目标不同的标签不能互相顶替。报错文案容易误导,真正的原因往往在相邻那一层的日志里。