网站防采集是否应该屏蔽所有非搜索引擎爬虫?
网站防采集不应屏蔽所有非搜索引擎爬虫,应按行为而非身份分层管控,用robots.txt、限速、CDN/WAF对合规低频流量放行并精确拦截高频越权伪造流量,AI爬虫可单独封禁。
结论:不应该屏蔽所有非搜索引擎爬虫。正确做法是按“行为”而不是按“身份”分层管控——对遵守 robots.txt、低频访问的爬虫默认放行,只对高频、越权、伪造身份的流量做精确拦截。一刀切全封,代价是分享卡片失效、监控误报、正常用户被误伤,而真正的采集方换个 User-Agent 照样进来。
为什么“屏蔽所有非搜索引擎爬虫”会误伤?
因为互联网上大量合法流量根本不来自搜索引擎。社交平台的链接预览(Twitterbot、facebookexternalhit)、可用性监控(UptimeRobot、Pingdom 默认 1-5 分钟探测一次)、RSS 阅读器、翻译与无障碍服务、企业内部系统调用你的公开 API,都属于“非搜索引擎爬虫”。全封的直接后果有三个:微信/Telegram 分享链接变成空白卡片;监控面板开始报 403 假告警;合作方接口对不上。
更关键的是,User-Agent 字符串可以任意伪造。你在 Nginx 里写一条 if ($http_user_agent !~* "googlebot|baiduspider") { return 403; },采集方把 UA 改成 Mozilla/5.0 (compatible; Googlebot/2.1) 就绕过了。结论:靠 UA 黑名单防采集,只能挡住脚本小子。
怎么区分恶意采集和正常爬虫?
判断依据是行为特征,不是 UA。可以盯这几个可量化指标:
- 单 IP 请求频率:正常爬虫一般 10-60 次/分钟;采集器常在 300 次/分钟以上,且并发连接数超过 20。
- 访问路径规律:是否按列表页 → 详情页的固定步长遍历,且不带 Referer、不接受 Cookie。
- 是否遵守 robots.txt:合规爬虫会先拉取
/robots.txt;采集器通常直接请求详情页。 - 身份一致性:把 IP 做反向 DNS 解析,真 Googlebot 会解析到以
googlebot.com或google.com结尾的域名。命令是host 66.249.66.1,返回crawl-66-249-66-1.googlebot.com才算真身。
具体应该怎么配置防采集?
分三层做,从软到硬。
第一层,robots.txt 声明规则,给合规爬虫留出 Crawl-delay:
User-agent: *
Crawl-delay: 5
Disallow: /search
Disallow: /api/
Disallow: /*?page=
第二层,Nginx 按 IP 限速,超限返回 429 而不是 403——429 是“请求过多”,能让合规爬虫自动退避,403 会让它们以为页面不存在:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
server {
limit_req zone=perip burst=20 nodelay;
limit_req_status 429;
}
第三层,CDN/WAF 上做规则:对无 Cookie、无 Referer、UA 为空的请求跳 JS 挑战;对 5 分钟内请求超过 200 次的 IP 段做 30 分钟封禁。这一步能挡掉九成以上的低成本采集脚本。
AI 爬虫要不要单独封?
要,而且可以单独封。GPTBot、ClaudeBot、Google-Extended、Bytespider 都有独立 UA,写在 robots.txt 里就能精确拒绝,不影响 Googlebot 收录:Google-Extended 控制的是内容用于 AI 训练,和搜索排名是两套开关。结论:内容付费或版权敏感的站点,建议把 AI 训练类爬虫全部 Disallow;靠自然搜索流量活的站点,封之前先评估自己有多少流量来自 AI 摘要入口。
什么情况下才该默认全封?
只有三种场景适合“默认拒绝 + 小范围白名单”:站点已被采集压到源站 CPU 打满、系统本身是内部或测试环境不该被外部访问、数据涉及未公开或法律敏感信息。即便如此,白名单也不能只匹配 UA 字符串,必须叠加反向 DNS 校验或 IP 段校验,否则等于没设。
总结一句:防采集的目标是让采集成本高于收益,不是让所有非搜索引擎流量归零。用 robots.txt 做声明、限速返回 429 做节流、行为特征加 WAF 做拦截,三层配合既能挡住批量采集,也不会把自己站点的分享、监控和 API 调用一起封死。
转载请注明出处,版权归原作者所有。