中文页的 hreflang 一半写 zh-CN,一半写 zh-Hans,同一篇文的 head 里两个值都指向自己,GSC 提示备用网页存在冲突。
一开始怀疑是「被引用的另外两页只认其中一个值,双向关系断掉」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。不同模板文件各写一套,没有统一常量。另一种情况是zh-Hans 是文字类型,zh-CN 是地区,混用会让分组对不上。
另外,sitemap 里的 hreflang 与 head 里的不一致。
先抓页面列出所有语言值
curl -s https://www.example.com/zh/post/ | grep -o 'hreflang="[^"]*"' | sort | uniq -c
接着统一成 zh-CN
sed -i 's#hreflang="zh-Hans"#hreflang="zh-CN"#g' theme/inc/lang.php
随后核对 sitemap 中的写法
curl -s https://www.example.com/sitemap.xml | grep -o 'hreflang="[^"]*"' | sort | uniq -c
校验双向引用
curl -s https://www.example.com/en/post/ | grep -o 'hreflang="zh[^"]*"'
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
恢复的判定其实很直接。每页只出现一个中文语言值,三语版本互相引用完整,GSC 里备用网页的冲突提示消失。
容易忽略的是,zh-Hans 本身合法,问题在混用,一组 hreflang 内部必须用同一套写法。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
