上线防护后开启浏览器验证,用户等五秒能进,蜘蛛不执行 JS,拿到的是 403 加一段挑战脚本,GSC 里抓取错误三天涨了两千条。
一开始怀疑是「挑战页返回 403 而不是 503,被记成永久性拦截」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。挑战页靠 JS 下发 cookie,蜘蛛不会执行脚本。少数情况下是防护规则对所有 UA 生效,没有给已验证蜘蛛放行。
还有一种情况,源站没有独立入口,回源也必须过同一层验证。
上来先用蜘蛛 UA 请求首页看状态码
curl -s -A 'Mozilla/5.0 (compatible; Googlebot/2.1)' https://www.example.com/ -o /dev/null -w '%{http_code}'
再往下看响应体是不是挑战脚本
curl -s -A 'Mozilla/5.0 (compatible; Googlebot/2.1)' https://www.example.com/ | head -20
然后按官方 IP 段放行蜘蛛
curl -s https://www.gstatic.com/ipranges/goog.json | head -5
末了关闭全站挑战改为按路径触发
curl -s https://api.cloudflare.com/client/v4/zones -H 'Authorization: Bearer $TOKEN'
恢复的判定其实很直接。蜘蛛 UA 请求首页返回 200 且正文完整,抓取错误停止增长,两周后收录恢复。
容易忽略的是,人机验证对不执行 JS 的客户端等于硬拦截,蜘蛛必须走白名单而不是挑战流程。这类问题最好一次改到位,反复小改反而容易把原因搅混。
