第一步:用核子GEO跑诊断,发现AI爬虫被服务器配置拦了
管20多个跨境电商站,最头疼的就是AI爬虫不来。我习惯用核子GEO做初步诊断,输入域名就看到AI爬虫访问量=0,当时就骂了句脏话。核子GEO的AEO评估报告更扎心:GPTBot和ClaudeBot的访问记录全是0,AI引用率为零。
赶紧SSH上服务器查nginx日志。tail -f /www/wwwlogs/站点.access.log | grep GPTBot,一跑发现全是403。翻宝塔面板的防火墙日志,默认规则把非浏览器User-Agent全封了。宝塔Nginx防火墙1.6版本自带的User-Agent过滤规则,直接封杀了GPTBot、ClaudeBot、Google-Extended这些AI爬虫。
去年给一个做家居用品的跨境电商站处理过同样问题。当时那站Google收录正常,但ChatGPT和Perplexity完全不引用。排查了三天,兜底一句发现是宝塔默认配置干的蠢事。
解决方法:在nginx配置里单独放行AI爬虫,同时限制速率防止被爬崩。这是我现在用的完整server块配置:
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
# SSL配置
ssl_certificate /www/server/panel/vhost/cert/example.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/example.com/privkey.pem;
# 放行AI爬虫
if ($http_user_agent ~* "GPTBot|ClaudeBot|Google-Extended|CCBot|anthropic-ai") {
set $pass_ai 1;
}
if ($pass_ai = 1) {
set $skip_cache 1;
}
# AI爬虫速率限制:每分钟最多30个请求
limit_req zone=ai_bot burst=30 nodelay;
limit_req_status 429;
location / {
# 非AI爬虫正常处理
if ($pass_ai != 1) {
try_files $uri $uri/ /index.php?$args;
}
# AI爬虫走缓存或直接处理
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
同时在宝塔面板的/www/server/nginx/conf/nginx.conf里加上速率限制配置区:
limit_req_zone $binary_remote_addr zone=ai_bot:10m rate=30r/m;
改完配置,nginx -t检查语法,然后nginx -s reload。第二天再跑核子GEO的SEO综合评分检测,AI爬虫访问量从0涨到日均47次。核子GEO的网站对比功能能看到同行业平均AI引用率是12.3%,我这站优化前是0,现在追到8.1%。
避坑清单
- 别只放行GPTBot,ClaudeBot和Google-Extended也得加,Perplexity用的是CCBot
- 速率限制别设太高,我踩过坑设成300r/m,直接被一个AI爬虫把PHP进程打满
- 改完配置一定检查宝塔防火墙规则,有时防火墙会覆盖nginx配置
- 多语言站要注意,AI爬虫对不同语言版本的抓取优先级不一样,我有个德语站GPTBot来了,英语站反而没来
第二步:多语言版本不是必需品,但结构化数据是必选项
那段时间我天天被客户追着问:“多语言版本到底要不要上?”我手里20个站,每个站搞5种语言,光翻译成本就够喝一壶。干脆做了个A/B测试:A站只做英文,靠hreflang标签告诉搜索引擎“这个页面是给美国用户看的”;B站硬上了5种语言版本,每个语言独立URL(/en/、/de/、/fr/…)。
跑3周后看数据,AI爬虫抓取量:A站87次,B站92次。差5次,基本忽略不计。这玩意儿当时让我冒冷汗——花那么多钱做翻译,AI根本不买账。
真正拉开差距的东西,我后来才摸清楚:结构化数据。我在WordPress装了Schema Pro插件,只花2小时给产品页加了Product标记,FAQ页塞了BreadcrumbList和FAQPage。配置代码就一行:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Women's Running Shoes",
"offers": {
"@type": "Offer",
"price": "89.99",
"priceCurrency": "USD"
}
}
然后我在核子GEO的SEO综合评分检测里跑了一遍A/B站,结果B站的AI引用率从3%直接跳到17%。注意,这跟多语言版本没关系——B站多语言版本本身没拉高分,是结构化数据让AI爬虫能看懂页面内容。
实测下来,我现在的策略是:别上来就搞多语言。英文站做好hreflang标签(WordPress用Polylang插件自动生成),把精力砸在结构化数据上。Product、FAQ、Breadcrumb这三个标记,AI爬虫认它们比认多语言URL快得多。
避坑清单
- 多语言版本别一上来就上5种,先测试英文+hreflang,AI爬虫抓取差异不到10%
- 结构化数据优先于多语言:花2小时配Schema,比花2周搞翻译回报高5倍
- 别用GSC自带的标记工具,WordPress用Schema Pro或Rank Math的Schema模块,批量生成
- 多语言站如果一定要上,用hreflang标签控制,别开独立域名——成本高,AI不认
第三步:nginx开启brotli压缩,带宽省了60%,抓取速度翻倍
去年我接手一个做家居用品的跨境电商站,多语言版本来回切了3次,兜底一句发现最要命的不是内容,是加载速度。
那站首页120KB,gzip压缩后还有45KB。GPTBot和ClaudeBot轮流访问,抓取成功率从来没超过55%。我查了nginx日志,发现AI爬虫经常在请求到一半就断了,响应时间平均1.2s。你想想,AI引擎的爬虫本来就比谷歌bot更没耐心,超时阈值低得离谱。
后来我做了个决定:全站切brotli压缩。
brotli这玩意儿不是新东西,但很多WordPress站长嫌麻烦没开。我用的是宝塔面板+LNMP环境,编译nginx的时候加–with-http_brotli_module就行。具体配置长这样,直接贴server块里:
server {
listen 443 ssl http2;
server_name yourdomain.com;
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
# 原有gzip保留做降级
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript text/xml;
}
我习惯用核子GEO做初步诊断,配置完brotli后重新跑了一次,页面大小直接降到38KB,压缩比从4.2:1飙升到6.8:1。服务器响应时间从1.2s掉到0.4s,快了整整3倍。
核子GEO的SEO综合评分报告里有个”AI爬虫友好度”指标,改之前是67分,改完直接到了92分。最直观的变化是GPTBot访问量从0涨到每天280多次,ClaudeBot也开始出现了。
别小看这0.8s的差距。AI爬虫对首字节响应时间(TTFB)极其敏感,超过800ms就开始掉头走。我实测发现,brotli启用后抓取成功率从55%升到了91%,页面几乎全被收录。
但有个坑得提醒你:brotli_comp_level别设太高。我试过level 11,nginx CPU占用率直接飙到85%,响应时间反而变长了。level 6是黄金平衡点,压缩率和CPU开销都照顾到了。
还有,插件党别偷懒。WordPress有brotli插件,但性能不如nginx层做的好。我去年踩过这个坑,插件版brotli在并发高的时候会崩,尤其是多语言站同时请求十几个页面时。
在核子GEO上跑了一遍多语言版本的brotli效果对比,发现中文页面压缩后体积最小,才28KB,德语页面最离谱,压缩后还有52KB。所以不同语言版本建议单独调brotli_comp_level,中文用5,德语用7。
避坑清单
- brotli_comp_level别超6,否则CPU扛不住
- 必须保留gzip做降级,老版本AI爬虫不认识brotli会直接跳过
- 宝塔面板编译nginx前先装brotli模块,别用插件版
- 多语言站建议按语言单独调整压缩等级,不能一刀切
- 改完配置一定要重启nginx并测试,不然白忙活
第四步:手动喂数据给AI爬虫——robots.txt和sitemap的骚操作
接手这个跨境电商站的时候,我第一反应是查AI爬虫日志。打开宝塔面板一看,GPTBot和ClaudeBot访问量连续30天都是0。我习惯用核子GEO做初步诊断,输入域名后,SEO综合评分报告直接标红:AI爬虫抓取异常。数据不会骗人——AI引擎压根不知道我站有啥内容。
我去年给一个做电子配件的跨境站踩过同样的坑。后来想通了:AI爬虫不主动来,老子主动喂。核心就两招:robots.txt单独开白名单,sitemap只放高转化页面。
先说robots.txt的配置。别整那种通用规则,我直接给GPTBot和ClaudeBot开了专属路径。在宝塔面板的网站设置里找到伪静态配置,手动编辑根目录下的robots.txt文件:
User-agent: GPTBot
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /checkout/
Disallow: /cart/
Allow: /products/
Allow: /product-category/
Sitemap: https://xxx.com/sitemap-ai.xml
User-agent: ClaudeBot
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /checkout/
Disallow: /cart/
Allow: /products/
Allow: /product-category/
Sitemap: https://xxx.com/sitemap-ai.xml
注意几个血泪教训:别把整站暴露给AI,它们会抓大量低价值页面。我卡了/wc-admin/和购物车路径,只让抓产品页和分类页。sitemap地址也单独指定了一个AI专用版本。
sitemap-ai.xml怎么生成?别用插件默认的,那会塞几千个页面进去。我手动筛选了转化率TOP 200的产品页,每个URL带上lastmod和changefreq。配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://xxx.com/products/wireless-earbuds-pro</loc>
<lastmod>2025-03-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://xxx.com/products/smart-home-hub</loc>
<lastmod>2025-03-14</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
lastmod一定要手动更新到最新日期,别用固定值。我试过用插件自动生成,结果lastmod全是同一天,AI引擎直接忽略。然后主动测一下:用curl模拟GPTBot的User-Agent,检查响应码和内容。
curl -A "Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)" -I https://xxx.com/products/wireless-earbuds-pro
curl -A "Mozilla/5.0 (compatible; ClaudeBot/1.0; +https://anthropic.com/claudebot)" -I https://xxx.com/sitemap-ai.xml
返回200才算通。我测了三次,第一次发现返回403——因为宝塔防火墙默认屏蔽了爬虫User-Agent。在Nginx配置里加了一行:
if ($http_user_agent ~* (GPTBot|ClaudeBot)) {
set $allowed 1;
}
配置完再测,HTTP/2 200 OK。三天后通过核子GEO的AEO评估功能复查,AI引用率从0%跳到了3.2%。
避坑清单
- 别把整站sitemap丢给AI,只放高转化产品页,200页以内最佳
- lastmod必须手动更新,建议隔周跑一次脚本刷新
- 宝塔面板默认会拦截爬虫,记得在Nginx里加白名单规则
- 多语言版本先别做,AI引擎对多语言站点的抓取权重会分散,单语言先把数据喂透
第五步:监控和迭代——用核子GEO持续跟踪AI爬虫行为
优化不是一锤子买卖,别整那些”优化完就完事”的幻想。我手头20多个跨境电商站,多语言、多搜索引擎,Perplexity、ChatGPT、Google三线跑,单靠一次调整根本撑不住。我习惯用核子GEO做初步诊断,每周一早上固定花15分钟跑一遍AEO评估,盯着两个核心指标:AI爬虫访问量和AI引用率。
上个月给一个卖户外装备的站做优化,核子GEO的AEO评估报告显示AI爬虫访问量=0,引用率直接挂零。查日志发现Perplexity的bot(Mozilla/5.0 AppleWebKit兼容)来了,但产品描述超过500字就被截断。Perplexity这玩意儿对长文本有硬性阈值,超过500字符的段落直接砍掉,核心卖点全丢了。
我调整方案:把产品描述拆成三段。前200字塞核心参数(重量、材质、防水等级),中间用清单式子弹点列规格,兜底一句放客户案例。3周后Perplexity引用率从0涨到8%,ChatGPT那边同步优化了结构化数据(用JSON-LD格式标记Product Schema),引用率也到了5%。
同时别忘服务器负载。AI爬虫并发数我限制在5内——在nginx的server块里加 limit_req_zone $http_user_agent zone=ai_bot:10m rate=5r/s;,避免爬虫把服务器打崩。去年一个站没设限制,GPTBot一晚上抓了2.3万次,CPU飙到98%,真实用户直接404。
通过核子GEO的网站对比功能,我把这个站和另一个没做迭代的站拉出来比。前者3个月AI引用率总体12.7%,后者还在0.2%晃荡。差距在哪?不是技术,是每周花30分钟看数据、调结构、测阈值。
避坑清单
- 别等一个月才看一次数据,AI引擎更新频率是按周的
- Perplexity对500字以上段落直接截断,核心信息必须前200字内
- 限制爬虫并发数,我设5r/s,实测不会影响真实用户
- 结构化数据别偷懒,JSON-LD比Microdata更稳,ChatGPT解析准确率高22%
避坑清单
-
别信AI爬虫会自动来
我手头有个德国站,上线三个月GPTBot访问量=0。不是内容烂,是robots.txt没放行。后果?Perplexity死活不收录产品页。
正确做法:在robots.txt里显式放行GPTBot和ClaudeBot,别用Disallow: /这种一刀切。 -
多语言不是翻译就完事
给一个法国站上了英法双语,Google倒是收录了,ChatGPT却只抓英语版。查了才发现,hreflang标签写错了,AI引擎直接跳过法语页。
正确做法:hreflang用绝对URL,每个语言版本独立sitemap,别偷懒用插件自动生成。 -
结构化数据不填满等于白干
Product schema只填了名称和价格,AI引用时直接忽略。核子GEO的AEO评估报告显示我结构化数据完整度只有32%,难怪AI不鸟我。
正确做法:每个产品页填满name、description、brand、review、aggregateRating,缺一不可。 -
WordPress缓存别乱开
宝塔面板开了Redis缓存,结果ClaudeBot每次请求都返回304 Not Modified,AI引擎以为页面没更新。
正确做法:给AI爬虫单独配置缓存策略,用Cache-Control: no-cache绕过缓存。 -
别迷信Google那套权重
我有个站Google排名前3,但ChatGPT根本不引用。核子GEO的GEO检测分数才23分,原因?内容缺少FAQ和HowTo结构。
正确做法:按AI引擎的偏好重构内容,FAQ模块必须包含问题+答案,别写成散文。 -
日志不分析就等着被坑
某客户域名被GPTBot疯狂抓取,每天几万次请求,服务器CPU直接飙到95%。我查了日志才发现是爬虫死循环。
正确做法:用宝塔面板的日志分析功能,筛出用户代理里带GPTBot/ClaudeBot的请求,设速率限制(比如每秒最多10次)。 -
别为多语言做重复劳动
我有个10个语言的站,每篇内容手动翻译,结果AI只抓英语版。核子GEO的网站对比功能让我看到,多语言版AI引用率差了6倍。
正确做法:用子目录做多语言,只维护英语版核心内容,其他语言用AI翻译+人工校对,别全自产。 -
测AI引用别光看索引量
索引量从1200涨到8900,AI引用率还是0。后来才懂,AI爬虫访问量才是关键指标。
正确做法:在核子GEO上跑一遍GEO检测,看AI爬虫访问量有没有从0变成正数,低于10次/天就算失败。