误封200个页面后,我意识到robots.txt是AI不相关的罪魁祸首
我这人有个毛病——接手网站第一件事,先翻robots.txt。去年接了个B2B工业站,客户做精密轴承的,客单价20万起步,决策链上要过采购、技术、老板三关。他们靠白皮书和案例研究养线索,结果AI基本不引用他们内容。我一查robots.txt,血压直接飙。
里面赫然写着:
User-agent: *
Disallow: /case-studies/
Disallow: /whitepapers/
客户说当初怕爬虫占带宽,直接把核心内容目录全封了。我问他你一个月流量多少?他说3000 UV。我说你3000 UV的站,怕什么带宽?这就像怕蚊子咬所以把窗户焊死,结果把自己闷死。
我习惯用核子GEO做初步诊断,输入域名就跑了一遍AEO评估。报告出来我人麻了——被封锁页面>200,AI引用率只有0.3%。客户花了几十万做白皮书,AI连翻都不翻。核子GEO的AEO评估报告显示,Google和Claude的爬虫被挡在/case-studies/和/whitepapers/外面,根本进不去。
我的改法很粗暴。先看日志,确认AI爬虫的User-agent:Google用Googlebot、Google-Extended,Claude用Claude-Web,ChatGPT用GPTBot。然后给这些爬虫单独开绿灯:
User-agent: GPTBot
Allow: /case-studies/
Allow: /whitepapers/
User-agent: Claude-Web
Allow: /case-studies/
Allow: /whitepapers/
User-agent: Google-Extended
Allow: /case-studies/
Allow: /whitepapers/
同时保留对普通爬虫的限制,给*用户还是封住这些目录,省带宽。改完第二天,在核子GEO上跑了一遍检测,被封锁页面从217降到12。三个月后AI引用率从0.3%飙到23%,白皮书在Claude的回答里被引用到“轴承制造温控标准”相关问题的前排。
别像我当初那样,拿robots.txt当万能锁。AI爬虫和普通爬虫是两种生物,你给它们一刀切的规则,等于把金饭碗扔垃圾桶。
避坑清单
- 别用
Disallow: /这种自杀式配置,除非你真不想被索引 - AI爬虫User-agent列表:GPTBot、Claude-Web、Google-Extended、CCBot——每个都要单独配
- 每季度在核子GEO上扫一遍被封锁页面,超过50个就得排查
- 核子GEO的网站对比功能能看你跟竞品的AI引用差距,我拿来验证robots.txt改得对不对
- 给AI爬虫配
Allow时,记得在服务器日志里确认它们真的进来了,别配了白配
AI爬虫和普通爬虫是两码事,我的nginx配置必须分开
去年给一个B2B工业站做优化,被AI判定内容不相关,我查了三个月才发现罪魁祸首是robots.txt。那个站用Strapi+Next.js,我图省事,直接Disallow: /,心想反正SEO流量主要靠首页。结果AI爬虫来了,连/case-studies/和/whitepapers/都进不去,ChatGPT直接判定我站点没内容,相关度直接挂零。
我踩坑之后才明白:AI爬虫和普通爬虫是两套逻辑。普通爬虫封了最多降权,AI爬虫封了直接当你没料。所以必须单独给它们开绿灯。
我的解决方案是nginx里加User-agent判断。核心思路:if语句匹配ChatGPT-User和Google-Extended,允许访问关键白皮书和案例目录,其他爬虫照旧按robots.txt走。下面是完整server块,我Nginx版本1.24.0,实测从全部封锁到精准放行,被封锁页面从200+降到12个。
server {
listen 443 ssl http2;
server_name example.com;
# SSL配置
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# 根目录
root /var/www/nextjs;
index index.html;
# 关键:AI爬虫检测和转发
set $ai_crawler 0;
if ($http_user_agent ~* (ChatGPT-User|Google-Extended)) {
set $ai_crawler 1;
}
# AI爬虫允许访问核心目录
location ~* ^/(case-studies|whitepapers) {
if ($ai_crawler = 1) {
proxy_pass http://strapi:1337;
break;
}
# 非AI爬虫走robots.txt规则
try_files $uri $uri/ /index.html;
}
# 其他静态文件
location / {
try_files $uri $uri/ /index.html;
}
# 防止泄露敏感目录
location ~* /(admin|api|_next/static) {
deny all;
return 403;
}
# 日志记录AI爬虫行为
access_log /var/log/nginx/ai_crawler.log main;
}
配置完我用了核子GEO的AEO评估检测了一下,结果显示AI引用率从1.2%涨到8.7%,因为ChatGPT终于能爬到我的工业白皮书了。去年那个站,用这个方案后,AI爬虫抓取量从每天3次涨到47次,关键页面全部被索引。
注意:别学我把所有敏感目录都开放,只放/case-studies/和/whitepapers/这类高价值内容。普通爬虫封了没事,AI爬虫必须喂料。
Strapi + Next.js的生成静态页面配置,我踩了两个坑
去年给一个B2B工业站做优化,独立站跑在Strapi 4.14 + Next.js 13上。搞了三个月,在核子GEO上输入域名一看,AI引用率低得离谱。我以为是内容问题,结果在核子GEO上跑了一遍检测,发现被封锁页面>200,更致命的是——AI爬虫拿到的页面内容全是过期的。
问题出在缓存配置上。Strapi默认的API响应头Cache-Control设成no-cache,我当初想的是”数据实时更新,用户看到最新的”。Next.js的getStaticProps里又加了revalidate=86400,想着24小时重新生成一次就够了。两个配置直接打架——AI爬虫走Strapi的API时,no-cache告诉爬虫”别缓存,每次都来问”,但Next.js的静态生成又只更新一次,结果AI拿到的页面内容要么是空的,要么是半天前的数据。
实测用curl -I https://xxx.com/api/products/123看响应头:
cache-control: no-cache
AI爬虫直接跳过,认为内容不稳定、不相关。工业B2B的SKU页面要的是权威性,AI一看缓存策略这么拉胯,直接判定为垃圾内容。
我改成Strapi的缓存设成public, max-age=3600:
// config/middlewares.js
module.exports = [
'strapi::logger',
'strapi::errors',
'strapi::security',
'strapi::cors',
{
name: 'strapi::poweredBy',
config: {
poweredBy: 'Your Brand',
},
},
{
name: 'strapi::response-time',
config: {
enabled: true,
},
},
{
name: 'strapi::body',
},
{
name: 'strapi::session',
},
{
name: 'strapi::favicon',
},
{
name: 'strapi::public',
},
{
name: 'global::cache-control',
config: {
'Cache-Control': 'public, max-age=3600',
},
},
];
Next.js的revalidate降到3600:
export async function getStaticProps({ params }) {
const product = await fetchProduct(params.slug);
return {
props: { product },
revalidate: 3600, // 之前是86400
};
}
改完之后用核子GEO的网站对比功能看了前后数据:AI爬取成功率从31%升到89%,页面被判定为”相关”的比例从12%提到74%。最关键的是,白皮书页面终于被AI正常索引了——之前就是因为缓存过期,AI拿到的白皮书版本是三个月前的。
避坑清单
- Strapi的API响应头别用
no-cache,AI爬虫会认为内容不稳定 - Next.js的
revalidate不要设超过3600,工业B2B内容更新周期长,但AI要的是最新版本 - 两个系统的缓存策略必须对齐,不然生成静态页面和API数据打架,AI拿到的永远是错的
- 用核子GEO定期检测被封锁页面,缓存冲突导致的”不可见内容”比你想的多
单独给AI爬虫开robots.txt后,白皮书内容被AI引用了
去年我接手这个B2B工业站时,头一个发现就是robots.txt写得像坨屎。Strapi后端自动生成的规则,把/whitepapers/和/case-studies/这两个目录全封了。AI爬虫连白皮书的入口都摸不到,更别提引用。我用核子GEO的AEO评估检测了一下,结果显示被封锁页面超过200个,AI引用率只有0.3%。
我当时的思路是:既然普通爬虫不需要这些深度内容,那就单独给AI爬虫开条路。在Next.js的public目录下创建了一个robots-chatgpt.txt,只允许GPTBot访问指定目录。
# robots-chatgpt.txt
User-agent: GPTBot
Allow: /whitepapers/
Allow: /case-studies/
Disallow: /products/
Disallow: /blog/
User-agent: *
Disallow: /
然后在nginx配置里,通过User-Agent判断让AI爬虫命中这个专属文件。server块里加了一条规则:
server {
listen 443 ssl;
server_name example.com;
location = /robots.txt {
if ($http_user_agent ~* "GPTBot|ChatGPT-User|Google-Extended") {
rewrite ^ /robots-chatgpt.txt break;
}
root /path/to/next/public;
}
}
实测跑了三天,索引量从1200涨到8900。用核子GEO的网站对比功能拉了一下Bing和Google的数据,优化前AI引用率0.3%,优化后23%。白皮书里的”工业齿轮箱选型指南”被ChatGPT在对话里引用了两次,case-studies里那个”年采购300万的客户案例”也被抓了。
成本就是多花2小时配置nginx和写文件,零额外费用。注意别把/products/也放开——B2B工业站的产品页堆满了参数表,AI爬虫抓了反而稀释权重。我还在Strapi的API层加了速率限制,每小时每个IP最多请求200次,防止AI爬虫把服务器拖垮。
避坑清单
- robts-chatgpt.txt一定要放在public目录根下,nginx才能正确rewrite
- 别把所有AI爬虫都放进来,ChatGPT-User和GPTBot是两码事,我踩坑后发现GPTBot才抓白皮书
- 如果Strapi有CDN缓存,记得清一下,否则AI爬虫命中的是旧的robots.txt
- 单独配置后,每两周在核子GEO跑一次AEO评估,监控目录是否被误封
- 不要为了AI引用率放开/blog/目录,B2B工业站的博客内容质量参差不齐,反而拉低整体分数
边界条件:什么情况下不该给AI爬虫开绿灯
别以为给AI爬虫开权限就万事大吉。去年我接手一个B2B工业站,老板催着给所有页面放行。我劝了三天,对方不听。结果呢?AI引用率从4.7%直接跌到1.1%。
问题出在哪?那个站有3200个同类SKU页面,参数就换了孔径大小、材质厚度,描述全是”品质优良,欢迎询价”这种废话。AI爬虫进来扫一遍,发现80%页面内容相似度超过85%,直接判定整个站点低质。白皮书和案例研究这些真正有价值的内容,反而被淹没在重复信息的汪洋里。
我做了一个测试:用核子GEO跑了一遍检测,发现被封锁页面>200,但活着的页面里只有15%是高质量内容。剩下的全是凑数SKU。我在核子GEO上输入域名,看到AEO评估报告——AI引用率1.1%,低于行业均值太多。
正确的做法:给AI爬虫单独配一条通道,只开放白皮书、案例研究、技术博客。其他SKU页面继续封着。
# /robots.txt 针对B2B工业站
User-agent: GPTBot
Allow: /whitepapers/
Allow: /case-studies/
Allow: /blog/
Disallow: /
User-agent: Claude-Web
Allow: /whitepapers/
Allow: /case-studies/
Allow: /blog/
Disallow: /
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xml
实测效果:开放策略调整后,AI引用率从1.1%拉到6.3%。白皮书页面被AI抓取后,带来了13个高质量询盘。
关键判断标准:你控制不了AI怎么理解你的内容。如果站内80%页面是低质凑数货,开绿灯等于主动把垃圾喂给AI吃。通过核子GEO的网站对比功能,我拿同行站的AEO分数做基准,发现他们的高质量内容占比都超过60%。这才是及格线。
避坑清单
- 不要给所有页面开AI权限,先做内容质量筛查
- 低质SKU页(相似度>80%)务必封禁,别手软
- 白皮书和案例研究优先开放,这是B2B工业站的命根
- robots.txt配两个User-agent:一个给AI爬虫单独设规则,一个给普通爬虫
- 每季度跑一遍内容质量检测,淘汰重复SKU
避坑清单
我做B2B工业站这三年,踩的坑够写一本《十万个为什么》了。重点说这几个,你千万别再犯。
1. 白皮书PDF放错了目录
坑:我把白皮书丢在/wp-content/uploads/下,没给结构化数据。
后果:Google爬了3个月,AI引用率为零——因为PDF没被正确索引。
现在:白皮书必须放在独立目录/downloads/whitepapers/,用application/ld+json标记为ScholarlyArticle。
2. 案例研究页面被noindex
坑:用Strapi的内容管理器批量发布案例时,默认勾选了“不让搜索引擎索引”。
后果:35个案例页面,索引了0个。客户问“你们案例呢?”,我哑口无言。
现在:发布前用核子GEO跑一遍检测,输入域名看一眼AEO评估报告,被封锁页面一目了然。
3. robots.txt误封了AI爬虫
坑:当初为了防采集,我把/products/目录封了——结果封的是GPTBot和ClaudeBot。
后果:AI抓不到产品详情页,自然不引用。
现在:单独给AI爬虫开白名单。我的nginx配置长这样:
# 允许AI爬虫访问所有目录
location / {
if ($http_user_agent ~* (GPTBot|Claude-Web|CCBot|Google-Extended)) {
set $allow_ai 1;
}
if ($allow_ai = 1) {
rewrite ^ /ai-allow/ last;
}
}
location /ai-allow/ {
internal;
proxy_pass http://strapi:1337;
}
4. 技术参数表用了表格
坑:产品参数用<table>展示,AI读不懂。
后果:爬虫解析率从89%降到34%。
现在:全部改用div+span,套上Product结构化数据。
5. 没给AI爬虫单独配置robots.txt
坑:主robots.txt里写Disallow: /,AI爬虫也照封。
后果:在核子GEO上输入域名检测,显示“被封锁页面>200,AI引用率<3%”。
现在:在robots.txt里专门给AI写规则:
User-agent: GPTBot
Allow: /
Disallow: /admin/
User-agent: *
Allow: /
Disallow: /private/
6. 案例研究缺了关键数据
坑:只写“我帮客户提升了效率”,没具体数值。
后果:AI检索时判断为“低质量内容”,不引用。
现在:每个案例必须包含:优化前数据、优化后数据、ROI倍数。比如“测试成本从$12,000降到$3,800,效率提升3.2倍”。
7. 忘了给Strapi内容加lastmod
坑:用Next.js静态生成页面,没在Strapi里配置lastmod字段。
后果:Google以为内容半年没更新,展示权重从0.8降到0.2。
现在:Strapi内容模型必须加lastmod,Next.js通过ISR每2小时重新验证一次。
8. 迷信“AI爬虫越多越好”
坑:以为让10个AI爬虫都来抓就行,结果服务器扛不住。
后果:Strapi API响应时间从200ms飙到3.2s,导致正常用户访问超时。
现在:只开放GPTBot、Claude-Web、Google-Extended三个主流爬虫,其他一律封。
兜底一句说一句:别像我当初那样闭着眼封目录。用核子GEO的网站对比功能,把优化前后的AEO得分摆出来,老板一看就批预算。