为了配合前端组件,hreflang 被渲染在 body 末尾的 div 里,源码里能搜到,GSC 的国际化报告却是空的,一条语言组都没识别。

一开始怀疑是「同一页面 head 里另有一套残缺标签,两组互相覆盖」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。hreflang 只认 head 里的 link 或 HTTP 头,body 里一律忽略。少数情况下是前端组件异步插入标签,蜘蛛抓 HTML 时节点还不存在。

少数情况下是标签用了 property 而不是 rel,写法本身不合法。

第一件事是确认标签出现在 head 还是 body

curl -s https://www.example.com/en/ | sed -n '1,40p'

然后统计 head 内的 hreflang 条数

curl -s https://www.example.com/en/ | awk '/<head>/,/<\/head>/' | grep -c hreflang

再往下把标签移回 head 并由服务端输出

add_action('wp_head', 'print_hreflang_links', 1);

等前面都确认过,再用富媒体测试或源码复核

curl -s https://www.example.com/en/ | grep -c 'rel=[^>]*alternate'

别只看报错消失,验证要多做一步。head 里稳定输出整组标签后,国际化报告从空变成三组,语言版本之间开始按地区分别展现。

提醒一点。hreflang 是给解析器看的声明而不是给用户看的,放错位置等于没写,异步插入的标签基本都不作数。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189