事情本身不复杂,线索都在日志里。站点按 cookie 的 lang 值 302 到对应语言目录,蜘蛛没有 cookie,每次访问根目录都被送到 /zh/,英文页除了 sitemap 没有任何入口。

第一反应是「hreflang 指向的英文页自身也做 cookie 判断,形成循环」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。服务端按 cookie 做 302,蜘蛛请求不带 cookie 只能进默认语言。也可能是语言切换按钮用 JS 写 cookie 再刷新,没有真实链接。

另外,英文页不在主导航里,缺少可抓取的静态入口。

模拟无 cookie 请求看跳转

curl -sI https://www.example.com/ | grep -i location

去掉服务端的自动跳转

sed -i '/setcookie.*lang/d' inc/lang.php

接着把语言切换改成真实链接

sed -i 's#<button class="lang"#<a href="/en/" class="lang"#' header.php

末了确认蜘蛛能进英文首页

curl -s -A 'Googlebot' https://www.example.com/en/ | grep -o '<title>[^<]*</title>'

恢复的判定其实很直接。无 cookie 请求首页返回 200 不再跳转,英文首页有静态入口并被收录,日志里出现对 /en/ 的抓取。

容易忽略的是,按地区跳转可以做,但要给蜘蛛和直链用户留一条不跳的路径,否则英文站等于不存在。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189