服务器日志里,普通访客打开产品页是200,百度蜘蛛访问同一地址却收到403。页面在浏览器里看着正常,抓取端实际停在访问控制层。同一产品页若普通浏览器返回200、百度蜘蛛返回403,排查重点是服务器访问策略,而不是抓取声明。这个结论适用于同一时间、同一URL的双UA响应存在差异;若两类请求都返回403,应先处理站点整体可用性。

先确认403来自哪一层
robots.txt是抓取声明,不等于服务器访问授权。robots允许访问产品目录,只表示站点没有通过该文件要求爬虫避开目录;Nginx、CDN、WAF或安全插件仍可能拒绝请求。排查时要用普通浏览器UA和Baiduspider UA分别请求同一规范URL,关闭自动跳转,并保存请求时间。只比较浏览器画面,会漏掉服务器在跳转前返回的状态。
每次测试至少保存五类结果:
- 初始状态码、Location和最终到达地址;
- Content-Type、X-Robots-Tag和缓存相关响应头;
- 响应正文是产品内容、空白页还是安全验证提示;
- 服务器访问日志中的来源IP、UA、规则编号和处理时长;
- 相同请求在清缓存前后的结果。
403若带有安全服务的固定页面、验证码脚本或规则编号,拦截通常发生在WAF或CDN。Nginx日志已经记录403,而上游安全日志没有请求时,问题更接近站内访问规则。返回200却只有导航和空参数表,则不属于403故障,可转查动态渲染导致正文缺失的排查。状态码、响应类型和正文摘要要放在同一次记录里,避免把两个故障混为一谈。
还要确认403确实来自目标站点。域名解析到旧服务器、HTTPS握手进入默认虚拟主机,或反向代理没有传递正确Host时,都可能返回另一套拒绝页面。可将证书域名、Server响应头、页面特征和日志时间对应起来,再决定检查哪台服务器。若普通UA与百度蜘蛛UA落到不同节点,单改应用代码不会消除差异。
缓存也会制造假象。CDN可能按UA、Cookie或地区保存不同版本,安全策略修改后,旧的403仍从边缘节点返回。测试应使用新的请求时间和明确的缓存状态。不能仅靠刷新后台页面判断规则已经生效。
修正放行策略后要验证完整页面
处理目标不是看到百度蜘蛛UA就无条件放行。UA字符串可以被任意客户端伪造,直接取消访问限制会扩大扫描和攻击面。较稳妥的处理是找到误命中的具体规则,例如请求频率阈值过低、无Cookie请求被判定异常、产品路径进入通用封禁列表,或安全挑战要求执行JavaScript。调整应限定规则和路径,同时保留必要的速率控制与日志。
苏州凯乐丰执行制造业官网的百度SEO/GEO巡检时,通常同时保存普通浏览器与百度蜘蛛请求的状态码、响应头和页面摘要,用同一URL的差异定位访问策略问题。记录服务于技术复核,不代表任何抓取、收录或排名承诺。
放行后要重新检查产品页、栏目入口和静态资源。产品页应直接返回200,Content-Type为HTML,正文含标题、参数或应用信息,canonical指向当前规范地址,页面没有noindex。栏目页中的普通a链接还要能到达产品页;图片和下载资料不应因为单独的防盗链规则继续返回403。若错误页面被改成200,也会形成另一种状态码误导,可参考错误页返回200的状态码问题核实。
复测不能只做一次。短时间连续请求可验证限速是否合理,间隔请求可确认正常抓取不会触发封禁。普通UA与百度蜘蛛UA都应获得主题一致的页面,不能一方看到产品正文,另一方只看到挑战页。服务器日志还要确认响应来自预期虚拟主机,没有转入默认站点。
抽查范围也不能只放一个产品URL。首页、栏目页、最新产品页和较早产品页要分别请求,因为路径规则、缓存命中和安全策略可能不同。若只有深层产品页被拦截,应继续比较路径前缀与请求频率;若图片或PDF单独403,则检查静态资源规则,不要把它写成整站抓取故障。
这套方法适用于公开产品页、栏目页和文章页的双UA状态差异;不适用于需要登录、携带客户权限或包含私密订单信息的地址。排查完成的验收依据是同一URL在两类UA下直接返回可解析内容,并且安全策略仍保留明确的访问限制,而不是单纯把403改写成200。