AI爬虫防护指南:从robots.txt到服务器拦截的落地方法
最近一星期后台私信里关于AI爬虫的问题突然多了起来。有人发来一张自己网站的日志截图问我“天辛大师这个GPTBot一天抓了三千多次robots.txt我明明写了拒绝啊”有人说自己的原创技术教程被某个AI搜索原封不动搬运成了答案结果原站流量直接掉了一半还有人问得更直接现在是不是写内容已经没意义了反正都会被AI吃掉。我回得最多的一句话是先别慌也别指望一个“请勿入内”的牌子就万事大吉。同行叫我天辛大师其实就是多踩了几年坑。今天这篇没有什么高深技巧不要求你去搭一整套反爬引擎也不推荐你买贵的要死的商业防火墙只讲最基础的自我保护先认清对手再动手配置最后知道被爬了该怎么办。这篇文章适合独立站长、内容创作者、小团队运营者哪怕你完全不懂后端照着做也能把大部分AI爬虫挡在大门外面。1. AI爬虫不是“更快的乌龟”它的逻辑和搜索引擎完全不一样很多人的第一反应是之前的搜索引擎爬虫也一直在抓站不也活得好好的为什么现在要单独把AI爬虫拎出来说因为这两者的抓取目的、行为模式、对原始站点的影响根本是两回事。1.1 搜索引擎爬虫是“导流”AI爬虫是“吸收”传统的Googlebot、Baiduspider这类搜索引擎爬虫抓取你的页面是为了建索引。它的最终产出是搜索结果列表用户点了结果流量还是会回到你的网站。所以搜索引擎和内容站之间有微妙的利益捆绑它需要你的内容充实索引你需要它的流量入口。这也是为什么搜索引擎爬虫大体上会克制频率、遵守robots.txt因为它不想得罪整个互联网内容生态。AI爬虫完全不是这个逻辑。以GPTBot、ClaudeBot、PerplexityBot、Bytespider、CCBot为代表的一类爬虫抓取网页是为了收集训练语料或者为AI搜索生成答案库。抓完之后你的内容会被“吸收”进它的模型或知识库里用户以后问AI问题AI直接把答案整合好呈现给用户用户不会再跳回你的网站。流量入口断掉了你还不能从AI那里拿到任何分成和回链。打个不那么恰当的比方搜索引擎像图书馆的编目员他抄了你的目录是为了让你更容易被读者找到AI爬虫像另一个出版商他把你整本书抄走改写成新书然后你书店的客流就没了。1.2 AI爬虫哪三件事最让人头疼我观察了多台服务器和多个站点的日志发现这些AI爬虫和普通爬虫相比有三个非常突出的行为特征。第一伪装性强。很多AI爬虫会把自己的User-Agent伪装成普通浏览器或者伪装成Googlebot让你在没看日志深度分析的情况下完全认不出来。有些甚至会用无头浏览器执行JavaScript把你的动态渲染内容完整抓下来常规的静态页面拦截对它们几乎无效。第二分布式大规模抓取。它们经常成百上千个IP轮换着来单个IP的请求量看上去不太夸张但整个网段的并发量能把你的小带宽撑爆。我见过一个案例一个日均访问量只有几千的博客某天突然出现几十个不同IP同时抓取同一篇文章接口导致数据库连接被打满。第三不守“规矩”的比例高。robots.txt对它们来说只是“参考”不是“协议”。你写了Disallow它依然照抓不误尤其是那些第三方转售的抓取服务接任务的机器根本不在乎目标站点的robots规则。这也是为什么很多站长写了robots.txt发现没用就开始焦虑。1.3 为什么这个问题今年突然变严重了说白了大模型训练需要海量高质量文本而最容易获取高质量文本的渠道就是抓取开放的网页内容。以前收集语料的人力成本高现在有了自动化的抓取工具和清洗流程几乎每个人都能拉起一批数据。再加上AI搜索产品如雨后春笋一样出现谁都想快速建立自己的知识库于是爬虫活动量大增。这不是你的错觉也不是你的站点特别倒霉而是整个内容生态正在面临的一次结构性压力。理解这个背景很重要你看到的“几千次抓取”不是针对你个人的恶意攻击而是行业性现象。所以心态上不用慌张手上动作要稳。2. robots.txt是“请勿入内”的牌子但拦不住执意闯空门的人既然要谈最基础的自我保护绕不开robots.txt。它是一份放在网站根目录的文本文件告诉爬虫“哪些路径你可以访问哪些路径你最好别碰”。但它到底管多大用很多人理解是错的。2.1 先把协议边界搞清楚robots.txt不是安全措施它本质上是约定俗成的行业礼貌协议。约束力体现在“对方愿意遵守”的前提上而不是技术上强制阻断。就像你家门口挂一块“请勿入内”的牌子对讲规矩的访客有效对蓄意闯入的人形同虚设。所以我对robots.txt的定位一直是它是姿态不是锁。它至少要表达出站点主人的意愿万一后面要投诉、要走法律途径这是证据链里的第一环。另外要注意robots.txt里应该预留Sitemap地址方便正当流量来源找到你的内容地图。不要因为讨厌爬虫把搜索引擎的Sitemap也全block掉那是自废武功。2.2 给主流AI爬虫单独设置访问规则的写法网上有很多现成的robots.txt模板但我还是建议大家理解每一行在干什么别一个文件抄到底。下面这个配置是目前比较通用的AI爬虫封锁清单User-agent: GPTBot Disallow: / User-agent: ClaudeBot Disallow: / User-agent: anthropic-ai Disallow: / User-agent: PerplexityBot Disallow: / User-agent: Bytespider Disallow: / User-agent: CCBot Disallow: / User-agent: Amazonbot Disallow: / User-agent: Google-Extended Disallow: / Sitemap: https://你的域名.com/sitemap.xml简单解释一下每一段User-agent表示这个规则对哪个爬虫生效Disallow: /表示禁止它抓取整个站点。Google-Extended是Google专门为AI训练单独设立的爬虫标识如果你想保留Google搜索收录但拒绝内容被拿去训练Gemini等模型就把它挡住如果你连普通Google抓取也要保留就不要写针对Googlebot的Disallow。2.3 别把robots.txt写成“一刀切”有一个很常见的错误为了让AI爬虫滚蛋直接把所有爬虫都Disallow最后导致百度、Google这些搜索引擎也进不来。你要想清楚自己的商业模式如果靠搜索流量吃饭就必须给搜索引擎爬虫放行如果你做的是私密内容、付费社群那关闭所有抓取反而合理。对大部分内容创作者我建议的分层策略是这样的爬虫类型建议动作理由传统搜索引擎爬虫放行维持搜索流量入口AI训练型爬虫视情况阻止保护原创内容不被吸入模型第三方采集工具阻止通常没有正当诉求内部监控/统计爬虫放行如自己部署的监控还有一个操作细节改完robots.txt之后重启Web服务器或者等待CDN缓存过期然后访问https://你的域名.com/robots.txt确认能正常打开。别改完忘了清缓存以为是配置错了。2.4 为什么说“这只是基础的第一步”我曾经在一个技术群里见过有人特别自信说“我robots.txt写了DisallowAI爬虫一定进不来”。结果一查日志GPTBot照样把他的整站文章爬了一遍。原因很简单部分AI厂商会用别的爬虫标识抓取比如一些数据中间商会以完全无关的UA去抓robots规则对它们就是废纸。所以robots.txt的意义是对讲规矩的爬虫省掉彼此的内耗对不讲规矩的爬虫至少为你的后续处置留一个“我明确拒绝过”的记录。真正要动手阻拦得进入服务器层面。3. 服务器端最便宜的防线UA黑名单与限流如果你有服务器管理权限下一步可以做的事情非常明确从User-Agent和请求频率两个维度做最基础的拦截。这一套配置大概一个下午就能完成不需要引入复杂的框架。3.1 第一步从访问日志里认出谁在爬先把日志翻出来看看。Nginx日志一般在/var/log/nginx/access.logApache在/var/log/apache2/access.log可以用几条命令快速统计awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20这条命令统计访问次数最多的前20个IP。再看User-Agent分布awk -F {print $6} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -30看到高频出现的GPTBot、ClaudeBot、Bytespider、PerplexityBot这些标识基本就能确认AI爬虫来了。如果看到大量UA是空字符串或者伪装成Googlebot但IP段又不是Google官方的IP段那大概率也不是什么正经流量。3.2 用Nginx直接按UA拉黑在Nginx里做一个UA黑名单映射是最直接的做法。示例配置如下map $http_user_agent $ai_crawler { default 0; ~*GPTBot 1; ~*ClaudeBot 1; ~*anthropic-ai 1; ~*PerplexityBot 1; ~*CCBot 1; ~*Bytespider 1; ~*Amazonbot 1; ~*cohere-ai 1; ~*FirecrawlBot 1; } server { listen 80; server_name yourdomain.com; if ($ai_crawler) { return 403; } # 其他站点配置... }配置完成后执行nginx -t检查语法再nginx -s reload生效。这样做能挡住大部分声明自己身份的AI爬虫但不能挡住那些伪装UA的。所以UA黑名单只是第一道闸不是全部。这里有个容易踩的坑正则匹配大小写问题。map里的~*表示不区分大小写匹配建议都用~*而不是~否则遇到gptbot小写写法就漏过去了。我见过有人严谨地写了~*GPTBot结果日志里出现的是gptbot完全没拦住。3.3 限流不追求全拦只求别被打垮就算UA被伪装了只要爬虫想大规模抓取它的请求频率必然异常。这时候可以用Nginx的limit_req模块做一个整体限流。limit_req_zone $binary_remote_addr zoneanti_ai:10m rate5r/s; server { location / { limit_req zoneanti_ai burst10 nodelay; # 其他配置... } }这段配置的含义是每个IP每秒最多处理5个请求超过的请求会排队最多容忍10个突发请求。nodelay参数表示在突发范围内的请求不等待直接处理超出范围的一律返回503。需要注意两点。第一rate5r/s对普通用户浏览网页完全够用因为一个正常用户不太可能每秒点5次页面但如果你网站有大量静态资源图片、CSS、JS是同一个IP并发加载的限流可能误伤建议把limit_req加在动态接口路由上而不是全局location。第二CDN回源IP可能是同一个如果你的网站套了CDN要先把真实IP取出来再限流否则会误伤所有走同一个CDN出口的用户。3.4 更进一步利用现成的WAF、CDN托管规则如果不想自己维护服务器很多CDN/WAF服务商都提供了爬虫管理能力。比如Cloudflare的Bot Fight Mode、阿里云WAF、腾讯云边缘安全加速的Bot管理都可以通过后台开关启用AI爬虫拦截。它们的优势是规则库持续更新能识别一些伪装UA的爬虫劣势是部分高级功能收费而且误杀率不一定比本地低。我的建议是基础薄弱的站点本地Nginx先做UA黑名单和限流同时观察一周日志。如果发现还有漏网的AI爬虫再上WAF层。安全投入要和你网站的流量价值匹配不要为了防几个爬虫把整站性能和预算都拖垮。4. 给内容加一层“主动伪装”AI爬虫看到的和用户看到的不一样服务器层拦截只能解决一部分问题因为高阶爬虫会模拟浏览器行为。这时候需要换一种思路让AI爬虫抓到的内容和真实用户看到的内容不一样。这不是什么黑科技就是内容呈现策略。4.1 懒加载和动态渲染控制内容交付时机很多AI爬虫不会执行完整的JavaScript它们默认抓HTML源码。如果你的正文内容是通过JavaScript异步加载的爬虫拿到的只是一堆空壳标签正文内容根本不在其中。这就是懒加载和动态渲染能起到的作用。举个最简单的例子页面先加载文章摘要正文内容在用户滚动到中段时才通过接口返回。对正常用户没影响但对只抓静态HTML的爬虫来说整篇文章就是不完整的。缺点是执行JavaScript的现代爬虫和无头浏览器也能拿到完整内容所以这招对“初级爬虫”有效对“高级爬虫”依然防不住。更重要的还是别把动态渲染做得太绝否则搜索引擎的常规收录爬虫也会抓不到内容导致你的站点在搜索结果里消失。给搜索引擎公布的抓取UA放行完整HTML是最常见的折中方案前提是你能识别出哪些UA是搜索引擎官方爬虫。4.2 内容分层摘要公开全文进会员区对原创深度内容来说最有效的内容保护其实是产品层面的公开页只显示标题和摘要全文放到需要登录/订阅的区域。AI爬虫就算伪装得再像真实用户也得有账号才能拿到全文批量注册账号的成本会把大多数爬虫劝退。我见过不少技术博客和行业报告站点采用这个策略免费用户看到20%的试读内容完整内容需要注册邮箱或者订阅RSS才能继续阅读。这样做虽然牺牲了一部分“零门槛曝光”但换来了内容资产的沉淀。如果你的核心卖点就是原创深度内容这个代价非常值得。4.3 蜜罐陷阱给爬虫挖个“隐形坑”蜜罐的基本思路是在页面里放一个正常用户永远看不到的链接比如白色背景上的白色文字、隐藏的目录、不可见的输入框。正常用户不会点击搜索引擎也不会把它当作重要内容但如果一个爬虫不管三七二十一把页面里所有链接都抓一遍就会踩中这个陷阱。踩中之后服务器可以做两件事记录这个IP和UA再把它拉进黑名单。Nginx配置里可以专门为蜜罐路径设置一条日志规则一旦有条目就说明该IP有“全文抓取”的行为特征可以放心封锁。蜜罐要注意一个合规问题不要把蜜罐放在robots.txt允许抓取的正常路径之外也不要试图诱导爬虫访问你服务器上的危险接口那可能把自己拖进法律纠纷。蜜罐只是“诱饵”不是“陷阱武器”边界要把握好。4.4 人机验证只在风险触发时启用验证码是最古老也最有效的人机区分手段但代价是伤害真实用户体验。我建议不要全站启用验证码而是设置触发条件某个IP在短时间内请求次数超过阈值或者UA特征可疑的概率较高时才弹出人机验证页。比如免费的Cloudflare Turnstile、hCaptcha、腾讯防水墙都能做到条件触发的验证。这么做有几个好处普通用户的访问路径完全不变体验几乎没有损伤爬虫如果频率高会频繁遇到验证抓取效率急剧下降。缺点是批量抓取者可能接入打码平台验证码不是100%免疫但它能把攻击成本抬高一个量级大多数非专业团队就放弃了。5. 被爬之后先把证据攒起来再说话如果前面的防御都做了AI爬虫还是进来了或者你发现自己辛辛苦苦写的长文出现在某个AI产品的回答里这时候最应该做的是冷静下来固定证据。我见过太多人一上来就开骂结果连对方是谁、抓了哪些内容都没记录最后不了了之。5.1 日志应该保留哪些信息从防御和维权两个角度至少保留以下字段字段示例用途请求时间2025-05-20 08:12:31建立时间线源IP203.0.113.10定位抓取方User-AgentGPTBot/1.0识别爬虫身份请求路径/article/tech-guide确认哪些内容被爬请求方法GET/POST判断行为模式响应码200/403/503判断是否拦截成功Referer无辅助分析来源如果用的是Nginx默认日志格式基本都有这些字段只要保证日志存储周期别太短。建议至少保留90天。很多云服务器默认只有7天日志对维权来说远远不够。5.2 怎么判断到底是谁在爬拿到源IP之后可以用whois命令或者在线IP查询工具查看IP归属看看属于哪个运营商、哪个云厂商、哪个机构。再结合UA去搜索引擎搜一下大部分主流AI爬虫的UA和IP段都是公开的官方文档里都会写明。判断逻辑很简单如果IP归属是某某AI公司机房的ASN号码UA又是官方爬虫标识那基本就坐实了如果有第三方数据公司经常来抓那你可能被列入了某个“语料采购清单”这在今年的内容行业里并不罕见。5.3 投诉沟通的路径和话术先走平台内部的版权投诉通道。主流的AI搜索引擎和大模型厂商普遍提供了内容使用反馈表单你可以把robots.txt快照、被爬的URL列表、服务器日志汇总成一份文档提交。不需要什么法言法语说明三件事即可我是内容权利方、我明确拒绝AI爬虫抓取、对方有具体抓取记录。附上日志截图比任何情绪化控诉都有用。如果对方是全球大公司走DMCA之类的版权通知渠道或者联系其法务邮箱。如果是国内团队走云厂商的滥用举报通道abuse邮箱通常比直接联系对方更快因为云厂商对滥用投诉的响应机制更成熟。5.4 千万别用违法的方式反制这是我最想强调的一条底线。有人被爬急了想对爬虫服务器发起反向攻击或者投毒文件、部署恶意代码这些都是法律上非常危险的动作。你在对方眼里是受害者一旦用了非正当手段你自己就变成了加害者轻则违反《网络安全法》相关要求重则涉及刑事风险。更稳妥的反制手段永远是“防御升级”而不是“主动攻击”。被爬之后可以调整robots.txt、封禁IP段、上验证码、缩短内容开放度这些动作都在你的权利范围内。己方阵地可以先守住再去主张权利。6. 天辛大师的实操清单先做到这五件事说了这么多我知道很多人看完会问那我到底先做哪个我不想让你觉得防御AI爬虫是一件特别复杂的事。把它拆成五步按顺序做完大部分问题就能压下去。6.1 三个最常见的错误先打个预防针第一只改robots.txt就以为完事了。根本不构成技术壁垒顶多算表个态。第二把所有用户都当成机器人验证码贴满全站。结果AI爬虫没挡住真实用户先跑光了搜索引擎收录也暴跌。第三一点日志都不留。出了事才发现自己手上没有任何证据连对方IP都不知道投诉无从谈起。6.2 五步基础清单第一步写好robots.txt把主流AI爬虫的UA全部Disallow保留搜索引擎收录路径。第二步服务器里做UA黑名单顺手配置按IP限流把“发疯式抓取”挡在资源层之外。第三步最新一篇文章改成摘要全文订阅的分层结构核心内容放到登录后展示。第四步部署一个蜜罐链接一旦被触发就自动记录IP并加入封禁名单。第五步打开访问日志设置90天以上保存周期每周扫一眼有没有异常UA和IP。做到这五步你的防护水平已经超过市面上80%的个人内容站点。不要追求一步到位不要想着把世界上所有爬虫都挡在门外那不可能也不必要。天辛大师最后说句掏心窝的话AI爬虫这件事会长期存在而且只会越来越专业化。与其焦虑“内容是不是白写了”不如把精力放在三件事上——明确自己的边界守住自己的阵地保留自己的证据。技术防护永远在升级但最基础的自我保护永远是意识和习惯先行。先把这五步落地以后无论爬虫怎么变你都不会慌。