事情本身不复杂,线索都在日志里。六种语言的站点,sitemap 里每条 url 只写了中文和英文两个 xhtml:link。提交后这份 sitemap 在 GSC 里显示成功,但备用链接一条都没被识别。
第一反应是「x-default 只在首页写了,内页全部没有」,验证下来不成立。
排查方向其实有限,先把可能性排一排。hreflang 组要求所有版本互相声明,缺一个整组失效。少数情况下是页面里又单独输出了 hreflang,与 sitemap 的版本不一致。
不容易想到的是,语言代码用了 zh_CN 下划线写法,不被识别。
第一件事是列出页面内与 sitemap 里的 hreflang 做对比
curl -s https://www.example.com/ru/post-1 | grep -o 'hreflang="[^"]*"'
补齐六种语言并统一用连字符
python gen_hreflang.py --locales zh-CN,en,ru,ja,de,es --x-default en
去掉页面里重复的输出,只留一处
grep -rn 'hreflang' templates/ | head
剩下的就是重新生成 sitemap 并复验条数
grep -c 'xhtml:link' sitemap.xml
恢复的判定其实很直接。每条 url 下都有六条备用链接,GSC 里开始显示语言分组,俄语与日语页面的收录从零涨到数百条。
补一句。hreflang 的规则是组内自洽,缺一条就等于没写,所以要么全量生成,要么就别在页面和 sitemap 里各写一半。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
