多语言站点英文版页面能打开,源码里的 hreflang 却指向不带 /en 的地址,抓取工具顺着抓全是 404,英文页收录数三周没动。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
curl -s https://example.com/en/guide/hello/ | grep -o 'hreflang="[^"]*" href="[^"]*"' curl -sI https://example.com/en/guide/hello/ | head -2
生成 hreflang 时用的是当前页的 permalink,语言前缀被主题在路由阶段剥掉了,输出的还是默认语言地址。canonical 同样少前缀,两个标签互相打架。这一点先确认清楚,后面就不用反复试。
「hreflang 前缀」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
具体做法是,hreflang 改用完整绝对地址,前缀从语言配置里取,不要用当前请求路径;canonical 也带上同样的前缀,保证和 hreflang 指向一致;用 curl 抓一份英文页源码,把几个 hreflang 地址逐个打一遍;修完在 Search Console 的多语言报告里重新提交。
改完照着核一遍,英文页源码里 hreflang 指向的地址全部返回 200,canonical 同样带 /en 前缀。
