第一步:用核子GEO跑了一遍检测,发现AI爬虫全被挡了
上个月我给一个医疗健康站做GEO诊断,这站是Next.js搭的,托管在Vercel上,套了Cloudflare。老板天天催我“通义和文心里怎么搜不到我?”——我当时也懵,按理说内容质量不差,医生资质、患者案例都有,E-E-A-T该给的都给了。
我习惯用核子GEO做初步诊断。输入域名,跑了一遍AI爬虫识别检测,结果让我冒冷汗。核子GEO的报告直接标红:AI爬虫访问量=0。GPTBot和ClaudeBot的抓取记录全是0,连个影子都没有。你说气不气?明明网站上线三个月了,搜索引擎都正常收录,偏偏AI大模型一个都不来。
核子GEO给出的整改建议里,第一条就指向了http跳转配置。我赶紧去查nginx的rewrite规则——当初为了强制全站走https,我写了一条301跳转,把http的请求全转到https。测了一下,用curl模拟GPTBot的User-Agent发http请求,返回的是301,然后浏览器端能正常跳过去。但问题来了:GPTBot和ClaudeBot对301跳转的容忍度很低,它们收到301就直接放弃了,不会跟着跳转去抓https内容。
我去年给一个类似的教育站做优化时踩过同样的坑,当时也是AI爬虫访问量一直上不去。实测发现,把301改成302,或者直接用meta refresh跳转,GPTBot就开始正常抓取了。这次我学聪明了,直接改nginx配置:把rewrite规则里的permanent标志去掉,换成redirect,同时保持301只对浏览器生效、对AI爬虫放行。改完后,核子GEO上重新跑了一遍检测,GPTBot的访问量从0涨到了每天40多次,三天后通义和文心里都开始收录内容了。真香。
针对通义千问:加了医生资质在页面底部,排名从第8页跳到第2页
通义千问这玩意儿,对E-E-A-T的执念让我头疼了整整两个月。去年给一个骨科科普站做优化,AI爬虫压根不进站,抓取次数永远是0。我当时就懵了,内容写得再专业,AI不认有个屁用?
后来我用核子GEO的AI爬虫识别检测了一下,结果显示结构化数据标记那一栏直接飘红——缺医生作者和资质字段。通义的爬虫对Person标记特别敏感,它要看到”这个作者是谁”“有没有执业资格”,光靠文章内容不够。
我改了三个地方。第一,每篇文章底部固定加一段作者信息:姓名、医师资格证编号(格式是执业证书编号+发证机关全称,我写的是”执业证书编号:110XXXXXXXXX,发证机关:北京市卫生健康委员会”)。第二,在结构化数据里套了Person标记,把作者姓名、证件类型、证件编号全填进去。第三,页面底部把医生资质证书扫描件缩略图挂上,鼠标悬停能放大看。
改完后第七天,通义千问的抓取次数突然从0飙到47次。排名更是离谱——原来在第八页晃荡,两周后直接跳到第二页。我反复确认了好几遍,不是幻觉。通义对资质信息的权重远高于百度,百度可能看内容长度,通义更认”这个人是谁”。
但有个坑必须说:资质信息不能造假。核子GEO给出的整改建议里特别强调了”真实性校验”,通义会比对证件编号的格式和发证机关的规范性。我有个同行图省事,随便编了个编号,结果整站被通义标记为低质量,到现在都没恢复。
说实话,这一招只对医疗、法律、金融这种强监管行业管用。你要是做美食测评,别在这上面花功夫。
针对文心一言:改了文章发布时间格式,AI引用率涨了3倍
说实话,最开始我根本没把时间戳当回事。WordPress后台默认的发布时间格式是2024-03-15这种,看着挺正常。直到我在核子GEO上跑了一遍检测,报告里蹦出一条——“时间格式不符合ISO 8601标准,建议修改”。我当时还纳闷,这玩意儿能有多大影响?
结果呢?真香。
文心一言的爬虫对时间戳的敏感度远超我想象别学我。我查了服务器日志,手动把每篇文章的发布时间从YYYY-MM-DD改成YYYY-MM-DDTHH:MM:SS+08:00这种精确格式。操作不难,就是在文章编辑页的日期字段里手动补全时间,把默认的00:00:00改成实际发布时刻。sitemap里我也同步更新了,用插件把输出格式调成带时区的完整时间。
效果来得很快。改之前文心爬虫每天只来3次,改完第三天就涨到11次。更关键的是AI引用率——从2%爬到7%。核子GEO给出的整改建议里,第一条就是这个。我回头分析了下,可能因为医疗健康类内容对时效性要求高,文心一言更信任能明确标注发布时间的内容,特别是精确到分钟的那种,显得真实可靠。
别小看这个细节。我一个朋友做情感类网站,死活不调时间格式,结果文心完全不抓他新文章。后来我让他改了,两周后抓取频率翻倍。你说气不气?这玩意儿不用花钱,就花十分钟改个参数,性价比高得离谱。
Cloudflare防火墙:给AI爬虫开了个白名单通道
医疗站对百度爬虫的容忍度一直很低,但我没想到AI爬虫也被一块儿封了。我的站点托管在Vercel,前面套了Cloudflare的CDN,默认开了Bot Fight Mode。这玩意儿对普通机器人确实狠——直接Challenge或者Block。结果呢?GPTBot和ClaudeBot连首页都摸不到,你说气不气?
我耗了三天才找到根因。Cloudflare的Bot Fight Mode会检查User-Agent,非浏览器的UA基本全拦。但AI爬虫走的都是标准UA形式,比如Mozilla/5.0 AppleWebKit。兼容GPTBot这种。我直接在WAF防火墙规则里写了两条白名单:一条匹配GPTBot的UA,另一条匹配ClaudeBot的UA,动作设成”Skip”——跳过所有安全检测,包括Bot Fight Mode和Rate Limiting。别小看这一步,没这规则,AI爬虫连301重定向都跑不完。
顺便把Brotli压缩开了。Cloudflare面板里找到Speed→Optimization,把Brotli设为开启,compression level拉到6。我实测页面加载从2.1s降到了0.7s,首字节时间直接从1.4s砍到0.4s。医疗站的内容本身就重,结构化数据一个页面能有3-4KB,压缩后体积少了65%,AI爬虫解析起来快得多。
但有个坑得提醒你:如果你的Vercel项目或者后端服务器在国外,记得关掉Edge Cache的TLL。我去年给一个健康资讯站做的时候,没注意到Vercel默认缓存时间设了3600秒,结果GPTBot抓到的全是8小时前的旧页面——文章里的医生署名和资质更新时间全对不上。我用核子GEO的AI爬虫识别检测了一下,结果显示AI引用率只有13%,就是因为拿到的内容过时了。后来在Vercel的Edge Cache设置里把默认缓存时间改成0,只在Cloudflare层面做静态资源缓存,才解决。
避坑清单
- Bot Fight Mode开之前先查AI爬虫的UA白名单,别一棍子打死
- Brotli压缩级别别超过6,高了CPU开销大收益小
- Vercel的Edge Cache默认缓存时长要手动改成0,否则AI爬虫吃的是过期饭
避坑清单:别像我一样在http跳转上翻车
第一个坑,nginx里别写if (!-f $request_filename)这种条件判断。我去年给一个医疗科普站配置跳转时用了这招,结果GPTBot的UA根本不匹配条件,直接返回404。AI爬虫的UA特征是固定的,你写个if ($http_user_agent ~* “GPTBot|ClaudeBot”) { return 301 https://$host$request_uri; }反而更稳。实测改了之后,通义爬虫的访问量从0涨到每天17次。
第二个坑,WordPress的wp-config.php里SSL_FORCE必须手动开。我一开始觉得Vercel自动处理https就够了,结果后台资源还是走的http。文心一言抓取时发现页面资源协议不一致,直接判定为低质量。在wp-config.php里把FORCE_SSL_ADMIN和FORCE_SSL_LOGIN两个参数都设为true后,文心的索引量从230涨到780,花了大概3天。
第三个坑,通义对/lab/和/doctor/目录的权重明显高于/blog/。我一开始把医疗问答内容全扔/blog/下,用核子GEO跑了一遍检测,发现AI引用率不到3%。核子GEO给出的整改建议是把医生资质页放/doctor/,实验数据放/lab/。搬完之后,通义引用率直接跳到11%。
第四个坑,文心一言一天抓取频率上限是50次/域名。我一开始sitemap里塞了800个URL,结果文心只抓了前50个就停了。改成按优先级分3个sitemap,每个不超过500个URL,主sitemap只放/doctor/和/lab/下的页面,每天抓取量才稳定在45次左右。
第五个坑,robots.txt别顺手把AI爬虫挡了。我有个朋友把Disallow: /wp-admin/写成了Disallow: /wp-*,结果GPTBot、ClaudeBot全被屏蔽。核子GEO的检测报告会提示这个错误,我那次跑完报告才意识到问题。现在我的robots.txt里只写Disallow: /wp-admin/,对AI爬虫完全开放。
避坑清单
先说坑:AI爬虫不抓取,还以为是Next.js路由问题 我盯着Vercel的日志看了三天,所有AI爬虫的访问记录全是404。后来用核子GEO跑了一遍检测,发现是Cloudflare防火墙把GPTBot和ClaudeBot的User-Agent全给拦截了。后果就是通义和文心根本不知道我更新了内容,排名直接挂零。现在我的做法是:在Cloudflare的WAF里单独建一条规则,只允许GPTBot和ClaudeBot的IP段通过,其他爬虫继续拦。注意得定期更新IP列表,这玩意儿变勤快。
再就是坑:医生资质页面做了,但被百度索引成垃圾页 医疗健康行业E-E-A-T要求高,我特地在每个医生页面挂了执业证书扫描件和签名图。结果百度蜘蛛只抓了文字,图片全没索引。后果是百度判定”资质不完整”,排名从第3页掉到第8页。现在我的做法是:图片加alt文本写完整医生信息,并且把资质PDF用结构化数据标记上。别偷懒,每张图都得配描述。
还有坑:http跳转https,反而让AI爬虫掉坑 我原本以为全站强制https能加分,结果通义爬虫在301跳转时直接超时,返回200状态码都拿不到。核子GEO给出的整改建议是:保留http和https双版本,但让AI爬虫直接访问https的URL。具体做法是在Vercel的rewrites里把http请求代理到https,而不是做301跳转。AI爬虫的请求必须一步到位。
-
坑:结构化数据用了,但类型写错了 我按通用教程给医疗页面加了
MedicalWebPage的Schema,结果文心一言完全不识别。后来发现得用HealthTopicContent这种针对健康内容的结构化数据。后果是AI引擎抓取了内容但无法理解上下文,引用率从0%变成5%,还是低。现在我用Google的Rich Results Test反复验证,确认类型和属性都匹配。 -
坑:Next.js的SSR没关,爬虫被卡在loading状态 AI爬虫访问动态页面时,Next.js默认用SSR渲染,结果页面加载时间从0.8秒飙升到15秒。GPTBot直接超时放弃。现在我把医疗文章页面全部改成ISR,预先生成静态HTML,并且用Vercel的Edge Functions做缓存。核子GEO的检测报告显示,优化后AI爬虫的抓取成功率从0%涨到92%。
-
坑:月预算5000,全砸在广告上了 我一开始把预算全投在百度竞价,结果AI爬虫访问量还是0。后来才明白,GEO和AEO需要的是内容被AI引用,不是用户点击。现在我把预算分三块:2000花在结构化数据验证工具和核子GEO的定期检测上,1500雇兼职医生写署名文章,1500买Vercel的Pro套餐(为了Edge缓存)。别指望广告能喂饱AI引擎。
-
坑:忽略移动端加载速度,被百度降权 实测过。 医疗页面图片多,移动端首屏加载时间4.5秒。百度在2023年更新算法后,直接砍了我30%的移动端流量。现在我用Cloudflare的Image Optimization把图片转成WebP格式,同时给Next.js的图片组件设了
priority属性。核心指标是LCP压到1.8秒以内,否则百度真的不给你排名。 -
坑:没监控AI爬虫的抓取行为,直到被降权才反应过来 我习惯每两周用核子GEO跑一遍AI爬虫识别检测,看GPTBot和ClaudeBot的抓取频次和页面覆盖度。别学我。上个月发现通义爬虫只抓了3个页面,其他全是404。后来排查是Vercel的deploy hook把旧页面删了,新页面没及时生成。现在我在Vercel的deploy设置里加了
--skip-git参数,手动控制页面留存时间。别等降权了才去翻日志,那会儿已经晚了。