报错是这么冒出来的。外贸站把英文文章放在 /news/ 下,模板 header.php 里 lang 写死 zh-CN,hreflang 却声明 en。英文页长期在中文区排名,浏览器翻译提示一直弹。试过只改 hreflang,没动模板,现象没变。

中间走过弯路,把「正文段落没有 lang 包裹,整页只能靠根节点判断语言」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。html lang 是页面级语言信号,和 hreflang 冲突时搜索结果会按前者归类。少数情况下是模板把语言属性写死在 header.php,子目录没有做条件判断。

另外,浏览器翻译与搜索语言判定用的不是同一个信号,两边都要对。

动手时先看根节点实际输出的语言

curl -s https://www.example.com/news/post-1/ | grep -o '<html[^>]*lang="[^"]*"'

然后按语言目录动态输出属性

add_filter('language_attributes', function(){ return 'lang="en-US"'; });

接着抽查正文段落是否带语言

curl -s https://www.example.com/news/post-1/ | grep -c 'lang="en'

末了用富媒体测试工具核对页面语言

https://search.google.com/test/rich-results

别只看报错消失,验证要多做一步。英文目录的 html lang 变成 en-US 后,中文区关键词里的展现一周内归零,英文区展现同步上升,翻译提示也不再默认弹出。

只改 hreflang 不改根节点属性,等于一份页面给了两个语言答案,蜘蛛通常取更早解析到的那个。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189