hreflang 标签里有一个值是 xx,本意是占位待定,上线后整组语言标签全部失效,Search Console 提示无效的语言代码,其余正常版本也一起掉出索引。
一开始怀疑是「模板从语言表里循环输出,占位行没有过滤」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。xx 不在 ISO 639-1 语言代码列表里,属于无效值。少数情况下是一个无效值会让整组 hreflang 校验失败。
还有一种情况,x-default 被写成了 xx-default,同样无法识别。
第一件事是把页面里的 hreflang 全部列出来
curl -s https://www.example.com/ | findstr /i hreflang
然后核对语言代码是否合法
curl -s https://www.example.com/en/ | findstr /c:"hreflang=\"en"
再往下删掉占位行并补 x-default
echo '<link rel="alternate" hreflang="x-default" href="https://www.example.com/">';
剩下的就是重新提交并观察报告
curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"
隔了一天再看,现象没变,说明不是偶发。
改完先别撤,确认这几项。去掉无效值后,报告里的语言标签错误清零,英文和日文版本两周内恢复收录。
hreflang 是整组校验的,一个错值就能让整组白写,上线前把语言代码过一遍列表。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
