先看现象。sitemap 里英文页标的是 en-US,页面 html 标签写的是 en,GSC 提示备用网页语言不一致,英文版一直不参与排名。

真正麻烦的地方在于,几个原因的现象几乎一样。两处语言标记由不同插件生成,取值来源不同。另一种情况是站点默认语言是 zh-CN,英文页复用了默认值。

少数情况下是sitemap 缓存没有刷新,仍是上一版标记。

上来先对比页面标签的取值

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

随后统计 sitemap 里的语言值

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

然后统一成同一粒度

curl -s https://www.example.com/sitemap.xml | grep -c 'hreflang="en"'

剩下的就是清掉生成缓存

wp cache flush

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

改完先别撤,确认这几项。两处语言代码完全一致,备用网页提示消失,英文页开始有展示和点击。

容易忽略的是,语言代码大小写不敏感,但 en 与 en-US 是不同粒度,混用会让整组标签失效。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189