早上打开服务器后台,发现昨晚带宽跑满、页面加载变慢,日志里几十个陌生 IP 在反复刷同一个产品页——做外贸独立站的人,多多少少都遇到过这种“隐形失血”。尤其是站上有价格表、产品参数这类结构化数据的,被采集的概率更高。

处理这件事,最容易犯的错是一上来就把所有爬虫都封了,结果连 Googlebot 一起拦掉,排名掉得比带宽费还心疼。所以得先分清谁是谁,再决定拦谁、怎么拦。本文按“对外贸独立站运营者最有用”的顺序展开:先讲业务影响(特别是 GEO 可见度),再给可照抄的拦截步骤。

先分清三类爬虫,别一刀切

服务器日志里的访问者,大致能分成三类:

类型典型代表处理态度
搜索引擎爬虫Googlebot、Bingbot必须放行,但要验证真伪
有主的 AI 爬虫GPTBot、ClaudeBot、Bytespider、Google-Extended限速可商量,别一刀切
恶意/工具类爬虫采集器、漏洞扫描、SEO 工具能拦就拦

第二类值得单独说说。这两年 AI 公司大规模采集网页内容,GPTBot、ClaudeBot、Bytespider、Google-Extended 这些名字会经常出现在日志里。它们不是“恶意”的,但确实会吃掉不少资源,有些站的抓取频率相当高。

要不要拦?取决于你的目的。如果你希望自己的内容出现在 ChatGPT、Gemini、Perplexity 这些 AI 的回答里,那放行是有价值的,做 GEO 本来就需要让 AI 能读到你的内容。如果你的站就是被采集得太狠、服务器扛不住,可以只做限速不做封禁,控制频率就够了。一刀切封掉,等于主动放弃了 AI 搜索这条入口。

网站被爬虫围攻时,CDN 与服务器限速构成的防护层

GEO 避坑:Google-Extended 不等于 Googlebot

很多人搞混一点:Google-Extended 这个标识管的不是谷歌搜索的抓取,而是谷歌用你的内容做 AI 训练和 AI 生成内容。你可以选择屏蔽 Google-Extended,同时保持 Googlebot 正常抓取,这两件事互不影响。

Google 官方文档明确写了:Google-Extended 是一个独立的 robots.txt 令牌,不影响网站在 Google 搜索中的收录,也不会作为搜索排名信号。因此,如果你只想“不让 Google 拿我的内容训练 Gemini”,但还想继续吃 Google 搜索流量,那么只封 Google-Extended 是安全的。各家 AI 爬虫的界定与处理建议,可以在 Cloudflare 的爬虫管理文档 里对照。

反过来说,如果你想做 GEO、想让 Gemini 或 AI Overviews 引用你的内容,那连 Google-Extended 都屏蔽就不是个好主意。关于让 AI 推荐后真正成交,我在《GEO 决策证据:让 AI 推荐后真正成交的关键》里展开过,核心结论是:AI 读到你只是第一步,内容里有没有可信证据(数据、案例、可验证的实操)才决定它敢不敢推荐。

另外,OpenAI 的 GPTBot 和 OAI-SearchBot 也是分开的:屏蔽 GPTBot 只是不让它拿你的内容训练模型,不一定会让你从 ChatGPT search 消失;但屏蔽 OAI-SearchBot 就会。如果你把两者混为一谈,很容易做出错误决策。

搜索引擎抓取与 AI 训练是两条互不影响的通道:Googlebot 负责搜索收录,Google-Extended 只管内容是否用于 AI 训练

怎么认出对方到底是谁

日志里最常见的一个陷阱:User-Agent 写着 “Googlebot”,但 UA 是客户端自己填的,谁都能随便写。恶意采集器伪装成 Googlebot 是常规操作。

验证真伪的方法只有一个:反向 DNS 查询。Google 的官方爬虫都来自 googlebot.com 和 google.com 这两个域名下的 IP 段。你可以用反向查询工具,输入日志里的 IP,看它反查出来的主机名是不是以这两个域名结尾,然后再正向查询一次确认。Bing、OpenAI、Anthropic 也都会公布各自的官方 IP 段或验证方法。

除了 IP 验证,行为特征也能帮你判断:

  • 真爬虫:遵守 robots.txt、按一定间隔访问、读取页面上有意义的页面。
  • 恶意采集器:通常无视 robots.txt,短时间内高频重复访问同一个地址,还会去扫正常用户不可能访问的路径,比如 /wp-admin、/.env、/backup.zip。

给你的站做一次日志排查,把这些特征找出来,后面配置拦截规则就有目标了。

robots.txt 挡不住恶意爬虫

这一点必须先说清楚。robots.txt 是一份“君子协定”,它规定的是“请勿访问”,但没有强制力。守规矩的爬虫(搜索引擎、正规 AI 公司的爬虫)会遵守;恶意采集器、扫描器,压根不会去读这个文件。

所以 robots.txt 能解决的是“我不想让正规爬虫抓某些页面”,解决不了“有人恶意刷我的站”。正确用法是声明规则,比如屏蔽后台路径、搜索结果页、购物车和结算页:

1
2
3
4
5
6
7
8
9
User-agent: *
Disallow: /cart/
Disallow: /checkout/
Disallow: /search/
Disallow: /admin/

# 单独屏蔽某个 AI 爬虫,不影响 Googlebot
User-agent: GPTBot
Disallow: /

关于 robots.txt 还有一个反直觉的坑:如果你用 robots.txt 禁止抓取某个页面,同时又指望页面上的 noindex 标签起作用,那是行不通的,因为爬虫压根没读到那个标签。正确顺序是先允许抓取、靠 noindex 让它退出索引,等确认退出了再考虑要不要用 robots 拦。关于 robots.txt 的更多踩坑点,可以看《Robots.txt 防止网站内容误删》。

真正管用的拦截手段

对付不守规矩的爬虫,得用它们绕不过去的东西。从省事到费劲排一下,看你的技术条件选。

最省事:CDN 安全功能

Cloudflare 这类服务商在面板里就有 Bot Fight Mode 和 Rate Limiting(配置说明),打开之后会自动识别并拦截明显的爬虫行为和异常高频请求,不需要碰服务器。对于不想折腾技术的人来说,这是性价比最高的选择。它还能按路径设置限速,比如只对 /api/ 这类接口做严格限制。

服务器层限速:Nginx

Nginx 自带限速模块(limit_req 官方文档),可以按 IP 限制请求频率和并发连接数。配置写在 nginx 的配置文件里:

1
2
3
4
5
6
7
8
9
10
11
12
# 定义一个限速区:每个 IP 每秒最多 10 个请求
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

# 单个 IP 最多 5 个并发连接
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location / {
limit_req zone=perip burst=20 nodelay;
limit_conn addr 5;
}
}

burst 参数是关键。正常用户打开一个页面会同时请求图片、CSS、JS 好几个资源,如果限额卡得太死,正常用户也会被拦。burst 给一点空间,恶意爬虫持续高频请求还是会被挡住。

按规则拉黑

如果日志里已经锁定了几个作恶的 IP 段或者 UA 特征,可以直接在服务器或 CDN 层面封掉。拉黑之前先确认 IP 段里没有 Googlebot。有些云服务商的 IP 段是共享的,一封封一片。稳妥的顺序是先按 UA + IP 双重条件封,或者干脆只用限速不封禁。限速是软的、可逆的,封禁是硬的、容易出事。

地理屏蔽要格外小心

如果你的客户只来自欧美,而攻击流量主要来自某些特定地区,可以在 CDN 层面只放行目标地区。但外贸站尤其要小心:一个做工业设备出口的站,客户主要在德国和中东,站长嫌中东扫描流量太多直接把整个中东屏蔽了,结果迪拜的老客户发邮件说打不开网站。这种损失看不见,但很实在。

别把真实客户挡在门外

拦截做得太狠,最常见的后果是把自己的客户也拦了。外贸站客户可能来自公司内网、VPN、某些地区的运营商,这些都可能被 CDN 或 Nginx 的限速/封禁规则误判。

所以规则上线之前,先想清楚三件事:

  1. 这个规则会不会伤到真实客户?
  2. 会不会挡住 Googlebot?
  3. 出问题的时候能不能快速回滚?

想不清楚就先用限速方案。上线之后盯几天数据:看自然搜索流量有没有异常下滑,看 Google Search Console 里的抓取统计有没有变化。Google 的抓取频率如果突然掉下来,很可能是误拦了。

从日志里看出问题

做拦截之前得先有判断依据。用四个维度一起看:

维度异常表现说明
单 IP 请求量一个 IP 一天几千上万次高频采集,优先处理
请求路径大量 /wp-admin、/.env、/backup漏洞扫描,直接拉黑
返回状态码大量 404/403 集中在同一来源在试探哪些路径存在
访问时间段24 小时均匀分布机器行为,正常用户不会这样

每月做一次这个动作,比出问题之后再翻日志轻松多了。如果用了 Cloudflare,后台流量分析面板已经把这些统计做好了,可以直接看。

服务器访问日志的四个分析维度:单 IP 请求量、请求路径、返回状态码、访问时间段

WordPress 站还有几个额外入口

用 WordPress 搭的独立站,系统自带的几个文件会被扫描器反复敲门:

  • xmlrpc.php:老接口,常被拿来做暴力破解和放大攻击,直接封掉不影响正常使用。
  • wp-login.php:登录页,不能封,但可以改路径或加访问限制,防暴力破解。
  • wp-json:REST 接口,扫描器会拿来试漏洞,正常用不到全部功能就限流。
1
2
3
4
5
6
7
8
9
# xmlrpc.php 直接封掉
location = /xmlrpc.php {
deny all;
}

# 登录页单独限速
location = /wp-login.php {
limit_req zone=perip burst=3 nodelay;
}

另外,后台登录地址改掉。WordPress 默认 /wp-admin 和 /wp-login.php 全世界都知道,用安全插件改成自定义路径,或者只允许特定 IP 登录,能挡掉绝大部分自动化攻击。评论提交接口也要做验证或限速,否则垃圾评论机器人会刷爆数据库。WordPress 官方的 站点加固指南 里有一套通用做法,可以照着逐项排查。

WordPress 需要加固的几个入口:xmlrpc.php 直接封、wp-login.php 限速、wp-json 限流,并改掉默认后台路径

被采集之后还有一层麻烦

带宽被消耗是一层损失,内容被采集走之后,还有 SEO 上的间接影响。采集站拿到你的内容,往往几天之内就发出去,有些还会把标题改一改,正文照搬。谷歌可能会把两个页面当成相似内容处理。

风险在于时间先后。理论上谷歌会认最早的来源,但如果采集站在权重比你高的域名上发布,或者它先被爬到,结果就不一定如你所愿。所以要做几件事:

  1. 保证自己的页面有清晰的发布/修改日期,站点 sitemap 时间戳准确。
  2. 发现被采集后,通过谷歌版权投诉或联系对方删除。
  3. 最根本的是给内容做出壁垒:纯文字的百科式内容最容易被复制;带实际经验、具体操作细节、自己测试过程的内容,采集过去也失去价值。

产品价格表、参数表这类结构化数据最容易被采集,可以做成需要交互才展示,或者用图片承载核心数字。代价是图片里的文字谷歌读不到,所以只用在真正敏感的数据上。

定个检查节奏

拦爬虫不是一劳永逸。建议:

  • 每周花十分钟看服务器负载和带宽曲线,有没有异常尖峰。
  • 每月看一次访问量最高的 IP 列表,把新出现的可疑来源加进观察名单。
  • 每季度复查一次拦截规则,把已经不再出现的规则清掉。
  • 服务器资源留出三成余量,有余量时被刷一下不至于直接崩。

遇到带宽被刷爆,先别急着责怪自己网站有问题。绝大多数时候是外部扫描撞上来的。按这个顺序走一遍:看日志找源头 → 判断类型 → 能限速就限速 → 确认无误再封禁,基本能解决。

常见问题(FAQ)

把 AI 爬虫全屏蔽了,会影响 SEO 吗?
不影响传统搜索排名。Google-Extended 只控制内容是否用于 Gemini 训练和接地,与 Googlebot(搜索抓取)互不影响。但屏蔽 GPTBot、ClaudeBot 等会削弱你在 ChatGPT、Gemini 等 AI 搜索里的可见度,做 GEO 需要让它们能读到你的内容。
robots.txt 能挡住恶意爬虫吗?
挡不住。robots.txt 是“君子协定”,只对守规矩的搜索引擎和正规 AI 爬虫有效。恶意采集器、扫描器通常无视它,真正的拦截要靠 CDN、服务器限速或防火墙。
限速会不会影响谷歌正常抓取?
正常配置不会。Googlebot 的抓取频率远低于普通恶意爬虫。稳妥做法是:对整站做宽松限速,并在 CDN 或 Nginx 里给 Googlebot 的 IP 段单独放行。
小站也会被爬虫盯上吗?
会,而且小站往往是重灾区。扫描和采集是自动化的,它们不挑对象,谁没防护就吃谁。小站资源有限,被刷几下就容易崩溃。