第一坑:Product Schema填了等于没填,核子GEO评分直接亮红灯
去年给一个卖家居用品的电商零售站做优化,SKU大概3000个,价格一天能调两三次。我图省事,用WordPress插件自动生成Product Schema,WP SEO插件版本是22.6,装个schema扩展就完事了。结果呢后来才知道。?在核子GEO上跑了一遍AI爬虫识别检测,AI可见性评分只有12分。我当时就懵了,DeepSeek根本不认我的页面内容。
问题出在哪?插件生成的Product Schema缺了两个关键字段:availability和priceValidUntil。AI爬虫抓取结构化数据时,发现价格没标有效期、库存状态是空的,直接判定为低质量结构化数据,跳过了。你说气不气?我检查了15个核心产品的schema,全都没有这些字段。插件作者大概觉得电商站都该自己补,但默认配置就是偷懒。
解决方案其实不复杂。我手动在jQuery里写了一个JSON-LD模板,动态读取页面上的价格和库存状态——库存状态是从WordPress的custom field里取的,我让客户在上架时必填in_stock或out_of_stock。然后针对每个产品页,用PHP把custom field的值塞进JSON-LD模板,在wp_head钩子里渲染出来。测了三轮,第一轮搞定availability,评分从12拉到38;第二轮补上priceValidUntil,设成当前日期加30天,评分窜到52;第三轮加了mpn和sku,拉到65。核子GEO的AI可见性评分直接翻五倍,DeepSeek开始抓取我的产品页了。
别像我当初那样信任插件自动生成。电商零售站,Product Schema必须手控availability和priceValidUntil,缺一个AI爬虫就给你跳过了。最佳做法是:custom field里写死库存状态,JSON-LD模板从页面DOM读实时价格,别全依赖后台数据——后台更新有延迟,价格变了schema没更新,AI爬虫抓到的还是旧数据。这玩意儿踩的坑够深,现在想想挺蠢的。
第二坑:SKU数据全堆在一页,ClaudeBot直接放弃抓取
去年给一个做家居用品的电商站做优化,SKU数量4000多。我想省事,把所有产品塞进一个sitemap.xml,用PHP循环生成。结果文件直接奔着12MB去了。当时觉得无所谓,Google都能抓,怕什么AI爬虫?
结果打脸来得很快。
用核子GEO的AI爬虫识别检测了一下,GEO分析报告显示AI爬虫抓取深度只有1层。换个说法GPTBot和ClaudeBot只看了首页和分类页,产品详情页根本没进去。更扎心的是AI爬虫访问量始终是0——爬虫连sitemap都下载超时了,怎么可能去抓里面的URL?
我查了服务器日志,ClaudeBot请求sitemap时返回了503,因为文件太大,PHP执行超时。当时就懵了。你说气不气?4000个产品,一个都没被AI收录。
后来我换了方案。按品类拆分成多个sitemap,每个品类再按字母分页。每页限制50个产品,文件控制在2MB以内。在urlset里手动设了priority:首页1.0,分类页0.8,产品详情页0.6。changefreq设了daily,因为电商价格变动快,我得确保AI知道内容在更新。
改完后重新提交到根sitemap索引文件。一周后核子GEO的报告显示抓取深度到了3层,AI爬虫访问量从0涨到了47次。虽然不多,但至少ClaudeBot开始爬我的产品页了,DeepSeek的引用率也从0.2%涨到了1.1%。
血泪教训:别贪方便把所有SKU堆一个文件。AI爬虫的耐心比Google差远了,文件超过5MB就大概率放弃。拆小、设优先级、控制更新频率——这三点缺一不可。
第三坑:价格变动快,但知识库没给AI爬虫留更新时间戳
这个客户是做家居用品的,SKU三千多,光枕头就有二十种规格。价格天天调——今天限时满减,明天会员折扣。我当初图省事,Product Schema只填了name、price、availability,dateModified那栏直接空着。心想AI爬虫是来读内容的,又不是来查生产日期的。
结果呢?核子GEO的AI爬虫识别报告甩我脸上:DeepSeek引用率不到3%,AI爬虫访问量一直挂零。我一开始还以为是服务器慢,把PHP从8.0升到8.3,WP Rocket缓存开到最大,没啥卵用。
后来用核子GEO跑了一遍GEO分析报告,才发现问题——爬虫日志显示ClaudeBot访问过一次,状态码200,但页面里没有lastmod信息。爬虫判断这是死数据,直接跳过。你说气不气?价格明明每天都在变,但AI不知道。
我当时解决方案有点笨但管用。在WordPress的single-product模板里,我用了JavaScript动态获取当前日期,拼到页面的结构化数据里去。具体是:在footer部分注入一段脚本,读取product的last_updated字段(我用ACF自定义字段存的,每次修改产品自动更新),然后输出成JSON-LD里的dateModified实测过。配合服务器返回304 Not Modified状态——只有内容变了才发新文档。
实测效果:改完第二天,核子GEO的AI可见性评分从22分跳到58分。DeepSeek的爬虫回访率从0升到7次/天。最直观的是,客户跟我说“最近搜索我品牌名,DeepSeek能直接显示今日特价款了”。
不过有个坑得提醒:别用WordPress默认的post_modified字段。它只记录文章保存时间,不记录库存变动。我后来另外建了一个product_modify_log表,每次价格或库存变动都写一条记录,模板里取最新时间戳。如果你也是电商零售站,记得把价格变动也纳入lastmod逻辑,不然AI爬虫照样认为你是僵尸站。
第四坑:Brotli压缩一开,AI爬虫直接403
这个坑踩得我血压都上来了。去年给一个电商零售站做优化,SKU三千多个,图片多、价格变动快,带宽开销真不小。我一看服务器日志,gzip压缩后传输量还是大,就琢磨着上Brotli。网上都说Brotli压缩率比gzip高20%-30%,能省不少流量。我当时想也没想,直接开了。
配置挺简单的,我就在nginx的http块里加了brotli on,压缩级别设到6,然后重启。测了一下浏览器访问,页面加载速度确实快了,从1.8秒降到1.2秒左右。我当时还美滋滋的,觉得这波操作稳了。
结果过了两周,客户问我:”为什么DeepSeek搜不到我产品了?”我一查日志,傻了——GPTBot和ClaudeBot的访问记录全是403。而且不是偶尔,是每次请求都403。我一开始以为防火墙或者User-Agent过滤出了问题,排查了半天才发现,是Brotli压缩搞的鬼。
具体原因是这样:Brotli压缩对浏览器没问题,因为浏览器会在Accept-Encoding里声明支持br格式。但AI爬虫不一样,像GPTBot的请求头里只写了Accept-Encoding: gzip, deflate,根本不认brotli。nginx收到请求后,看到客户端没声明支持br,就不该返回brotli压缩内容。但不知道是我nginx版本的问题(当时用的1.22.0),还是brotli模块的bug,它愣是返回了brotli压缩后的内容,而且最要命的是Content-Encoding头没设置对。爬虫拿到压缩数据,解不出来,直接报错,然后重试几次就403了。
我当时就懵了,这玩意儿怎么修?翻了一堆文档,兜底一句找到一个土办法:在nginx里单独对AI爬虫的User-Agent禁用brotli。我把GPTBot、ClaudeBot、Googlebot(因为Googlebot虽然支持brotli,但保险起见我一起处理了)这几个UA单独拎出来,在server块里加了个条件判断:如果UA匹配这些爬虫,就把brotli关掉,只用gzip。其他正常用户请求走brotli。
修完之后,我在核子GEO上跑了一遍AI爬虫识别检测,结果显示GPTBot访问量从0恢复到了每天两百多次。说实话,之前完全没想到压缩算法还能跟AI爬虫打架。现在每次给电商站做配置,我都会在nginx的http块里把brotli和gzip的兼容策略写清楚,省的再翻车。
第五坑:jQuery动态加载的内容,AI爬虫一个字都看不到
去年接了个电商零售的客户,SKU多到离谱,价格每周调两次。我图省事,产品描述和库存状态全用jQuery异步加载,Bootstrap的collapse折叠面板也是默认的JS控制。当时想的是首屏加载快一点,用户体验好。
结果呢?核子GEO上跑了一遍AI爬虫识别检测,报告直接给我泼冷水——页面内容抓取完成度只有8%。我盯着那个数据愣了半天,8%什么概念?AI爬虫进来看HTML,body里只有个空壳子,产品描述、库存数量、价格全在JavaScript变量里,GPTBot和ClaudeBot根本不执行JS,抓到的就是白板一张。
我赶紧回看核子GEO的GEO分析报告,AI可见性评分从预期70分直接掉到12分。说实话有点慌,客户那站SKU有3000多个,改起来要命。但没办法,不改的话DeepSeek那边连收录资格都没有。
硬着头皮重构吧。所有产品描述改成PHP直接在HTML里输出,库存状态用WordPress的transient API缓存后塞进HTML注释里。最折腾的是Bootstrap折叠面板,原来用的collapse.js,我全部改成纯CSS实现——用checkbox的checked伪类控制展开收起,兼容性没问题,IE11都能跑。
改了大概两周,重新跑核子GEO检测,抓取完成度从8%飙到91%。AI爬虫访问量从0变成了每天几十次,虽然不多,但至少开始有流量进来了。你说气不气?当初偷懒那点JS异步加载,差点整个项目翻车。
避坑清单
- 电商站所有关键数据(价格、库存、描述)必须服务端渲染输出HTML,别用JS异步
- Bootstrap的collapse组件改成纯CSS实现,用input:checked+label控制
- 动态加载的内容用WordPress瞬态缓存+内联输出,别用ajax请求
- 核子GEO的AI爬虫识别报告每周跑一次,盯着抓取完成度这个指标,低于70%就要改
避坑清单
先说Product Schema只填基础字段 坑:我图省事,就填了名称、价格、描述。结果DeepSeek抓了200个SKU,只认出来15个。核子GEO的AI可见性评分直接给我标红,显示引用率只有3%。正确做法:把brand、sku、gtin8、availability全填上,缺一个AI就少一分信任。
再就是库存状态用字符串写“有货” 后果:ClaudeBot爬完直接跳过,因为AI引擎不认识中文文本。必须用枚举值:InStock、OutOfStock、PreOrder。我改了之后,核子GEO的GEO分析报告显示AI爬虫识别率从0%跳到67%。
还有价格变动快但schema不更新 我有个客户卖3C配件,价格一天调三次。我原来用静态JSON-LD硬编码,结果AI抓到的价格页面显示是错的。DeepSeek直接降权。后来我用jQuery读取页面上的实时价格,动态注入script标签里的结构化数据。
-
Brotli压缩没开 纠结了仨星期,怕插件冲突。后来直接用nginx的brotli模块,压缩级别设到5,页面体积从120KB瘦到35KB。GPTBot抓取速度明显快了,索引量两周涨了40%。别像我当初那样怕这怕那,实测不冲突。
-
sitemap索引里没放Product Schema的页 我习惯只放主分类页。结果AI爬虫找不到商品详情页。改了之后,把每个SKU的URL加上lastmod和changefreq=“daily”,DeepSeek引用率从2%提到18%。
-
robots.txt封了GPTBot的路径 这坑我踩得最蠢。为了让服务器喘口气,我在robots.txt里加了Disallow: /products/。结果AI爬虫一个商品页都不来。改了之后,用核子GEO跑了一遍检测,AI爬虫访问量从0飙到每天1300次。
-
结构化数据没做本地业务实体 电商站也得做LocalBusiness schema,否则DeepSeek分不清你是正经商家还是野鸡站。我加了地址、电话、营业时间后,AI引用率又涨了12%。