九个语言版本只在首页的 head 里输出了 hreflang,内页一万两千条一条都没有。GSC 的国际定位报告只认出了首页层面,内页在搜索结果里经常被换成另一个语言的版本。补过两次首页标签,报告没变化。

一开始怀疑是「sitemap 里也没有 xhtml:link,本可以补上的第二条通道空着」,查了一圈,方向不对。

原因不止一个,得分开看。模板只在首页分支里输出 hreflang,内页走的是另一套 head。还有一种是内页没有语言对应关系的数据,翻译版本之间没有可用的映射。

少数情况下是x-default 只写在首页,内页缺少兜底声明。

动手时先抽查一个内页的 head,看有没有 hreflang

curl -s https://www.example.com/en/docs/start | grep -c 'hreflang'

接着确认各语言版本之间的路径映射是否有规律

ls content/zh/docs content/en/docs 2>/dev/null | head

随后把 hreflang 输出移到全站公共模板,按映射表生成

grep -rn 'hreflang' templates/layout.html

剩下的就是在 sitemap 里补上 xhtml:link,与页面标签保持一致

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

改完先别撤,确认这几项。内页也能输出完整的九组 hreflang,国际定位报告里的条目数从几十涨到上万。

首页写对不代表内页写对,语言标签要跟着每一个可访问地址走,这事只能靠公共模板保证。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189