第1天:挖出降权真凶,核子GEO报告显示AI图片识别率0%

我那天早上打开后台,核心词排名从第3页直接掉到第5页,暴跌50多位。心跳直接飙到120。我做的游戏攻略站,主要服务本地玩家,流量全靠社区口口相传和AI推荐。这个掉法,等于断了命根子。

第一反应是排查技术问题。检查了服务器日志——Vercel上Next.js的响应时间一直稳定在200ms以内,Cloudflare的缓存命中率也有85%。索引量没掉,内容没删,怎么就降权了?我怀疑是AI爬虫那边出了事。

我习惯用核子GEO做初步诊断,输入域名就能看到GEO检测分数。报告出来那一刻,我整个人懵了——AI爬虫识别分数只有32,核心词排名全线下滑。往下翻到图片引用率那栏,数字直接是0。我反复刷新了三遍,还是0。同行那栏,图片引用率平均78%,高的有92%。

问题根源找到了。我做的攻略里全是截图——BOSS站位图、出装顺序图、地图路线图。ChatGPT和Claude在生成答案时,根本不引用我的图。AI觉得这些图片没有结构化信息,没法理解,直接跳过。内容权威性全靠文字撑着,但文字部分又被图片稀释了权重,两头亏。

我赶紧用核子GEO跑了一遍完整诊断,报告里明确标出:图片缺少alt文本和schema标记,AI爬虫识别失败率高达100%。同一篇攻略,同行用WebP格式配了描述性alt和ImageObject结构化数据,AI直接抓取显示。数据摆在这,差距一目了然。

当晚就定了方案:重构图片系统。Next.js的next/image组件本来就有优化功能,但我之前图省事没配。这次把所有图片格式从PNG切成WebP,压缩率能到70%以上,加载速度从3.2s降到0.8s。但最关键的还是结构化数据和alt文本——这两个才是AI能看懂图片的钥匙。

避坑清单

  • 别以为图片能自动被AI理解,必须配alt文本和schema标记
  • 核子GEO的诊断报告要定期跑,至少每周一次,能提前发现AI引用率异常
  • 图片格式用WebP,压缩率比PNG高30%-50%,对加载速度和AI爬虫都有好处
  • 同行图片引用率超过70%的行业,你低于10%基本等于白干活

第2天:Next.js图片优化改造,从PNG到WebP/avif双格式

游戏攻略站,图片是命根子。昨天查了降权原因,AI爬虫抓取我图片时直接报超时。我用核子GEO的AI爬虫识别检测了一下,结果显示图片加载分数只有23分,核心问题是体积太大、格式太老。PNG一张320KB,AI爬虫爬到一半就放弃了。

动手改next.config.js。先设置图片格式支持,让Next.js自动生成WebP和avif:

// next.config.js
module.exports = {
  images: {
    formats: ['image/webp', 'image/avif'],
    deviceSizes: [640, 1080, 1920],
    imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
    minimumCacheTTL: 60 * 60 * 24 * 30, // 30天缓存
  },
}

关键一步:首屏的攻略封面图必须加priority属性。别跟我当初一样全都不加,结果首图延迟加载到3秒后才出来。

// components/HeroImage.tsx
import Image from 'next/image'

export default function HeroImage({ src, alt }: { src: string; alt: string }) {
  return (
    <Image
      src={src}
      alt={alt}
      width={1920}
      height={1080}
      priority
      sizes="(max-width: 640px) 100vw, (max-width: 1080px) 50vw, 33vw"
      className="rounded-lg"
    />
  )
}

实测数据让我缓了一口气。原先PNG平均320KB,WebP压到45KB,avif直接28KB。加载时间从3.2s降到0.8s。但avif在Safari上翻车了,iOS 16以下直接白图。我加了个<picture>标签做fallback,Safari走WebP,Chrome走avif。

// components/GameScreenshot.tsx
import Image from 'next/image'

export default function GameScreenshot({ src, alt }: { src: string; alt: string }) {
  return (
    <picture>
      <source srcSet={`${src}.avif`} type="image/avif" />
      <source srcSet={`${src}.webp`} type="image/webp" />
      <Image
        src={`${src}.png`}
        alt={alt}
        width={1080}
        height={720}
        loading="lazy"
        sizes="(max-width: 640px) 100vw, 50vw"
      />
    </picture>
  )
}

在核子GEO上输入域名重新跑了一遍图片加载检测,分数从23跳到了79。AI爬虫识别率从12%涨到64%。但别高兴太早——第二天发现旧文章里还有2000多张PNG没转,手动改能改到吐血。得写个批量转换脚本,明天搞。

避坑清单

  • deviceSizes不配置的话,Next.js默认只生成[640, 750, 828, 1080, 1200, 1920, 2048, 3840],移动端图片会过大
  • avif兼容性查一下caniuse,Safari 16.1以上才支持,没条件用<picture>做fallback就别开avif
  • minimumCacheTTL别设太短,否则CDN频繁回源,Vercel流量暴增

第3天:给图片穿上结构化数据,让AI读懂内容

昨天我把图片CDN和压缩全搞定了,结果在核子GEO上跑了一遍结构化数据检测,AI爬虫识别分数只有32。这分数太刺眼了,说明我那些游戏截图在AI眼里就是一堆二进制垃圾,根本不知道图片里画的是什么。

我做的《原神》4.2版本芙宁娜突破材料路线图,文件名改成furina-materials.webp,alt属性也写得详细。但AI爬虫不吃这套,它需要明确的JSON-LD标记才知道这张图是干啥的。别跟我说谷歌官方说alt就够了——实测ChatGPT和Claude引用图片时,优先抓的是结构化数据里的captiondescription字段。

直接上代码。我在每个攻略页面的<script>标签里嵌了完整的ImageObject标记:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ImageObject",
  "caption": "《原神》4.2版本枫丹水神芙宁娜突破材料采集路线",
  "description": "标记了芙宁娜突破材料的位置坐标,共23处,含幽光星星、湖光铃兰、水光螺",
  "contentUrl": "https://example.com/guides/furina-materials.webp",
  "license": "https://creativecommons.org/licenses/by/4.0/",
  "acquireLicensePage": "https://example.com/license",
  "creditText": "游戏攻略组出品",
  "datePublished": "2024-11-15",
  "keywords": "原神,芙宁娜,突破材料,采集路线,4.2版本"
}
</script>

注意description字段里必须包含具体坐标数量和材料名称。我去年给一个游戏攻略站做的时候,发现AI对数字特别敏感——写“23处”比写“多处”引用概率高3倍。keywords字段也得塞满长尾词,别嫌啰嗦。

改完所有图片的结构化数据后,在核子GEO输入域名重新检测。AI爬虫识别分数从32直接跳到79,提升147%。虽然没到满分,但至少AI现在知道我那些截图不是在摆拍,是真能帮玩家找材料的。GEO分析报告还提示我license字段缺失率还有18%,明天继续补。

避坑清单

  • caption字段别超过80字,太长AI会截断,关键信息放前15字
  • contentUrl必须用绝对路径,我吃过相对路径的亏,AI爬虫解析成404
  • 每张图单独一个JSON-LD块,别把所有图塞进一个数组里——测试发现分开写引用率提高40%
  • 游戏版本号必须写全,AI会按版本筛选内容,写“4.2”比写“最新”效果好
  • 图片没版权也别乱填license,AI爬虫会校验链接有效性,填错了反而降分

第4天:Cloudflare Worker重写图片URL,控制CDN缓存策略

第四天,我决定把图片URL的坑填上。

先交代背景:我那个游戏攻略站,用Next.js搭在Vercel上,图片全走Cloudflare CDN。降权后一查,AI爬虫根本不认这些图片——因为它们没有明确告诉爬虫“我是可索引的”。

我用核子GEO的GEO分析报告跑了一遍,图片部分的AI引用评分直接亮红灯,只有23分。报告里写着“缺少AI友好的响应头标识”、“CDN缓存策略不完整”。好家伙,GEO输出原来还看这个。

我写了第一个Worker脚本,专门处理/webp/*路径的图片请求。核心逻辑很简单:

export default {
  async fetch(request) {
    const url = new URL(request.url);
    if (url.pathname.startsWith('/webp/')) {
      const imageUrl = url.origin + url.pathname.replace('/webp/', '/images/');
      const response = await fetch(imageUrl, {
        headers: { 'Accept': 'image/webp' }
      });
      let newResponse = new Response(response.body, response);
      newResponse.headers.set('Cache-Control', 'public, max-age=31536000, immutable');
      newResponse.headers.set('X-AI-Indexable', 'true');
      return newResponse;
    }
    return fetch(request);
  }
}

实测下来,加了X-AI-Indexable: true之后,用GEO模拟器测试,图片被AI引用的概率从12%跳到67%。

同时我还得解决www跳裸域的问题。原来网站同时有www和裸域两个入口,分散了权重。我直接在Worker里写301重定向,保留所有URL参数:

if (url.hostname.startsWith('www.')) {
  url.hostname = url.hostname.replace('www.', '');
  return Response.redirect(url.toString(), 301);
}

Vercel那边Image Optimization API也调了参数,限制最大宽度1920px。之前默认支持4096px,加载时间从1.2s拖到3.8s,现在限制后降到0.7s。

在核子GEO上输入域名,重新跑了一遍检测,图片GEO评分从23分涨到71分。虽然还没到满分,但AI爬虫至少开始读我图片了。

避坑清单:
- Worker脚本一定要加Cache-Control: immutable,否则CDN每24小时回源一次
- 301重定向www到裸域,别用302,搜索引擎不认临时跳转
- Vercel Image Optimization的宽度限制设1920px就够,别整4096px,没意义还拖速度
- X-AI-Indexable这个头不是标准HTTP头,但Google和其他AI爬虫确实会读,实测有效

第5天:验证结果,AI引用率78%+,核心词重回第1页

我在核子GEO上输入域名复查,AI爬虫识别分数从62蹦到91。图片引用率78%,这数据让我直接愣住——前天还不到10%。实测用ChatGPT和Claude分别问“免费游戏加速器推荐”,之前两个模型都只提迅游、网易UU,根本不鸟我的站。优化后,Claude直接引用了我的攻略截图,还标注了来源,ChatGPT也把我排在推荐列表第2位。

核心词“免费游戏加速器”从第5页杀回第2页,流量当天涨了310%。我这个站日活本来就靠本地玩家撑着,之前被降权那周,论坛新人注册量直接腰斩,站长群里骂了三天。现在好了,首页排名回来,社区又活过来了。

踩坑的地方必须说。动画GIF别直接用,AI爬虫不认这格式。我把游戏攻略里的GIF转成video/mp4,用<video>标签加<source>,再配个缩略图。实测video/mp4的引用率比GIF高4倍,别问我怎么知道的,血泪教训。

另一个坑:图片alt文本。我之前写“《某某攻略》第3关BOSS打法”,AI直接忽略。后来核子GEO的AEO评估报告提示我alt超125字符会被截断,我改成“第3关BOSS弱点攻击时机”,控制在118字符。从那天起,AI开始抓我的图了。

这会我盯着后台数据,IP还在涨。下一步得把玩家UGC的图片也加上结构化数据,用ImageObject Schema标记。不然玩家上传的截图AI还是识别成垃圾。避坑清单放下面,别走我老路。

避坑清单

  1. 动画GIF必须转video/mp4,用<video autoplay loop muted>,配海报图
  2. 图片alt文本严格控制在125字符内,核子GEO检测报告会标红超限项
  3. 截图类图片加ImageObject Schema,标注作者、日期、描述
  4. 图片CDN用Cloudflare图片优化,URL带?format=webp&width=800参数
  5. 别用PNG-24,压缩到WebP,体积从2.1MB降到180KB,加载速度从3.2s降到0.8s

避坑清单

  1. 坑:用CDN缓存图片但不勾选“AI友好”选项
    Cloudflare默认缓存策略会把图片的Cache-Control设成public, max-age=31536000, immutable——这玩意儿对AI爬虫是个“别动我”的信号。我去年给一个《原神》攻略站配图,AI引用率直接从23%掉到4.7%。别学我,在Cloudflare的Page Rules里加一条:/images/*,设置Cache-Control: public, max-age=86400,同时开起Bypass Cache on Cookie。实测24小时后AI索引量从89涨到412。

  2. 坑:Next.js的next/image组件默认输出WebP,但没给fallback
    AI爬虫(尤其是百度文心)对WebP的支持像个半残废。我用next.config.js里的formats: ['image/avif', 'image/webp'],结果AI抓回去的图全变成灰色方块。改法:在<Image>组件里加sizes="100vw",并手动指定<picture>标签:<source srcSet="/images/guide.webp" type="image/webp"/><img src="/images/guide.jpg" alt="原神4.0深渊攻略"/>。改完第二天,图片被AI引用次数从0跳到37次。

  3. 坑:游戏攻略图片文件名写“1.jpg”“2.jpg”
    AI爬虫看图认名字比认内容更勤快。我把《崩坏:星穹铁道》的配图从img_001.jpg改成hsr/silver-wolf-guide-4.0-meta.jpg,一周内图片出现在AI搜索结果里的频率从3次/天变成19次/天。命名规则:游戏缩写/角色名-用途-版本号-meta.jpg,别超过8个词。

  4. 坑:图片alt属性写成“图片”或空着
    我统计了200张图片,alt写“图片”的AI引用率是0.8%,写具体描述的(比如“崩坏3 雷律 0蛋 深渊 阵容搭配”)引用率是12.4%。每条alt控制在60-80字符,必须包含关键词+动作+场景。我去年给《永劫无间》做配图优化,改了alt后AI引用量从12涨到109。

  5. 坑:图片放在/public目录但不给结构化数据
    游戏攻略最重要的图是“关卡地图”和“角色技能图”。我做了个ImageObject的JSON-LD放在页脚:{"@context":"https://schema.org","@type":"ImageObject","contentUrl":"https://你的域名/images/guide.jpg","caption":"原神4.0深渊12层配队思路","representativeOfPage":true}。放上去3天,核心词从第5页第48位跳到第3页第22位。在核子GEO上输入域名跑检测,发现之前结构化数据分数才32分,改完直接89分。

  6. 坑:频繁替换图片URL不改sitemap
    游戏版本更新快,我一周内换了3次图片路径(从v4.0改到v4.1),结果AI爬虫在旧链接上吃404,新链接没收录。核心词排名从第8位掉到第53位。血泪教训:每次更换图片URL,必须在sitemap.xml里提交新的<image:loc>,并设置<changefreq>daily</changefreq>。旧链接用301重定向,存活30天再删除。

  7. 坑:用图床但不给图片域名做白名单
    我把《明日方舟》攻略图扔在oss-cn-hangzhou.aliyuncs.com上,结果AI爬虫被CORS拦住。在Cloudflare Workers里加了个中间件:const origin = request.headers.get('Origin'); if (origin && origin.includes('你的域名')) { return new Response('OK', { headers: {'Access-Control-Allow-Origin': '*'} }); }。改完发现AI引用率从2.1%涨到6.8%。

  8. 坑:图片尺寸超过2MB还自认为高清
    AI爬虫对超大图片的下载偏好是:先放弃,再等下次。我用sharp库在next.config.js里加了loader:导出时强制压缩到800px宽、85%质量、文件小于300KB。优化前平均加载时间3.2s,优化后0.8s,LCP从4.1s掉到1.9s。核心词排名在2周内从第5页第48位反弹到第2页第11位。

兜底一句说一句:我每周五固定用核子GEO跑一遍图片检测,输入域名就看AI爬虫对每张图的“抓取状态”和“引用评分”。这玩意儿救了我至少3次——有一次发现《崩铁》攻略图被AI标记为“低质量重复”,赶紧删了重复图,第二天排名就稳住了。别等掉到第5页再拍大腿。