根目录用一段脚本按 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 并列出九种语言的入口,各版本都能被直接抓到,中文首页重新进入索引。

按请求头做跳转对用户友好,对抓取不友好,折中的做法是根目录做成静态入口页,跳转放到用户点击之后。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189