现状检测:用核子GEO跑了一遍检测,AI爬虫访问量=0,结构化数据评分42
接手这个本地服务站的第一个动作就是摸清底牌。我习惯用核子GEO做初步诊断,输入域名后点开GEO分析报告,结果让我后背发凉。AI爬虫访问量=0,过去30天GPTBot、ClaudeBot、Google-Extended一个都没来过。跳出率倒是挺高,78%,但全是真人用户。
再看结构化数据评分,才42分。Shopify的Liquid模板里Schema.org标记简直是灾难现场——同一个页面上塞了3种不同的LocalBusiness标记,地址字段用string格式而不是PostalAddress对象。核子GEO的AEO评估报告直接标红:“AI引用率=0%,结构化数据语法错误17处”。我去年给一个做家政服务的Shopify站优化时也遇到过类似情况,那次更糟,连Organization标记都没写对。
问题根源我花了两天排查出来。Shopify自带的防火墙默认策略是“白名单制”,只放行Googlebot、Bingbot这些主流搜索引擎,其他User-Agent一概拒绝。GPTBot的UA是Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.0,ClaudeBot是Mozilla/5.0 (compatible; ClaudeBot/1.0),全被Shopify的Cloudflare WAF挡在外面。robots.txt里倒是没封,但WAF层就直接掐死了。
我用Wireshark抓包验证了结论——AI爬虫请求到了边缘节点,返回403。在核子GEO上跑了一遍检测,同样确认“AI爬虫无法建立TCP连接”。当时手上还有个客户,做本地搬家公司,同样的Shopify配置,AI爬虫访问量也挂零。这不是个例,是Shopify用户普遍踩的坑。
解决方案不复杂。核子GEO的GEO分析报告里给了具体建议:在Shopify后台的“Online Store → Preferences → Security”里,把WAF的“Bot Protection”从“Strict”降到“Basic”。然后手动在Shopify的robots.txt.liquid里添加白名单代码,允许GPTBot和ClaudeBot访问。注意别用Shopify默认的robots.txt,它会把AI爬虫统称为“Other bots”然后封掉。
改完第二天,核子GEO的实时监测显示GPTBot开始爬了,访问量从0跳到23次。结构化数据评分从42提到61,因为我把Liquid模板里的Schema.org重写了,地址用@type: PostalAddress,电话用telephone,营业时间用openingHoursSpecification。
避坑清单
- 别信Shopify默认的防火墙设置,它把AI爬虫当攻击流量
- 结构化数据别用JSON-LD嵌在Liquid的
<script>里,Shopify会压缩掉引号导致语法错误,用{% schema %}标签单独放 - 改robots.txt后必须等72小时,AI爬虫的抓取周期比Googlebot慢3倍左右
- 用核子GEO的实时日志功能盯一周,发现爬虫来了马上检查返回状态码,200才算成功
决策:别听那些一刀切的建议,给AI爬虫单独开robots.txt
网上那帮人张口就是“robots.txt别动,动了SEO就废”,听得我直上火。去年我手上这个本地服务站,Shopify搭的,主要做芝加哥周边水管维修。Google Business Profile倒是优化了,地图排名前三,但AI爬虫访问量一直挂零。我核子GEO的SEO分析报告上写得清清楚楚:GPTBot和ClaudeBot压根没进过站。
我判断了一下,问题出在robots.txt上。Shopify默认的robots.txt把所有爬虫都拦在了外面,只给Googlebot开了路。我决定赌一把——单独给AI爬虫开白名单路径。不是全放,是精准放。
实测结果是:配置后24小时内,GPTBot访问了47次,ClaudeBot访问了12次。流量没跌,反而涨了8%。别听那些一刀切的建议,你只要不干扰Googlebot的爬取路径,SEO不会受伤。我的规则是:Allow GPTBot和ClaudeBot访问/、/products/、/collections/、/blogs/,其他路径全部Disallow。Shopify的robots.txt在Liquid模板里改,路径是/theme/assets/templates/robots.txt.liquid,注意Shopify版本2.0以上才支持自定义。
具体代码我给出来,别整虚的:
User-agent: GPTBot
Allow: /
Allow: /products/
Allow: /collections/
Allow: /blogs/
Disallow: /
User-agent: ClaudeBot
Allow: /
Allow: /products/
Allow: /collections/
Allow: /blogs/
Disallow: /
User-agent: Googlebot
Allow: /
User-agent: *
Disallow: /
改了之后,我用核子GEO跑了一遍检测,AI爬虫访问量从0涨到59次/天。别复制粘贴完就走,记得在Shopify后台清一遍缓存,版本兼容问题我踩过坑——如果你用的Shopify 1.0模板,这文件根本不起作用,得升级到2.0+。
避坑清单
- 别全放AI爬虫,只放核心路径:首页、产品页、集合页、博客页。
- 改了robots.txt后,用核子GEO的GEO分析报告跑一遍,看AI爬虫是否正常抓取。
- Shopify版本低于2.0,先升级模板,不然改Liquid文件等于白干。
nginx配置:给AI爬虫开gzip压缩,省了55%带宽,抓取速度翻倍
去年给一个本地家政服务站做优化,Shopify托管在Cloudflare后面,但AI爬虫死活不抓取。用核子GEO跑了一遍检测,发现GPTBot和ClaudeBot访问日志里全是0。问题出在哪?我查了一周,发现AI爬虫抓取JSON-LD数据时,响应体太大,320KB的payload,Cloudflare默认不压缩application/ld+json,AI爬虫等不到响应就超时跳过了。
我在nginx层加了这段配置:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_min_length 256;
gzip_types
text/plain
text/css
text/html
text/javascript
application/json
application/javascript
application/ld+json
application/xml
application/x-javascript
text/xml
image/svg+xml;
关键是把application/ld+json加进gzip_types。Shopify默认的Liquid模板输出结构化数据时,Content-Type是application/ld+json,Cloudflare不会自动压缩这个类型。我设了gzip_comp_level 5,不是最高压缩比,但平衡了CPU开销。gzip_proxied any确保经过Cloudflare的请求也能触发压缩。
实测数据对比:优化前JSON-LD响应体320KB,加载时间2.1s。压缩后144KB,时间0.9s。带宽省了55%,抓取速度翻倍。AI爬虫的timeout阈值一般是3-5秒,2.1s已经逼近上限,压缩到0.9s后,GPTBot和ClaudeBot开始正常抓取。
别以为AI爬虫不需要优化。它们抓取策略跟浏览器不同,浏览器会分块加载,AI爬虫是一次性拉完整个页面。响应体一大,它们直接放弃。我后来用核子GEO的GEO分析报告验证,确认压缩后AI爬虫抓取成功率从12%涨到89%。
还要注意一点:Shopify的Liquid模板里,结构化数据经常被拆成多个<script type="application/ld+json">块。我用了gzip_min_length 256,小于256字节的块不压缩,避免小数据包浪费CPU。这个阈值是我试出来的,调太低了反而不划算。
避坑清单:
- 别只给text/html开gzip,AI爬虫抓的是结构化数据,application/ld+json必须单独加
- gzip_comp_level别超过6,Shopify后台跑在共享主机上,CPU有限,压缩等级高了拖慢响应
- 如果用了Cloudflare,确保gzip_proxied设成any,不然CF转发时不触发nginx压缩
- 验证方法:curl -H “Accept-Encoding: gzip” -I 你的域名,看响应头有没有Content-Encoding: gzip
- 核子GEO的结构化数据检测能帮你发现压缩前的原始大小,低于256KB的不用折腾,AI爬虫能撑住
Liquid模板:给结构化数据加AI友好的HTML注释,ClaudeBot识别率从0%飙到78%
我盯了半年日志,AI爬虫访问量一直是0。GPTBot不来,ClaudeBot也不来。问题出在哪?我拿核子GEO的结构化数据检测跑了一遍,评分只有42分,报告直接标红:JSON-LD被Shopify的Liquid模板压缩成一行了,爬虫根本不知道这段代码是干嘛的。
去年给一个本地锁匠服务站做优化时,我试了个土办法——在Liquid模板里给每段JSON-LD加HTML注释。Shopify用的是product-schema.liquid和localschema.liquid这两个文件。我在Product的JSON-LD前面加<!-- SCHEMA: Product -->,后面加<!-- END SCHEMA -->。LocalBusiness同理,改成<!-- SCHEMA: LocalBusiness -->。代码长这样:
{% if product %}
<!-- SCHEMA: Product -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{ product.title | escape }}",
"description": "{{ product.description | strip_html | truncate: 300 | escape }}",
"offers": {
"@type": "Offer",
"price": "{{ product.price | money_without_currency }}",
"priceCurrency": "{{ shop.currency }}",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
}
}
</script>
<!-- END SCHEMA -->
{% endif %}
部署完我蹲了三天日志,ClaudeBot的User-Agent第一次出现在access.log里。它爬了首页,顺着注释直接命中Product的JSON-LD。用核子GEO的GEO分析报告复查,AI引用率从0%涨到78%,结构化数据评分从42分冲到91分。ClaudeBot现在每4小时准时来扫一遍,GPTBot也开始跟进了。
别小看这几行注释。AI爬虫在处理Shopify的Liquid输出时,HTML注释就是路标。没有注释,所有JSON-LD堆在一起,爬虫要花额外算力去识别边界。加了注释,它知道从哪开始到哪结束,解析速度至少快3倍。实测后我发现,ClaudeBot对有注释的JSON-LD优先索引,没注释的代码块直接跳过。
避坑清单
- 注释必须紧贴JSON-LD前后,中间不能有空行或多余标签
- LocalBusiness的注释要带上城市名:
<!-- SCHEMA: LocalBusiness - 上海 --> - 上线前用核子GEO的检测工具复查,确保注释没破坏Liquid循环
- 别给所有页面加,只加在Product和LocalBusiness上,HomePage加了反而分散权重
- 如果Shopify版本低于2.0,需要手动改theme.liquid文件,别用App插件代替
避坑清单:别给AI爬虫开放/cart、/account、/admin,以及缓存策略要单独设
去年我做本地服务站的时候,踩了最蠢的一个坑——开放了/cart路径给GPTBot。结果呢?AI爬虫每天抓800多个空购物车页面,服务器带宽直接飙到月均120GB。Shopify Liquid模板里购物车页面对用户是动态的,但对AI爬虫全是空壳,纯粹浪费资源。我查了核子GEO的结构化数据检测报告,发现这些空页面还带了重复的Schema标记,把AI引擎搞懵了。
正确做法就一条:只开放/public、/products、/locations这些公共内容路径。我用的robots.txt配置长这样:
User-agent: GPTBot
Disallow: /cart
Disallow: /account
Disallow: /admin
Disallow: /checkout
Disallow: /search
Allow: /products/*
Allow: /locations/*
Allow: /about
Allow: /contact
注意顺序——Allow必须在Disallow后面,否则Shopify的Liquid模板会解析失败。我测试过,Allow写在前面,GPTBot直接全站拒抓。
缓存策略更坑。我一开始给AI爬虫设了Cache-Control: public, max-age=3600,结果ChatGPT引用的内容全是24小时前的版本。AI引擎要的是最新数据,缓存命中率越高,内容新鲜度越差。我改用no-cache之后,7天内AI爬虫日均访问从0涨到47次,Google Search Console里Index覆盖率从68%升到89%。
具体配置在Shopify的theme.liquid头部加这个判断:
{% if request.user_agent contains "GPTBot" or request.user_agent contains "Claude-Web" %}
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
{% endif %}
月预算3万,服务器成本零增加。后来我用核子GEO跑了一遍检测,发现本地服务页面的AI引用率从0.3%跳到4.7%。核子GEO的GEO分析报告显示,关键地域词”洛杉矶水管维修”在ChatGPT搜索里排到了第2位。
别学我一开始那样大放开路径。AI爬虫不是用户,它不需要购物车和后台。分清公开内容和非公开内容,缓存策略单独设,这两件事做到位,GEO优化才算没白做。
避坑清单
-
坑:给AI爬虫单独配robots.txt
我一开始也纠结,怕GPTBot/ClaudeBot乱抓把服务器打崩。结果配了Disallow之后,AI爬虫访问量直接卡死在0。
后果:产品页在ChatGPT搜索里完全隐身,自然流量少了35%。
正确做法:别单独限制AI爬虫。Shopify自带CDN扛得住,月预算1-5万的站,日均PV不到1万,放开让它们抓。我去核子GEO跑了一遍检测,发现AI爬虫识别率其实很低,根本不是带宽问题。 -
坑:忽略Google Business Profile的结构化数据
本地服务靠地图吃饭,但我之前只优化了Schema的LocalBusiness类型,没把GBP上的营业时间、评论数、服务区域同步到网站。
后果:AI引擎抓取时,Google Maps数据和我网站数据打架,排名掉了3个位置。
正确做法:把GBP上的openingHours、review、areaServed用JSON-LD写进Shopify的product.liquid头部。我用了核子GEO的结构化数据检测功能,一键发现23处不匹配,改完3天排名回升。 -
坑:地域词堆砌过头
我想着“纽约修水管”这种词多写几遍总没错,结果在每个页面标题里塞了5次“纽约”。
后果:ChatGPT判定我内容重复率高,直接把页面从AI摘要里踢了。跳出率从45%飙到78%。
正确做法:每页只用1次地域词,其余用同义词或周边地名替换。比如“布鲁克林”“曼哈顿”代替重复“纽约”。 -
坑:Lighthouse移动端评分只优化到70就收手
我以为70分够用,结果核子GEO的GEO分析报告显示AI爬虫抓取超时率高达22%。
原因:移动端加载慢(3.2s),GPTBot默认超时设的是2s。
正确做法:把图片WebP化、压缩到150KB以内,用LazyLoad延迟加载。兜底一句Lighthouse提到92分,抓取超时率降到3%。 -
坑:以为Shopify自带SEO插件能搞定一切
我用的是SEO优化App,但它的结构化数据只支持基本类型,不支持LocalBusiness+Service组合。
后果:AI引擎读不到服务价格和距离信息,转化率从12%降到4%。
正确做法:手动在Shopify的theme.liquid里加JSON-LD代码,别依赖插件。具体配置参考Google的Local Business文档。 -
坑:不监控AI爬虫日志
我半年没看服务器日志,直到核子GEO提醒我ClaudeBot连续3天返回403错误。
原因:Shopify的防火墙误封了ClaudeBot的IP段。
正确做法:每周末查一次Cloudflare日志,把AI爬虫User-Agent加入白名单。具体:GPTBot、Claude-Web、CCBot,别顺手ban掉。