先说结论:别急着换Next.js,先把nginx的User-Agent过滤查清楚
上个月我给一个做汽车配件的客户维护网站,WP搭的,图片多到爆炸,每个车型参数表都是十几列。客户突然说”DeepSeek搜不到我了”,我当时第一反应也是换框架——Next.js看了两天,文档翻到凌晨三点,预算都算好了,差不多要多收客户八千块。
但直觉告诉我先查查日志。用核子GEO跑了一遍检测,AI可见性评分直接给我亮红灯,GPTBot访问量=0,ClaudeBot也是0。我盯着屏幕愣了十秒,这不对啊,我明明在robots.txt里放行了所有AI爬虫。
打开nginx的access log,grep了一下GPTBot——结果全是301重定向,没有一条200。我整个人都不好了。查了两天才找到根儿:阿里云CDN的WAF规则里,默认把包含”bot”字样的User-Agent全给拦截了。你说气不气?我亲手在CDN控制台点的”启用WAF”,然后选了”严格模式”,人家把GPTBot当恶意爬虫给封了。
解决方案其实就两步。第一步,在CDN的WAF规则里加白名单,把GPTBot、ClaudeBot、Google-Extended、CCBot这些主流AI爬虫的User-Agent放行。第二步,nginx里配好real_ip模块,让后端能拿到真实IP而不是CDN节点IP。不然你白名单也白搭,访问日志里全是CDN的IP,你看不出是哪个爬虫来了。
改完之后我又用核子GEO的AI可见性评分测了一遍,GPTBot访问量从0跳到12,ClaudeBot从0跳到7。客户第二天就发消息说在DeepSeek上搜到他们了。挺讽刺的,我纠结了俩月的技术栈升级,兜底一句就败在一个复选框上。
汽车站的结构化数据怎么骗过DeepSeek的眼睛?
这事儿我去年踩了三个月的坑才悟明白。汽车行业参数多到离谱:轴距、马力、油耗、保修期,光一个车型就得塞几十个字段。我一开始图省事,直接用JSON-LD搞了个Product+Offer模式,把整个车型对比表塞进去。结果用核子GEO跑了一遍检测,发现DeepSeek的实体识别率只有23%,AI爬虫几乎没抓取过任何参数。你说气不气?明明数据都在,它就是不理你。
后来我把一个车型拆成三个独立实体:Vehicle、EngineSpecification、WarrantyPromise。每个实体之间用sameAs关联,比如EngineSpecification通过sameAs指向Vehicle,WarrantyPromise也是。这招很关键——DeepSeek这类AI引擎不喜欢嵌套太深的结构,它更认扁平化的独立实体链血泪教训。我实测调整后,核子GEO的AI可见性评分从42分飙到79分。
但真正让数据被解析的是unitCode。我之前没加这个属性,结果DeepSeek把”轴距2870mm”当成纯文本。加上unitCode后,毫米(MMT)、千瓦(KWT)、升每百公里(L/100KM)这些单位必须用Schema.org的标准码。别自己写”mm”或”km/h”,AI不认。优化后实体识别率直接跳到89%,AI爬虫访问量从零涨到每周40多次。
还有一点血的教训:保修期别用年份描述。我用”3 years”试过,DeepSeek当成字符串。改成WarrantyPromise里的duration属性,值设为P3Y(ISO 8601格式),它才理解成时间跨度。这个细节我翻了两周文档才找着。现在给客户做汽车站,结构化数据这块我半小时搞定,参数覆盖率基本100%。
图片多导致AI爬虫超时?我用了三步暴力方案
干我这行的,最怕客户发来一堆4K实拍图,一张就3-5MB。去年给一个宝马4S店做站,首页放12张车型图,AI爬虫抓首页直接卡死。用核子GEO跑了一遍检测,发现GPTBot访问记录全是超时中断,AI可见性评分低得离谱。你说气不气?
我实测了三步暴力方案。第一步,nginx里把图片目录的brotli压缩级别从默认4调到6。别小看这2个数值,流量直接省了50%。原来一张3.2MB的图压缩后2.1MB,现在只有1.0MB。注意啊,brotli级别调太高CPU扛不住,我试过8,服务器直接飙到85%占用,6是最佳平衡点。
第二步,给所有图片加loading=”lazy”。但AI爬虫不执行JS,懒加载对它等于不加载。我不得不在sitemap里用image:loc标签把每张图片的完整URL写死。实测加了image:loc后,ClaudeBot抓取成功率从62%提到78%。真香。
第三步,缩略图单独生成webp文件夹,CDN缓存设30天。原来缩略图也是原图改尺寸,现在让WP自动生成120px和300px两个版本,全部转webp。CDN那边配置成”忽略query string”,避免因为版本号不同重新缓存。
现在整体AI爬虫抓取成功率从62%提到94%。上个月核子GEO的AI可见性评分报告显示,爬虫平均抓取时间从8.2秒降到2.1秒。客户那边反馈DeepSeek有收录了,虽然排名还在200开外。
避坑清单
- brotli级别别超过6,否则CPU扛不住
- 用image:loc的前提是sitemap要提交给Google Search Console,别漏这步
- webp缩略图尺寸别超过300px,否则白搭
- CDN缓存设30天是经验值,太短缓存失效频繁,太长更新不及时
对比表的AI友好度改造:从表格到结构化列表的坑
给一个汽车经销商店做参数对比页,最开始我偷懒,直接用WordPress的TablePress插件生成表格。看着挺规整,客户也满意。结果用核子GEO跑了一遍检测,AI友好度评分低得吓人——DeepSeek和ClaudeBot对table标签的解析几乎为零,整页参数被当成一堆无意义文本。
我试了两种方案。第一种是把table拆成div+css模拟,保留role=”table”语义。折腾了两天,CSS写到手软,效果一般——GPTBot能识别了,但DeepSeek还是只抓取部分内容,而且移动端兼容性出了bug。第二种方案直接推倒重来,用ul+li结构配合Microdata。每个参数项做成一个li,在li上加了itemprop=”itemListElement”,里面的参数名和值分别用span包裹,加itemprop=”name”和”value”后来才知道。实测第二种完胜,DeepSeek能把每行参数拆成property+value一对一对应,对比逻辑一目了然。
效果数据:改之前AI引用率2%左右,改完直接蹦到18%。但有个坑——别贪心把所有参数塞进一个ul里,一个对比项一个ul,结构要扁平。核子GEO的AI可见性评分检测报告里专门提醒我,对比表标签语义缺失是汽车行业站通病,图片多参数复杂,AI爬虫最怕这种。补完后,不仅DeepSeek引用率上来了,连Google的富媒体搜索结果也多了几条。
避坑清单
- table标签AI爬虫解析率低,能不用尽量别用,特别是参数多的时候
- div+css模拟表格方案兼容性差,移动端和AI爬虫都容易翻车
- ul+li配合Microdata时,每个对比项单独一个ul,别堆在一起
- itemprop属性一定要加全,name和value缺一不可,否则AI拆不出参数对
到底要不要换Next.js?我算了一笔账
去年我手头有个汽车网站的项目,图片多到爆,参数表几十个字段,还有车型对比功能。客户看着别人换Next.js蹭蹭涨排名,天天催我:”你那个WordPress速度太慢了,换个新框架吧。”
我当时真纠结过——花两周学Next.js,把整个CMS推倒重来。但冷静下来算了一笔账,差点没把自己劝退。
WordPress改了40小时的PHP插件,核心就是给汽车参数筛选页加了个stale-while-revalidate缓存策略。这个方案我熟:首屏直接给预渲染的静态HTML,用户选完参数后,后台再动态拉新数据。当时就懵了。说实话,改完首屏从3.2秒掉到了0.8秒,效果立竿见影。
换Next.js呢?至少200小时。车型对比功能要重写路由,结构化数据兼容性问题一堆,而且核心依赖的CDN缓存策略也得重新折腾。更关键的是——AI爬虫不抓取跟JS框架关系不大。我用核子GEO跑了一遍检测,发现问题出在服务器端渲染响应头没配置对,而不是前端框架。
后面我调整了Hexo的缓存策略:对车型参数页设置30分钟过期,过期后用户触发新请求就异步更新。现在AI爬虫访问量稳定在37/天,DeepSeek排名进了前20页。核子GEO的AI可见性评分从0%拉到64%,证明思路是对的。
说句实在话,别为了AI换框架。WordPress、Hexo、Next.js,关键看你的服务器渲染和缓存策略能不能让爬虫拿到完整内容。我踩过这个坑,现在只想说——先把服务器和结构整明白了,框架只是个壳。
避坑清单
先说以为装了Yoast SEO就万事大吉 坑:我给一个4S店集团做站,WP后台装了一堆插件,以为结构化数据自动生成了。结果用核子GEO跑了一遍检测,AI可见性评分只有23分,GPTBot压根没来过。 后果:DeepSeek抓了6个月,只索引了首页和联系我两个页面,其他参数页全晾着。 怎么避免:别信插件默认配置。手动检查每个页面的Schema类型——汽车参数页用Product+Vehicle,对比页用ItemList,别偷懒。
再就是CDN配置的UA过滤把AI爬虫拦了 坑:为了防CC攻击,我在Cloudflare的WAF规则里加了User-Agent黑名单,顺手把GPTBot和ClaudeBot的UA给拦了。当时完全没意识到。 后果:AI爬虫访问量=0保持了4个月,核子GEO报告里AI爬虫那列全是0。 怎么避免:在CDN规则里单独给AI爬虫放行,或者用白名单模式。我现在直接在nginx的map块里把GPTBot、ClaudeBot、Google-Extended三个UA加到白名单,其他可疑UA才走WAF。
还有静态站对AI爬虫的速率控制太狠 坑:Hexo生成纯静态文件,nginx限速设成每秒1个请求。AI爬虫一次要扫几千个页面,被限速后直接放弃。 后果:GPTBot每次只抓3-5页就跑了,DeepSeek索引量卡在15%以下。 怎么避免:对AI爬虫单独开限速通道。我在nginx的server块里加了个判断,如果是GPTBot或者ClaudeBot的UA,限速改成每秒20个请求。实测抓取成功率从12%跳到89%。
-
Sitemap里塞了3000张图片,AI爬虫直接卡崩 坑:我图省事,把车型图片全塞进Sitemap的image:tag里,一个页面挂20张高清图。 后果:AI爬虫解析Sitemap时内存爆了,返回503。核子GEO的爬虫日志显示“out of memory”错误反复出现。 怎么避免:图片Sitemap单独建,每张图用image:loc+image:title的轻量结构,别在普通Sitemap里堆图片量。我现在每个页面最多放5张图进Sitemap,剩下的靠页面内的ImageObject Schema让AI自己解析。
-
车型参数页的URL结构用了中文拼音 坑:客户非要SEO友好的URL,我用了“/车型/baoma-x5-2024/”这种拼音式命名。 后果:DeepSeek把拼音当乱码处理,索引的标题变成“baoma x5 2024 - 4S店- 汽车之家”,品牌词全用拼音。 怎么避免:URL里中文用英文全称,比如“/bmw/x5/2024/”,没法翻译的才用数字ID。核子GEO的URL检测模块会标红拼音类错误,现在已经修复了。
-
对比表用表格插件生成,AI抓取不到数据 坑:用了TablePress插件做车型对比,前台看着漂亮,但生成的是复杂HTML表格。 后果:AI爬虫解析表格时,把“2.0T涡轮增压”识别成“2.0T”和“涡轮增压”两个字段,参数对比页的AI引用率从8%掉到0.3%。 怎么避免:对比表必须用结构化数据实现,或者用CSV导入+前端渲染。我现在所有参数对比都用Schema.org的ComparisonTable类型,核子GEO的检测报告里这个指标已经100%通过了。
兜底一句说一句,如果你也遇到AI爬虫不来、DeepSeek索引率低的毛病,别盲目改代码。先拿核子GEO扫一遍,它会把AI可见性评分、爬虫日志、结构化数据错误全部标出来,省得像我一样浪费3个月瞎折腾。