根目录用一段脚本按 Accept-Language 302 到 /zh/ 或 /en/。日志里蜘蛛的请求头只带 en-US,于是全部被送到 /en/,中文版首页一个月没被抓过,收录里中文站首页一直是旧地址。
一开始怀疑是「中文版没有独立的可抓取入口,全靠根目录跳转」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。用 302 做语言选择,地址不稳定,蜘蛛不愿意把它当入口。另一种情况是蜘蛛的 Accept-Language 只带一种语言,不代表它只想要那个版本。
还有一种情况,hreflang 里缺 x-default 兜底,解析器不知道该以谁为准。
模拟蜘蛛的请求头,看它被送到哪个版本
curl -sI -H 'Accept-Language: en-US' https://www.example.com/ | grep -i location
然后确认各语言版本本身是否可直接访问
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/zh/
根目录改成 200 的语言选择页,列出全部版本链接
curl -s https://www.example.com/ | grep -c 'href="/zh/"'
补上 x-default 指向语言选择页或默认版本
curl -s https://www.example.com/zh/ | grep -o 'hreflang="x-default"[^>]*'
别只看报错消失,验证要多做一步。根目录返回 200 并列出九种语言的入口,各版本都能被直接抓到,中文首页重新进入索引。
按请求头做跳转对用户友好,对抓取不友好,折中的做法是根目录做成静态入口页,跳转放到用户点击之后。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
