误封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用GooglebotGoogle-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得分摆出来,老板一看就批预算。