报错是这么冒出来的。hreflang 写成 EN-US 和 ZH-CN,页面 lang 是小写 en-US,GSC 提示语言代码无法识别,整组标签被忽略,英文页一直排在中文页后面。
中间走过弯路,把「sitemap 和 head 两处大小写不一致」当成主因,改完现象没变。
这类报错背后常见的原因有几处,逐个排除就行。hreflang 的语言和地区代码有固定大小写,全大写不被识别。少数情况下是模板从常量里取了全大写的值。
不容易想到的是,测试工具只校验格式,不报大小写问题。
先看页面里的原始写法
curl -s https://www.example.com/en/post-1/ | Select-String hreflang
随后改成标准写法
echo '<link rel="alternate" hreflang="en-US" href="https://www.example.com/en/post-1/">';
然后核对所有语言代码
curl -s https://www.example.com/en/post-1/ | Select-String -Pattern "hreflang=\"[A-Z]{2}-[A-Z]{2}\""
提交 sitemap 复核
curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"
改之前我把相关日志按时间截了一段存着,事后对时间线用得上。
恢复的判定其实很直接。hreflang 全部是 en-US、zh-CN 这类写法,GSC 国际定位报告不再报语言无法识别。
提醒一点。语言代码小写、地区代码大写,全大写和全小写都可能被判无效。这类问题最好一次改到位,反复小改反而容易把原因搅混。
