多语言站里英文页的 canonical 指到了中文页,hreflang 又声明自己是英文版本,两个信号互相打脸,英文页的收录一直不稳定。乍看像缓存或者权限的锅,追下去往往不是。
curl -s https://example.com/en/ | grep canonical # 再查 hreflang 是否指向其他语言版本
追下去是这么回事:canonical 表示这一页的代表地址,hreflang 表示这一页是某个语言的替代版本;把 canonical 指到另一种语言,等于告诉引擎这页是副本,整组语言关系随之失效。
「canonical 与 hreflang」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
具体做法是,让每个语言版本的 canonical 都输出自己这一页的地址;语言版本之间的互指只放在 hreflang 里处理,别混进 canonical;改完逐个抽查各语言页面头部的标签。
验收就看一点,各语言版本的 canonical 全部自指,hreflang 的语言集群恢复生效。
