记录一下那天晚上的排查过程。多语言站有 zh、en、ja 三个版本,中文页指向英文页,英文页也指回中文,但英文页在改版时被插件按「未翻译完」的规则批量加了 noindex。GSC 的 hreflang 报表报「无返回链接」,三组语言版本全部不生效,英文页本身也没进索引。手动删掉标签后报表没马上变。

刚开始盯着「英文页仍留在 sitemap 里被提交,和 noindex 信号自相矛盾」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。回指目标被 noindex,确认链断在第二跳,整组一起失效。也可能是插件对未翻译页面批量加 noindex,没人回头看 hreflang 配对。

不容易想到的是,ja 版本没有参与配对,三语里少一角,回链数量永远凑不齐。

拉三个版本的 hreflang 声明做对照

for u in / /en/ /ja/; do curl -s https://www.example.com$u | grep -o '<link rel="alternate"[^>]*>'; done

去掉临时 noindex 并确认可索引

add_filter('wp_robots', function($r){ if (is_page('en-temp')) { unset($r['noindex']); } return $r; });

补齐三语之间的回指关系

<link rel="alternate" hreflang="ja" href="https://www.example.com/ja/">

复查索引文件里是否还留着被排除的地址

curl -s https://www.example.com/sitemap.xml | grep -c '/en/'

改完先别撤,确认这几项。三个版本互相都能找到回链,GSC 的 hreflang 报表里「无返回链接」清零,英文页在一周内进入索引。

容易忽略的是,hreflang 是一组双向声明,任何一端被 noindex、404 或 301 打断,组里其他页面也一起失效。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189