问题出现得很突然,日志倒是留得挺全。多语言站 x-default 指向 /en/,这个地址 301 跳到 /en-us/,Search Console 的国际定位报告显示整组 hreflang 无效,去掉 x-default 后又提示缺少默认版本。
刚开始盯着「x-default 应指向语言选择页,而不是某一个语言版本」,折腾了半个多小时,排掉了。
排查方向其实有限,先把可能性排一排。hreflang 指向的地址必须直接返回 200,301 会让整条记录失效。还有一种是跳转后的页面 canonical 指向自己,与被指向的旧地址不一致。
不容易想到的是,同一组里有一条 404,整组标签被一起忽略。
上来先看 x-default 地址的跳转链
curl -sIL https://www.example.com/en/ | Select-String -Pattern "HTTP/|location"
接着确认各语言版本的 hreflang 写法
curl -s https://www.example.com/en-us/ | Select-String -Pattern "hreflang"
随后检查每个版本的 canonical 是否自指
curl -s https://www.example.com/ja/ | Select-String -Pattern "canonical"
等前面都确认过,再重新提交 sitemap 让蜘蛛更新
curl -s "https://www.google.com/ping?sitemap=https://www.example.com/sitemap.xml"
改完先别撤,确认这几项。国际定位报告里各语言版本恢复正常识别,x-default 指向的地址返回 200 且与 hreflang 完全一致,没有跳转。
这里还有个坑。hreflang 是一组互相印证的声明,任何一条指向跳转或 404,损失的是整组而不是一条。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
