先看现象。根域按 Accept-Language 做 302 跳到 /en/ 或 /zh/,hreflang 写在跳转前的响应里,Google 抓根域只看到 302,多语言报告里一个版本都没识别到。
原因不止一个,得分开看。302 响应不带 HTML 正文,head 里的 alternate 根本没输出。也可能是语言判断依赖请求头,蜘蛛默认头永远是英文。
少数情况下是跳转目标没有稳定 URL,每个 IP 拿到的结果可能不同。
不带语言头请求根域看实际响应
curl -sI https://www.example.com/
模拟蜘蛛的请求头复现跳转
curl -sI -H 'Accept-Language: en-US' https://www.example.com/
等前面都确认过,再改成静态语言入口页并在页内给链接
curl -s https://www.example.com/ | grep -o 'href="/[a-z-]*/"' | sort -u
中途换过一次思路,把范围缩到最小的那一层,反而快了。
恢复的判定其实很直接。根域改成返回 200 的语言选择页后,多语言报告里五个版本全部识别,各语言入口的抓取次数也稳定下来。
提醒一点。按请求头跳转对用户友好对蜘蛛不友好,语言入口页加一组静态链接是成本最低的折中。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
