报错是这么冒出来的。站点迁到 HTTPS 后,hreflang 的 href 还写着 http 地址。每个语言版本都在跳转,Google 判定标签指向的页面不是最终地址,整组十个语言版本互相不认。
中间走过弯路,把「sitemap 里的 hreflang 是 https,head 里是 http」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。hreflang 由旧模板生成,域名变量没跟着迁移。还有一种是http 地址 301 到 https,标签没指向最终 URL。
还有一种情况,x-default 仍指向 http 首页。
上来先抽查 head 里的 href
curl -s https://www.example.com/en/ | grep -o 'hreflang="[^"]*" href="[^"]*"'
批量替换成 https
sed -i 's|href="http://www.example.com|href="https://www.example.com|g' templates/lang/*.html
接着确认返回值不是 301
curl -sI https://www.example.com/en/ | head -1
等前面都确认过,再用国际化报告复验
https://search.google.com/search-console
中途换过一次思路,把范围缩到最小的那一层,反而快了。
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
恢复的判定其实很直接。所有 hreflang 都指向 https 最终地址,国际化报告里语言组不再报错。
容易忽略的是,hreflang 指向跳转地址时整组失效,迁移后要连标签一起换,不能只改跳转。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
