报错是这么冒出来的。站点迁到 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 指向跳转地址时整组失效,迁移后要连标签一起换,不能只改跳转。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189