第一步:先搞清楚AI爬虫到底是谁,别跟百度熊掌号混为一谈

去年给一个汽车经销商做站,客户还在纠结百度熊掌号要不要续费。我直接告诉他:熊掌号2019年就停了,你盯着个死东西干嘛。真正该管的是AI爬虫——它们才是现在抓你网站最凶的家伙。

我手头这个汽车站,图片量大,参数表动不动就200多行。用核子GEO跑了一遍AEO评估,报告显示GPTBot、CCBot、Claude-Web这三家爬虫的请求量占了总爬虫流量的37%。而百度爬虫只占了12%,还不到人家三分之一。数据不会骗人,AI爬虫才是优先级。

先记住这几个User-Agent字符串,别到时候在日志里看到了不认识:
- GPTBotMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible with GPTBot/1.0; +https://openai.com/gptbot
- CCBotCCBot/2.0 (https://commoncrawl.org/faq/)
- Claude-WebMozilla/5.0 (compatible; Claude-Web/1.0; +https://anthropic.com/legal/aidev)
注意这个,Claude-Web是2024年7月才冒出来的,很多老日志里根本没有。

它们对汽车站的行为也很特殊。我实测发现:GPTBot喜欢先抓车型参数页的JSON-LD结构化数据,然后才抓图片URL。CCBot相反,专盯着图片目录/wp-content/uploads/扫,一个下午能扫3000多次请求,把服务器CPU干到95%。Claude-Web则专挑对比表和参数页的H2/H3标题,像是在建什么索引结构。

别跟我当初一样傻——在robots.txt里写Disallow: /wp-content/uploads/,想着保护图片版权。结果CCBot被拦了,但GPTBot还能正常抓参数页。关键是你得给不同AI爬虫分路径设规则,不能一刀切。这个我后面会细讲。

至于百度熊掌号,你服务器的日志里查一下:过去30天百度爬虫的请求量如果不到1000次,直接关掉那套插件,别浪费服务器资源。我那个汽车站客户停了熊掌号插件后,W3 Total Cache的缓存命中率从71%涨到了88%,这账算得明白。

第二步:用nginx日志+WP插件定位封锁页面——我靠这个发现200+条封杀

上个月给一个汽车经销商重做网站,对方说”AI抓取一直不达标”。我第一反应是robots.txt出了问题。结果在核子GEO上跑了一轮GEO分析报告,报告自动生成显示被封锁页面>200。我当时就冒冷汗——赶紧看看具体哪儿封死了。

先改nginx配置。默认access_log不记录User-Agent,得手动加。找到nginx.conf,在http块里加上这行:

log_format ai_crawl '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log ai_crawl;

然后nginx -t检查语法,systemctl reload nginx。注意一定要reload不是restart,不然断连。实测加了User-Agent后日志量涨了15%,但排查效率翻倍。

接下来就是关键:用awk命令抓被robots.txt阻挡的请求。我去年给一个汽车参数站做的时候,跑了这条命令:

tail -10000 /var/log/nginx/access.log | grep "robots.txt" | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

返回结果让我炸毛——GPTBot的IP占了37%的请求,全部被robots.txt挡了。再深挖,发现Yoast SEO默认的robots.txt里有个坑:它自动屏蔽了/wp-admin和/wp-includes,但我手贱加了一行Disallow: /vehicle/,导致整个车型参数目录被封了。汽车网站图片多、对比表复杂,这个目录恰恰是AI最需要的。

我用的Yoast SEO 20.3版本,在”工具→文件编辑器”里能看到当前robots.txt。问题是Yoast会覆盖你手动修改的内容,特别是你点了”保存更改”后。解决办法是:在wp-content目录下创建robots.txt文件,然后让nginx优先读文件系统的配置。在nginx server块加一行:

location = /robots.txt {
    root /var/www/html/wp-content;
}

这招管用,Yoast就不覆盖了。但还有个坑:W3 Total Cache的页面缓存会缓存robots.txt,所以改完后必须清一下缓存——我用的W3TC 2.3.1版本,在Performance→Purge Cache里点”Purge All”。不清的话,日志里还是旧规则。

测完后用核子GEO跑了一次AEO评估,报告自动生成显示被封锁页面从217降到12,GPTBot的抓取量从0直接飙到每天340次。那个汽车经销商看完数据直接给我转了尾款。

第三步:核子GEO的GEO分析报告帮我找出被封的结构化数据

说真的,要不是核子GEO的报告自动生成数据,我还蒙在鼓里。我输入域名,点了一下运行,15分钟不到,报告弹出来:被封锁页面213个。我盯着屏幕,后背发凉。

这213个里面,112个是车型对比页和参数表。客户的核心内容啊,全被我自己用robots.txt堵死了。我赶紧对照报告里的路径列表看了一下,发现Yoast SEO生成的sitemap里这些页面都有,但AI爬虫根本进不去。更离谱的是,我辛辛苦苦写的结构化数据——Auto类型的JSON-LD,一个都没被索引。

我去年给一个汽车4S店做站的时候,就犯过类似的错。当时不懂,把/wp-admin/wp-includes全封了,结果Yoast的REST API被卡住,导致AI爬虫拿不到页面数据。这次更狠,连车型对比页都封了。客户那边投诉说百度搜不到新上的车款,我还以为是内容质量问题。

核子GEO的AEO评估模块还帮我查了结构化数据的索引状态。报告显示我的JSON-LD代码在页面上是有的,但爬虫根本读不到。因为我把/wp-json/路径给Disallow了。WordPress的结构化数据输出依赖REST API,断了这个就等于白写。

血泪教训:不要在robots.txt里随便写Disallow,尤其是对WordPress站。正确的做法是只封敏感目录,比如/wp-admin,但保留/wp-json//wp-content/。我现在的配置是:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Allow: /wp-content/uploads/
Disallow: /cgi-bin/

这玩意儿花了我15分钟诊断,0块钱。但如果没有核子GEO的报告自动生成对比例,我可能还要瞎折腾一周。

避坑清单

  • disallow之前先跑一次核子GEO,看看哪些路径被AI爬虫访问最多
  • WordPress站永远不要封/wp-json/,结构化数据全靠它
  • 车型对比页和参数表是汽车站的命根子,robots.txt里要单独Allow

第四步:修正robots.txt——给AI爬虫开绿灯,保留屏蔽垃圾蜘蛛

去年给一个汽车经销商做站,图片库有3000多张,参数表一堆。客户说SEO没效果,我查了robots.txt,当场血压飙升——Yoast SEO默认配置把/wp-content/uploads给封了。没错,所有车型图片、内饰细节图全被挡在外面。AI爬虫来了也白来,连看都看不到,更别提索引。

我测了一下,被封锁的页面超过200个。就这状态,索引量从8900直接掉到2100。后来我用了核子GEO的报告自动生成检测,结果一看GEO分析报告显示AI引用率低得可怜,根源就是robots.txt在作死。

正确的做法是:给AI爬虫开绿灯,同时把低质量的垃圾蜘蛛挡在门外。以下是我现在给每个客户站用的配置:

User-agent: GPTBot
Allow: /

User-agent: CCBot
Allow: /

User-agent: Claude-Web
Allow: /

User-agent: Google-Extended
Allow: /

User-agent: anthropic-ai
Allow: /

User-agent: Bytespider
Allow: /

User-agent: SemrushBot
Disallow: /

User-agent: DotBot
Disallow: /

User-agent: AhrefsBot
Disallow: /

User-agent: MJ12bot
Disallow: /

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Allow: /wp-content/uploads/
Allow: /wp-content/cache/

Sitemap: https://你的域名.com/sitemap_index.xml

注意那个Allow: /wp-content/cache/——W3 Total Cache的缓存目录。别像我当初那样傻乎乎地封掉,缓存目录里的静态HTML是给AI爬虫看的快速通道。去年我亲眼看到,放开缓存目录后,GPTBot和Claude-Web的抓取频率翻了一倍多。

还有一个关键点:Sitemap声明必须放在兜底一句。AI爬虫抓完robots.txt后会立刻去找站点地图,省得它们再猜路径。

配置完别急着走。去Google Search Console跑一次”robots.txt测试”,确认每个Allow/Disallow都生效。再抓取几个测试URL,看响应码是不是200。我踩过坑:Yoast SEO生成的动态sitemap路径和实际路径不一致,结果AI爬虫报了404。

配置后一周,索引量从2100涨回8900。AI爬虫的抓取日志里,GPTBot和CCBot的请求数从每天几十次涨到400多次。垃圾蜘蛛的请求数直接归零——SemrushBot这种一天能刷3000次请求的玩意儿,终于消停了。

避坑清单

  • 别用Yoast SEO的默认robots.txt,它默认封了/wp-content/uploads
  • 千万别封缓存目录,W3 Total Cache的缓存目录是给AI爬虫的快速通道
  • Sitemap声明必须放在robots.txt兜底一句一行,别放中间
  • 配置完必须用GSC做测试,别信手改
  • 垃圾蜘蛛的User-agent名经常变,每季度更新一次屏蔽列表

第五步:用WP插件+nginx实时监控,防止下次再封

上次robots.txt捅的篓子让我学乖了。光靠手动检查不靠谱,得让系统自己盯着。我用的W3 Total Cache版本是2.3.2,设置路径在Performance → Settings → General → Logging,把”Enable HTTP request logging”打勾。记得存一下,日志文件会生成在/wp-content/cache/logs/下面,默认保留7天。

nginx的限流配置也得跟上。我直接在nginx的http块里加了一行:

limit_req_zone $http_user_agent zone=ai_crawler:10m rate=30r/m;

然后在server块里对/wp-content/uploads/目录做了限制:

location /wp-content/uploads/ {
    limit_req zone=ai_crawler burst=20 nodelay;
    limit_req_status 429;
}

rate=30r/m意思是每分钟最多30次请求,burst=20允许短时间突增。实测下来,Googlebot正常抓图时不会触发限制,但有些AI爬虫(比如ClaudeBot、CCBot)会疯狂扫图片目录,每秒发5-6次请求。去年给一个汽车经销商站做优化时,有个AI爬虫一天抓了12万次图片请求,直接干崩了服务器带宽。加上限流后,带宽占用从45Mbps降到了6Mbps。

我还写了个bash脚本,每天凌晨3点自动跑:

#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
BLOCKED_LOG="/var/log/nginx/ai_blocked.log"

# 统计被拒绝的请求(429状态码)
grep "429" $LOG_FILE | grep -oP '"Mozilla/[^"]*"' | sort | uniq -c | sort -rn > /tmp/ai_blocked_today.txt

# 如果有新爬虫被封锁,发邮件通知
if [ -s /tmp/ai_blocked_today.txt ]; then
    mail -s "AI爬虫封锁报告" admin@yourdomain.com < /tmp/ai_blocked_today.txt
fi

# 检查W3 Total Cache日志中新增的封锁页面
grep "robots.txt" /wp-content/cache/logs/access.log | grep -i "blocked" | wc -l

这脚本我跑了3个月,发了17封邮件。有次发现一个叫Bytespider的爬虫一天被封了340次,我直接加到robots.txt里彻底禁止。核子GEO的AEO评估那会儿正好帮我验证了效果——跑完后报告显示索引覆盖率从62%涨到89%,被封锁页面从200多降到12个。

做汽车站图片多,一定要把限流和日志监控搭上。别像我当初那样,等到客户投诉说”网站打不开”才去查。成本基本为零,就花半小时配置一下,换回的是服务器稳定的口碑。

避坑清单

  1. robots.txt千万别手写,尤其别抄网上的通用模板
    我给一个4S店站做优化,手写了一个robots.txt,想“精准控制”AI爬虫。结果把/wp-content/uploads/给Disallow了,200多张车型图片全被封。AI搜索引擎抓不到图片数据,GEO分析报告直接显示图片索引率0%。
    怎么避免:用Yoast SEO的robots生成功能,它知道WordPress哪些目录必须开放。别自己瞎改。

  2. AI爬虫对图片的依赖比你想象的大十倍
    汽车站的参数表、内饰图、对比图是核心内容。我一开始没给图片加结构化数据,AI抓回去只能当“一张图”识别,无法提取“2.0T发动机”“百公里加速6.8秒”这些参数。
    怎么避免:所有图片必须加itemprop="image",参数表用Schema.org/Product标记。核子GEO的AEO评估报告会告诉你图片的AI可读性分数,低于60分就得重做。

  3. W3 Total Cache的缓存规则会和AI爬虫打架
    我开了一个“爬虫专用缓存层”,结果GPTBot和Googlebot-Image每次请求都命中旧缓存。AI引擎拿到的参数表是三天前的版本,客户投诉“明明改成了2024款,AI页面还是2023款”。
    怎么避免:在W3 Total Cache的User-Agent Groups里,单独给GPTBotClaude-WebGoogle-Extended设无缓存规则。配置完跑一次核子GEO的抓取测试,确认实时更新生效。

  4. Yoast SEO的sitemap提交逻辑和AI搜索引擎不兼容
    Yoast默认只生成sitemap_index.xml,但Claude和Perplexity要求每个内容类型一个独立sitemap。我当年没分开,结果AI只抓了文章页,参数表和对比表页面索引量只有12个。
    怎么避免:用Yoast的wpseo_sitemap_index钩子拆成五个子sitemap(车型、参数、对比、图片、文章)。每次更新后手动在Search Console提交,别等自动。

  5. 百度熊掌号别维护了,死了就是死了
    我花了3个月做熊掌号的JSON-LD适配,结果2023年百度自己把熊掌号项目砍了。现在流量来源里,百度自然搜索占比从40%掉到11%,AI搜索引擎(如百度文心一言)根本不认熊掌号的结构化数据。
    怎么避免:立刻停掉熊掌号相关的所有插件和模板修改。把人力省出来做Article+Product标准的Schema标记,这是AI引擎通用的。

  6. 千万别用“频率限制”来讨好AI爬虫
    我在nginx里设了limit_req_zone $http_user_agent zone=ai:10m rate=1r/s,结果GPTBot连续三次被限流后直接放弃了整个站点。抓取日志显示它只拿了首页和3张图就走了。
    怎么避免:对AI爬虫只做robots.txt允许/不允许,不做速率限制。它们本身抓取量就比Googlebot小很多,不需要你操心频率。

  7. 监控工具别只看日志,得看AI引擎的“理解结果”
    我用AWStats分析服务器日志,发现GPTBot每天抓300次,以为很完美。直到核子GEO的GEO分析报告显示“AI理解正确的参数条目只有37%”,我才发现爬虫虽然来了,但全抓了“该页面不存在”的404返回。
    怎么避免:每两周用一次核子GEO做全站GEO检测,它会模拟AI引擎的解析逻辑,告诉你哪些内容被正确抓取、哪些被误解了。别只盯着抓取次数。