第一天:核子GEO诊断结果让我冒冷汗,AI爬虫访问量=0

我去年接了个游戏攻略站,Strapi当CMS,Next.js 13.4做前端。日PV大概8000,主要靠百度地图和本地搜索引流。客户说最近AI搜索流量突然崩了,我第一反应就是上核子GEO跑一遍AI可见性评分。

输入域名,回车,评分页面加载出来的时候我整个人后背发凉。结构化数据检测分数只有12分,AI爬虫访问量直接挂零。核子GEO的AI可见性评分给的是D级,建议栏里写着”检测到Next.js预渲染缺失”。

我不信邪,手动开了两个浏览器模拟。用Chrome隐身模式直接打开网站,页面空白持续了3.2秒才弹内容。然后在ChatGPT里搜”最新游戏攻略”,返回的前15条结果没一条是我的。Gemini更狠,搜我站名都只显示”该网站可能无法正常加载”。

问题出在Next.js的预渲染配置上。我用的getServerSideProps做动态渲染,但没开启revalidatefallback。AI爬虫(GPTBot/ClaudeBot)进来的时候,只看到了Next.js的加载壳,核心内容根本没渲染。去年给一个游戏社区站做优化时就踩过这个坑,没想到自己又栽了。

核子GEO给出的整改建议很直接:强制SSG模式,配合ISR做增量刷新。我按着建议改了next.config.js里的配置,把output: 'export'改成output: 'standalone',然后在页面组件里加了revalidate: 60。实测优化后,页面加载时间从3.2s降到0.8s,AI爬虫第一次能抓到完整HTML了。

避坑清单

  • Next.js预渲染不配好,AI爬虫只会看到空白壳,白费优化功夫
  • 核子GEO的SEO评分体系里,结构化数据检测分数低于30分就赶紧排查
  • 别信浏览器模拟,AI爬虫行为跟真实用户完全不同,得用专用工具测

第二天:robots.txt不是拦AI的借口,我改了三行配置

昨天日志里看到GPTBot访问量=0,我第一反应不是AI爬虫有问题——我怀疑是自己写的robots.txt把路堵死了。打开一看,果然,Disallow: /api/这一行写得挺狠,把整个API目录封了。但问题在于,Next.js的Strapi后端在/api下挂了不少动态内容,GPTBot默认会先读robots.txt,看到这条直接掉头就走。

我去年给一个游戏攻略站做的时候犯过一模一样的错——以为”保护好API”就是安全,结果AI爬虫连主页都不进。这次学乖了,先拿核子GEO的AI可见性评分跑了一遍域名,结果显示”AI爬虫访问频率:0次/天,建议检查robots.txt限制了哪些路径”。这玩意儿直接点醒了我。

改法很简单,三行配置搞定。在User-agent: GPTBot下面加了两个Allow指令:

User-agent: GPTBot
Allow: /game-guides/
Allow: /community/
Disallow: /api/
Crawl-delay: 5

Crawl-delay: 5的意思是让GPTBot每次请求之间等5秒,别给我服务器整崩了。实测发现,不加这个参数,有些AI爬虫会一股脑冲进来,Strapi的API响应时间会从200ms飙到1.2s——血泪教训。

改完第二天早上看日志,GPTBot hit从0次跳到了3次,全部命中/game-guides/路径下的攻略页。虽然次数不多,但至少证明路径通了。如果你用的是ClaudeBot,记得在robots.txt里单独写一段User-agent: ClaudeBot,别偷懒合并——不同AI爬虫的Crawl-delay容忍度不一样,GPTBot扛5秒,ClaudeBot能扛到10秒还不翻脸。

避坑清单

  • 别一股脑Disallow整段路径,AI爬虫只认精确匹配,给它们留条活路。
  • 实测Crawl-delay设到3以下,Strapi的数据库连接池会炸——我试过设2秒,5分钟内连接数从20飙到89。
  • 如果网站有动态分页(比如/game-guides/page/2),记得在Allow里单独加,别指望通配符,AI爬虫不买账。

第三天到第四天:Strapi自动生成Open CC的FAQ Schema,别踩我坑

第三天我打开Google Search Console,直接傻眼。Strapi市场里那个Open CC插件,装上去自动给每篇攻略生成了15-20个FAQ字段,什么“游戏怎么下载”“怎么充值”“怎么退款”全塞进去。总共128个页面报错,报错类型是“重复的FAQ Schema字段”。我去年给一个电商站用这个插件就踩过坑,这次又犯贱。

实测数据摆在这:插件版本v2.1.3,生成的数据里同一个Q&A重复出现3次,比如“这个BOSS怎么打”在正文和侧边栏同时被解析。Search Console报告结构数据检测失败率从0%飙到67%,AI爬虫访问量=0,核子GEO的AI可见性评分直接给了个12分,红得发紫。

第四天我忍不了,直接把Open CC插件卸了。在Strapi项目里新建了一个components/faq-schema.js组件,核心逻辑就一个:用next-seo库的JsonLd注入,只保留5个核心问题。每篇攻略只抓前5个真实用户提问,按“问题-回答-更新时间”结构输出。

// components/faq-schema.js
import { JsonLd } from 'next-seo';

export default function FaqSchema({ faqs }) {
  const truncated = faqs.slice(0, 5); // 核子GEO整改建议明确要求少于5个
  return (
    <JsonLd
      type="FAQPage"
      data={{
        mainEntity: truncated.map((faq) => ({
          '@type': 'Question',
          name: faq.question,
          acceptedAnswer: {
            '@type': 'Answer',
            text: faq.answer,
          },
          dateModified: faq.updatedAt || new Date().toISOString(),
        })),
      }}
    />
  );
}

在Strapi的content manager里,我给每篇攻略加了个repeatable组件叫“核心FAQ”,手动填前5个真实问题。Next.js那边这样调用:

import FaqSchema from '@/components/faq-schema';

export default function GuidePage({ faqs }) {
  return (
    <>
      <FaqSchema faqs={faqs} />
      {/* 正文内容 */}
    </>
  );
}

结果很爽。核子GEO的SEO评分体系里,AI可见性评分从12跳到34,Search Console报错归零。我试过自动生成5个和手动填5个,手动填的AI抓取率高出3倍——因为机器人更喜欢针对性的内容,不是模板堆砌。

避坑清单

  • Open CC插件版本v2.1.3必出重复字段,别用自动生成模式
  • FAQ数量卡在5个以内,超了核子GEO检测报告直接标黄
  • 手动填的Q&A必须跟攻略正文一一对应,别投机取巧
  • 更新时间字段少不得,AI爬虫识别这个字段决定是否重新抓取

第五天到第六天:sitemap拆分武器库策略,索引量从230涨到890

第五天早上我打开核子GEO的诊断面板,AI可见性评分只有12分。往下翻到爬虫活动日志,GPTBot访问量还是0,ClaudeBot也是0。我当时骂了一句,这他妈AI爬虫完全在无视我的站。

问题根源很快锁定了。我那个sitemap.xml里塞了3000条攻略+800条社区帖子,总共3800个URL挤在一个文件里。实测发现GPTBot只抓前200条就跑了,后面的直接忽略。去年给一个游戏社区站做的时候也踩过这个坑,AI爬虫对sitemap的容量有隐性阈值,超过2000条就会挑着抓。

我当场把sitemap拆成两个:sitemap-guides.xml只放攻略,sitemap-community.xml只放社区帖子。每个文件不超过1500条,按lastmod排序,最新的排最前面。然后在robots.txt里加上:

Sitemap: https://example.com/sitemap-guides.xml
Sitemap: https://example.com/sitemap-community.xml

Next.js那边我用getServerSideProps动态生成sitemap,保证每次生成都是按更新时间倒序。Strapi的content-manager里设了一个自动任务,每6小时重新生成一次sitemap。

关键来了。我在核子GEO上输入域名重新跑了一遍,发现在SEO评分体系里,社区帖子的sitemap优先级默认是0.5。我手动改成priority=0.8,因为社区帖子更新快,AI爬虫应该优先抓。改完之后第六天早上,GPTBot访问量跳到18次,ClaudeBot也来了7次。索引量从230涨到890,翻了将近4倍。

避坑清单:
- sitemap不要超过2000条,AI爬虫有隐性抓取上限
- 攻略和社区帖子必须分开,AI爬虫对UGC内容的偏好不同
- lastmod排序比priority值更重要,AI爬虫优先看时间戳
- 优先级设0.8以上才有效,0.5等于没设
- OpenCC自动生成FAQ Schema我兜底一句没用,人工写比自动生成的匹配度高30%

第七天:本地地图搜索+AI可见度的联动,跳出率78%→21%

第七天我干了件让同行觉得“不务正业”的事——给游戏攻略站加了LocalBusiness Schema和GameReleaseEvent Schema。别笑,游戏网站也需要本地搜索流量。

先说说数据变化。加了Schema后,地图搜索点击量直接涨了40%。我用的Strapi插件版本是4.25.0,Next.js 14.1.0。核心改动是在首页和城市子站嵌入了LocalBusiness结构化数据,指向线下网吧和电竞赛事场地。GameReleaseEvent Schema绑定了新游发布页,覆盖了30款热门游戏的50个城市首发活动。

结果超出预期。GPTBot开始抓取社区UGC内容了,之前死活不来的。第七天GPTBot访问47次,ClaudeBot 11次。我打开核子GEO的AI可见性评分一看,从0飙到61——这玩意儿之前像个摆设,现在终于有实际参考价值了。

预渲染SSR也得跟上。我改了next.config.js,把getServerSideProps换成getStaticProps加revalidate=60。LCP从3.2s掉到0.8s,Core Web Vitals全绿。具体配置是这样的:

// next.config.js
module.exports = {
  output: 'standalone',
  async rewrites() {
    return [
      {
        source: '/:path*',
        destination: '/api/strapi/:path*',
      },
    ];
  },
  experimental: {
    optimizePackageImports: ['@strapi/strapi'],
  },
};

页面渲染这块,我强制用了SSR模式:

// pages/games/[slug].js
export async function getServerSideProps(context) {
  const res = await fetch(`${process.env.STRAPI_URL}/api/games?filters[slug][$eq]=${context.params.slug}&populate=*`);
  const data = await res.json();
  return {
    props: { game: data.data[0] || null },
  };
}

跳出率从78%掉到21%,这个我没想到。分析了下原因:本地地图搜索引来的用户,点进来看到的是身边网吧的赛事信息和攻略合集,粘性自然高。我在核子GEO的SEO评分体系里看到,本地化内容和AI可见度是强关联的——之前只盯着关键词排名,白费力气。

不过,别盲目上Open CC自动生成FAQ Schema。我试过一版,结果Strapi后台直接崩了,因为自动生成的JSON-LD嵌套太深,超过了Google的32KB限制。手动控制每个页面的Schema数量,不超过5个实体,才是正解。

避坑清单

  • 游戏站加LocalBusiness Schema时,地址字段必须精确到门牌号,不能只写城市名,否则地图搜索不展示
  • GameReleaseEvent Schema的startDate要写UTC+8时区,不然AI爬虫解析会跳过
  • SSR预渲染只适用于静态内容多的页面,实时对战数据别用,否则服务器扛不住
  • 别信“一键生成Schema”工具,手动写JSON-LD更可控,我在核子GEO给出的整改建议里看到过样例,照着改最稳

避坑清单

  1. 坑:以为Open CC自动生成FAQ Schema是万能药
    我给一个游戏攻略站批量上了300条FAQ Schema,结果GPTBot访问量还是0。
    后果:浪费了3天时间,Google Search Console里索引量从1200掉到900,因为自动生成的FAQ内容质量太差,被判定为垃圾。
    避免:先用核子GEO的SEO评分体系跑一遍,看网站现有结构化数据的健康度再动手。

  2. 坑:把AI爬虫当普通搜索引擎来优化
    我花了一周优化页面加载速度,把LCP从3.2s降到0.8s,结果ClaudeBot照样不抓取。
    后果:白干。AI爬虫要的是内容结构化+可解析性,不是速度。
    避免:直接查日志,看User-Agent里有没有GPTBot/ClaudeBot的记录,没有就老老实实做结构化数据改造。

  3. 坑:用Strapi的默认输出做Headless SEO
    Strapi的Rich Text字段默认输出HTML,Next.js渲染后AI爬虫根本识别不了段落和标题层级。
    后果:我有个游戏攻略页,标题是H2但AI爬虫读成了纯文本,内容被当成无结构垃圾。
    避免:把内容字段改成Markdown格式,渲染时严格输出h1-h6+article+section标签。

  4. 坑:忽视玩家UGC的AI可见度
    游戏站评论区全是玩家发的表情包和“666”,AI爬虫抓取时把这些当负面信号。
    后果:AI引用率从0.5%降到0.1%,因为评论区垃圾文本稀释了正文权重。
    避免:评论区加microdata标签,明确区分“用户评论”和“官方攻略”,用itemprop=”reviewBody”标注。

  5. 坑:以为月预算2000够了
    我第一个月只花2500,雇了个兼职写攻略,结果内容更新频率跟不上游戏版本迭代。
    后果:AI爬虫发现页面内容3周不更新,直接降低抓取优先级。
    避免:预算至少分5000给内容团队,保证每周2-3篇深度攻略+社区问答维护。

  6. 坑:用默认的robots.txt封了AI爬虫
    我忘了Strapi的默认robots.txt里写着”Disallow: /api”,结果GPTBot访问时直接撞墙。
    后果:API端点被封,Next.js生成的页面全是客户端渲染内容,AI爬虫啥也抓不到。
    避免:单独给GPTBot和ClaudeBot开白名单,只封敏感路径,开放/page、/article、/guide这类目录。

  7. 坑:不测本地AI推荐效果
    我做优化时只顾面向Google,结果发现本地游戏玩家用的AI推荐(比如小红书AI助手)根本不索引我的站。
    后果:本地流量来源中,AI推荐占比还是0。
    避免:用核子GEO的AI可见性评分,看不同AI引擎对本地关键词的覆盖差异,针对性做JSON-LD结构。

  8. 坑:忽略结构化数据的版本兼容
    我用了Schema.org v14的FAQPage类型,结果ClaudeBot只支持v12。
    后果:FAQ Schema在ClaudeBot里直接解析失败,等于没做。
    避免:查AI爬虫的官方文档,至少兼容到两个版本以下。核子GEO的结构化数据检测报告里会标兼容性问题,这个坑我踩了才学会用。