爬虫抓取失败防火墙与站点整改完整清单
爬虫抓取失败通常不是单点故障,而是防火墙、站点配置和访问策略共同作用的结果。
本文整理一份可直接对照执行的排查清单,从查看拦截日志、调整防火墙规则、检查robots.txt到验证抓取结果,让你不用反复猜原因。
第一步:定位问题出在防火墙还是站点
先模拟搜索引擎的抓取请求,判断返回状态码。
以百度蜘蛛为例,在服务器上执行:
curl -I -A "Baiduspider" https://你的域名
如果返回 403、503 或超时,大概率是防火墙或 WAF 拦截;
如果返回 200,说明站点本身可访问,问题可能出在 robots.txt、IP 封禁或搜索引擎侧。
也可以用 Googlebot 的 UA 测试:
curl -I -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://你的域名
同时去 Nginx 或面板的访问日志里搜索爬虫 UA,看是否有异常拦截记录。
比如:
grep Baiduspider /www/wwwlogs/你的站点.log | tail -50
第二步:防火墙规则整改清单
不要直接关防火墙,因为安全风险更高。
按下面顺序逐项检查:
- 查看服务器防火墙状态:
firewall-cmd --list-all
- 如果用的是 iptables,执行:
iptables -L -n | head -50
重点看是否封禁了搜索引擎的 IP 段,尤其是境外 IP。
很多防火墙规则会误杀 Googlebot、Bingbot。
- 宝塔面板用户:进入
安全→防火墙,查看是否有拦截记录,并确认是否开启了 CC 防护、WAF 的“恶意 UA”规则。如果发现爬虫 UA 被拦截,可把对应 UA 加入白名单。 - 如果用了 CDN,还要到 CDN 控制台的访问控制、WAF 规则中放行搜索引擎 UA。
示例:在 Nginx 层放行百度蜘蛛的 UA(server 块中):
if ($http_user_agent ~* "Baiduspider") {
return 200;
}
注意:这个配置只是应急,生产环境建议用更细的规则,别把所有请求都返回 200。
第三步:站点配置与 robots 整改清单
检查网站根目录下的 robots.txt,确认没有禁止抓取整站。
User-agent: *
Disallow: /admin
如果文件内容像这样:
User-agent: Baiduspider
Disallow: /
那百度蜘蛛会被完全禁止,自然抓取失败。
还要检查这几个容易忽略的点:
- 站点是否开启了强制跳转,比如 HTTP 跳 HTTPS,但证书过期或链不完整,爬虫会拒绝访问。
- 是否有验证码、JS 挑战或登录拦截,这会挡住所有爬虫而不是只挡恶意请求。
- 是否在
.htaccess或 Nginx 配置中限制了 IP 或 UA,常见于防采集规则误伤。 - 检查网页响应时间,如果超过 5 秒,爬虫可能主动放弃。
第四步:避坑与验证方法
改动之后不要立刻下结论,因为搜索引擎重新抓取有延迟。
常见坑有:
- 修改 robots.txt 后,爬虫要过一段时间才会重新读取,可以到搜索平台提交 robots 更新时间。
- 防火墙规则修改后要保存并重载,否则重启后失效。
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
- 不要把所有境外 IP 都封掉,这样会导致 Google、Bing 全部抓取失败,且与国内搜索引擎无直接关系。
最后验证方法:修改完每一项,再用第一步的 curl 命令模拟抓取,观察状态码和返回头部。
也可以在百度搜索资源平台或 Google Search Console 里使用“抓取诊断”工具,直接看到抓取结果和失败原因。
如果你正在处理爬虫抓取失败问题,建议按这份整改清单从上到下逐项执行,每修改一项就验证一次,避免改完所有配置后无从判断是哪个环节生效。
遇到异常时,优先回看防火墙日志和 robots 是否被误改。