抓取诊断报 403 或 503,九成不是百度的问题,是源站的防火墙、CDN 或 UA 拦截把蜘蛛挡了。2025 年到现在我们处理过 20 多次这类问题,原因就三种。
先确认是不是真的被挡
抓取诊断会给出状态码和抓取时间。403 是拒绝访问,503 是服务不可用。
两件事要确认:一是你自己用浏览器访问同一个 URL 是否正常;二是换个时间再诊断一次,排除偶发。
如果浏览器正常、诊断稳定报错,基本就是蜘蛛被针对性拦截了。
403 的三种原因
第一,CDN 或 WAF 的安全策略。很多云厂商的默认规则会拦截"非浏览器 UA",百度蜘蛛的 UA 里有 Baiduspider 字样,被当成爬虫挡掉。
第二,服务器的 UA 黑白名单。运维为了防采集,配了只允许常见浏览器 UA,把搜索引擎也挡了。
第三,IP 段被封。站点被恶意爬过之后,运维封了一批 IP,误伤了百度蜘蛛的出口 IP。
503 的两种原因
第一,源站负载高。蜘蛛来的时候正好赶上资源紧张,返回 503。这类问题通常伴随偶发,抓取诊断多试几次能复现。
第二,限流配置。Nginx 或云防火墙的限流规则太严,蜘蛛的并发请求触发了限流。
怎么验证
我们一般做三步。第一步,用 curl 带上百度蜘蛛的 UA 请求页面,看返回码。第二步,反查请求来源 IP 是否属于百度,百度蜘蛛的 IP 可以通过 DNS 反查确认。第三步,看服务器访问日志里百度蜘蛛的请求量和状态码分布。
三步做完,问题基本定位。我们最近一次排查,日志里百度蜘蛛的 403 占 78%,原因就是 CDN 的 UA 规则。
修复
CDN 和 WAF 加白名单,放行百度蜘蛛的 UA 和 IP 段;服务器 UA 规则里加搜索引擎的 UA;限流规则给蜘蛛单独放宽。
改完在抓取诊断里重新抓一次,确认状态码 200。再观察一周抓取频次有没有恢复。
一个反复出现的坑
换 CDN 之后忘了同步白名单,是我们遇到最多的情况。今年 3 月一个客户迁移 CDN,迁移当晚百度蜘蛛就被挡了,抓取诊断全报 403,三天后才发现。
这类问题的特点是:站点访问正常、Google 也正常(Google 的爬虫 IP 段被新 CDN 默认放行),只有百度有问题。所以盯抓取诊断,比盯总流量更早发现问题。
一句判断
这类问题最冤的地方在于:站点本身没问题,内容也没问题,就是被自己的安全配置挡在门外。上线新站或者换 CDN 之后,第一件事应该是跑一次抓取诊断。
元析智能
为软件公司做 SEO 和 GEO 优化