先看现象。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 是不同粒度,混用会让整组标签失效。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
