现场是这样的。防火墙上按一份两年前的 Google IP 段放行,最近日志里 Googlebot 全是 403,GSC 报抓取异常,用户访问却又完全正常。

中间走过弯路,把「WAF 规则按 IP 段匹配但没放过 66.249.66.0/24 这类新分配的段」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。官方段会不定期新增和回收,写死的列表早晚过期;只放行了 IPv4 段,机房新节点走 IPv6 直接被丢;反向代理后取的是 CDN 回源 IP,根本不是蜘蛛真实地址。

第一件事是确认被拒的请求来自哪些网段

awk '$9==403 {print $1}' access.log | sort | uniq -c | sort -rn | head

下载官方最新的 IP 列表并比对

curl -s https://developers.google.com/static/search/apis/ipranges/googlebot.json | jq -r '.prefixes[].ipv4Prefix'

再往下把新段合并进防火墙放行列表

ipset add googlebot 66.249.66.0/24

末了验证放行后的状态码

curl -s -o /dev/null -w '%{http_code}\n' -A 'Mozilla/5.0 (compatible; Googlebot/2.1)' https://www.example.com/

恢复的判定其实很直接。同一批网段再次请求时状态码从 403 变成 200,GSC 抓取统计里服务器错误归零,抓取量两周内回到此前水平。

容易忽略的是,用 UA 判断真假只能算辅助,IP 反查才是准的,顺手把反查写成定时任务,段更新时能提前发现而不是等报错。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189