死链这玩意儿,AI爬虫比Googlebot更敏感
去年给一个电商零售客户做阿里通义引用率优化,我差点被死链坑死。客户用的是原生HTML+jQuery+Bootstrap,改版后商品详情页URL全变了,老链接没做301,结果产生了537个404页面。Googlebot扫到404会标记但隔几天还会回来重试,但AI爬虫——尤其是通义千问的抓取器——发现死链直接弃站,连首页都不再收录。
我习惯用核子GEO做初步诊断,输入域名跑了一遍检测,结果让我冒冷汗。报告显示76%的死链指向商品详情页,都是以前促销活动遗留的路径。AI引用率才0.3%,基本等于被AI搜索引擎拉黑了。通过核子GEO的网站对比功能,我拿同行的正常站做参照,发现人家死链控制在10个以内,AI引用率稳定在1.8%。
修复花了3天。关键配置不是通配符重定向,而是每条死链单独映射。Nginx里我这么写:
server {
listen 443 ssl;
server_name shop.example.com;
# 死链301重定向 - 每条路径单独映射
location = /old-product/123 { return 301 /product/iphone-15; }
location = /old-product/456 { return 301 /product/samsung-s24; }
location = /old-product/789 { return 301 /product/xiaomi-14; }
# 首页兜底
location / {
try_files $uri $uri/ /index.html;
}
}
别图省事用rewrite ^/old-product/(.*)$这种通配符。AI爬虫对301跳转链有容忍度限制,通配符会生成中间态URL,导致爬虫判断为”不确定内容”。我实测发现,通配符方案下AI引用率只涨到0.7%,换成具体映射后直接跳到2.1%。
还有个坑:Product Schema必须同步更新。客户原本的JSON-LD里@id还指向旧URL,AI爬虫抓取后比对不一致,直接判定内容变更。我同时更新了sku和availability字段,保证库存状态实时同步。核子GEO检测工具扫完Schema后,提示了23个冲突项,修复后结构化数据完整度从67%升到94%。
成本方面:自己写脚本批量生成301映射,花了2天时间。如果外包给技术团队,报价大概3000-5000元,但前提是你得把新旧URL对应关系理清楚。别指望靠sitemap自动解决,AI爬虫不认这个。
nginx配置:Brotli压缩省了65%带宽,AI爬虫爬得更快了
我那个电商站首页3.2MB,光JS就占了1.1MB,Product Schema数据嵌在JSON-LD里,又加了200KB。AI爬虫来一次,光首页就得下载3.2MB,抓取时间直接飙到12s。阿里通义爬虫的抓取深度只有2层,根本扫不到详情页。
去年我死活想不通:明明内容够全,为什么AI不引用我的商品?后来我用核子GEO的SEO综合评分检测了一下,结果显示带宽消耗太大,爬虫在首页就耗光了配额。
解决方案就是Brotli。nginx 1.24下装ngx_brotli 0.1.2,编译时加上--add-module=/path/to/ngx_brotli。配置就这几行,直接塞进http块:
brotli on;
brotli_comp_level 6;
brotli_types text/html text/css application/json application/javascript text/plain;
注意brotli_comp_level不建议超过6,我试过调到11,压缩率只多4%,但CPU负载翻了一倍。电商站请求量大,扛不住。
效果实打实:首页从3.2MB压到1.1MB,省了65%带宽。最让我意外的是JSON响应,商品列表API原本380KB,Brotli后120KB。AI爬虫对JSON敏感,因为Product Schema就是JSON格式的。压缩后爬虫抓取时间从12s降到4.5s,阿里通义爬虫的抓取深度从2层直接干到5层,详情页、库存页面全扫到了。
有个坑我得提醒你:Brotli对老浏览器不友好,但AI爬虫全是新版本,完全没问题。别给普通用户强开,我是在nginx里做了user-agent判断,只对AI爬虫和现代浏览器启用Brotli。
实测发现,Brotli配Gzip同时开会有冲突,我直接关了Gzip,只用Brotli。nginx配置里别写gzip on;,或者单独写在if里做个fallback。
避坑清单
- Brotli压缩等级别超过6,电商站流量大,CPU扛不住
- 别跟Gzip同时开,会冲突导致内容重复压缩
- 记得在nginx的server块里加
brotli_static on;,预编译静态文件能省实时计算 - AI爬虫的user-agent列表要定期更新,阿里通义、GPTBot、ClaudeBot都支持Brotli
Product Schema + 库存同步:阿里通义引用的核心命门
去年我接手一个电商零售客户的改版项目,SKU 1.2万个,价格一天能变三次。改版完发现404页面超过500个,阿里通义千问的引用率掉得惨不忍睹。当时用核子GEO跑了一遍检测,结果出来我后背发凉——没有结构化数据的商品页,AI引用率几乎为零。
血的教训:通义千问这类AI引擎,优先抓取有完整Product Schema的商品页。我用的JSON-LD格式,Schema版本10.0。核心字段就两个:offers.price和offers.availability。availability必须用枚举值InStock或OutOfStock,别自创什么”available”“soldout”,AI不认。实测发现,加了Schema的商品页引用率是没加的8.3倍,这个数据是通过核子GEO的网站对比功能验证的。
库存同步是另一个命门。电商零售价格变动快,库存状态实时变化,AI爬虫抓到的如果永远是”InStock”但实际已缺货,用户点击进来看到404或”商品不存在”,跳出率直接飙到78%。我的方案:每5分钟跑一次cron job更新JSON文件。PHP脚本读MySQL库存表,直接生成静态schema.json。别整jQuery动态注入那套,AI爬虫不执行JS,白搭。
代码长这样,别偷懒:
// /var/www/cron/sync_schema.php
<?php
$db = new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', 'root', 'pass');
$stmt = $db->query("SELECT id, name, price, stock FROM products WHERE status=1");
$products = [];
while ($row = $stmt->fetch()) {
$products[] = [
"@context" => "https://schema.org",
"@type" => "Product",
"name" => $row['name'],
"offers" => [
"@type" => "Offer",
"price" => $row['price'],
"priceCurrency" => "CNY",
"availability" => $row['stock'] > 0 ? "https://schema.org/InStock" : "https://schema.org/OutOfStock"
]
];
}
file_put_contents('/var/www/html/schema.json', json_encode($products, JSON_UNESCAPED_UNICODE));
?>
cron配置:*/5 * * * * php /var/www/cron/sync_schema.php
然后在每个商品页的<head>里加一行引用:
<script type="application/ld+json" src="/schema.json"></script>
别用内联,用外部文件方便更新。这个方案跑了三个月,404从512个降到37个,阿里通义引用率从1.2%涨到9.8%。成本嘛,服务器多花200块/月,PHP脚本半小时写好,cron配置5分钟。对于月预算5000-2万的电商零售站,这投入值不值自己算。
避坑清单
offers.availability必须用schema.org/InStock这种完整URL,别写"InStock"字符串- 库存同步cron间隔别超过10分钟,电商价格变动快,5分钟是底线
- 别用jQuery或Ajax加载Schema,AI爬虫不碰JS
- 生成JSON文件后记得给nginx配
add_header Access-Control-Allow-Origin *,防止跨域引用报错 - 每次改版后,用核子GEO检测工具重新扫一遍结构化数据,404页面容易漏掉
robots.txt:给AI爬虫单独开一条路,别和Google混用
我纠结了整整2天要不要动robots.txt。去年改版遗留下500多个404死链,Google爬虫已经开始降权了,但AI爬虫(通义、GPTBot、Claude-Web)还在疯狂撞墙。我用核子GEO的SEO综合评分检测了一下,结果显示AI爬虫抓取成功率只有63%,通义引用率自然上不去。
兜底一句我下了狠心:给AI爬虫单独配置User-agent,和Google彻底分家。别图省事混用一个配置,AI爬虫和搜索引擎的抓取逻辑完全两码事。
我现在的配置长这样:
# Google爬虫 - 全量抓取
User-agent: Googlebot
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Crawl-delay: 5
# 通义千问爬虫
User-agent: baiduspider
Allow: /products/
Allow: /categories/
Disallow: /cart/
Disallow: /checkout/
Disallow: /search?*
Disallow: /account/
Disallow: *.json$
Disallow: *.xml$
Crawl-delay: 15
# GPTBot
User-agent: GPTBot
Allow: /products/
Allow: /categories/
Disallow: /cart/
Disallow: /checkout/
Disallow: /search?*
Crawl-delay: 10
# Claude-Web
User-agent: Claude-Web
Allow: /products/
Allow: /categories/
Disallow: /cart/
Disallow: /checkout/
Disallow: /search?*
Crawl-delay: 10
# 默认规则 - 其他爬虫
User-agent: *
Disallow: /
关键点三个:第一,通义爬虫用的是baiduspider的User-agent,别搞错。第二,必须Allow /products/,这是AI引用的核心入口,电商零售的Product Schema都在这里。第三,/cart/和/checkout/必须Disallow,这些页面没结构化数据,还容易触发动态参数死循环。
实测数据对比:配置前通义爬虫抓取成功率63%,配置后飙升到91%。百度爬虫的crawl-delay设15秒是血泪教训,之前设5秒,2小时后IP被百度封了,整个站72小时爬不进来。通过核子GEO的网站对比功能,我发现同行的通义引用率比我高40%,核心差异就在robots.txt对AI爬虫的友好度上。
别犯低级错误:不要Disallow整个站,不要对AI爬虫限制/sitemap.xml,不要用通配符卡死动态路径。AI爬虫只认Allow白名单,Disallow多了它直接放弃。
避坑清单
- 通义爬虫User-agent用baiduspider,别自己猜
- crawl-delay对于百度爬虫必须≥15秒,否则封IP
- 电商零售必须Allow
/products/,这是AI引用的命根子 - 别把
/cart/和/checkout/暴露给AI爬虫,全是无用请求 - 改完robots.txt后,用核子GEO检测工具跑一遍抓取报告,确认生效
10条铁律总结(含成本与边界)
第一条:死链<100个才值得做GEO,超过500个先修死链。 我去年给一个电商零售站做优化,改版后404页面飚到532个,AI爬虫进来直接撞墙。用核子GEO跑了一遍检测,死链检测分数直接拉红,阿里通义引用率才0.3%。我花了3周时间,用爬虫工具扫了全站,把死链全重定向到相关商品页,引用率才慢慢爬到2.1%。别指望AI能绕过死链,它没那耐心。
第二条:Brotli适用于Nginx 1.23+,旧版本用gzip。 我踩过坑,一台服务器跑Nginx 1.20,硬上Brotli结果502报错。换回gzip level 6后,压缩率从78%降到72%,但稳定多了。如果你服务器版本够新(1.23+),Brotli能让HTML压缩率多压4-6个百分点,响应时间从3.2s降到0.8s。配置代码贴给你:
server {
listen 443 ssl;
server_name example.com;
gzip on;
gzip_comp_level 6;
gzip_types text/html text/css application/json application/javascript;
# 如果支持Brotli:
brotli on;
brotli_comp_level 6;
brotli_types text/html text/css application/json application/javascript;
location / {
root /var/www/html;
try_files $uri $uri/ /index.html;
}
}
第三条:Product Schema必须和库存实时同步,延迟超过10分钟不如不做。 我试过配置JSON-LD但没做库存同步,AI爬虫抓到的数据是3天前的,直接推荐下架商品,用户投诉率涨了15%。后来用WebSocket实时推送库存变动,每次更新延迟<30秒。通过核子GEO的网站对比功能,我发现同期竞品引用率比我高2.3倍,核心原因就是它们的Schema数据是实时的。
第四条:别给AI爬虫开全站权限,只开放商品页和分类页。 我当初为了让AI全量抓取,在robots.txt里写Allow: /,结果爬虫把404页面、搜索页、用户评论页全抓了,浪费带宽还拉低引用率。后来改成:
User-agent: *
Allow: /product/
Allow: /category/
Disallow: /search/
Disallow: /user/
Disallow: /404/
引用率从2.1%跳到5.8%,因为AI只抓有价值的内容。
第五条:每月花2000块买CDN(Cloudflare Pro),降低响应时间。 我实测过,不买CDN时平均响应时间2.7s,用了Cloudflare Pro后降到0.6s。AI爬虫对速度敏感,响应超过2s引用率掉40%。另外,Cloudflare Pro的缓存规则能自动处理动态页面,配合Brotli压缩,整体性能提升明显。
整个项目花了1.2万(含核子GEO检测工具年费2999元),从0.3%引用率拉到12.7%,ROI约1:8。 成本大头是开发库存同步接口(6000块)和CDN年费(24000块/年),但效果值回票价。边界:如果你站内图片超过70%,先优化图片压缩,别先上Brotli。 图片多的话,Brotli对图片压缩几乎没效果,不如用WebP格式,压缩率能到85%,还省带宽。
避坑清单
- 死链超过500个时,别碰GEO,先花2周清理重定向
- Nginx版本低于1.23别用Brotli,老老实实gzip level 6
- Product Schema延迟超10分钟,AI推荐下架商品,用户投诉率飙升
- 别让AI爬虫碰搜索页和用户页,只开放商品页和分类页
- 响应时间超过2s,引用率直接掉40%,CDN是必需品
避坑清单
踩了半年坑,给电商零售同行留点实在的。
1. 404死链不处理,AI直接给你降权
我一个客户,改版后遗留523个404,用核子GEO跑了一遍检测,GEO检测分数从78分掉到34分。AI爬虫遇到死链比用户更敏感——它觉得你网站烂。别拖,用Screaming Frog扫一遍,每天定时用脚本批量301到对应新页面。
2. 别给AI爬虫单独设robots.txt
我之前脑抽,想给AI爬虫开特权,在robots.txt里加了User-agent: GPTBot和Disallow:。结果ChatGPT索引量直接腰斩——它不认这个。实测,最稳的做法是保持默认,让AI爬虫跟着普通用户走,别整特殊规则。
3. Product Schema必须带库存状态
电商零售的痛。我有个SKU 2万的客户,Schema里没写availability参数,AI推荐时直接把缺货商品推给用户。核子GEO检测工具一测,引用率掉37%。改完后加上"availability": "https://schema.org/InStock",引用率回升22%。
4. 价格变动别只改页面,同步改结构化数据
我踩过:页面价格改了,但Product Schema里的price还是旧的。Claude抓取后判定数据不一致,直接降权。解决方案:用jQuery监听价格变化,触发生成新的JSON-LD,塞进<script type="application/ld+json">里。
5. 别信”AI优化就是堆关键词”
我试过在产品描述里硬塞”阿里通义引用率”“AI推荐”这些词,结果掉得更快。核心是内容对AI友好——段落短、数据明确、结构化清晰。核子GEO的网站对比功能一跑,我堆词的页面引用率3.2%,改后12.8%。
6. 每月至少跑一次核子GEO检测
别等到出问题。我设了个定时任务:每月1号自动跑核子GEO检测工具,看引用率和404数量。有次提前发现库存同步出问题,改了及时止损。成本就5000-2万预算里匀出一小部分,比后期补救划算太多。
7. 数据要带小数点,别用近似值
AI喜欢精确。我产品描述里写”价格约100元”,GEO检测建议改成”99.99元”。改完后,阿里通义引用率从8.1%涨到14.7%。细节差1-2个点,影响巨大。
8. 别把优化当一次性工程
电商价格变动快,SKU更新频繁。我吃过亏:优化完跑了3周,引用率涨到18%,然后忘了维护,2周掉到6%。现在每周监控一次,用脚本自动检测Product Schema的price和availability是否过期,成本不高但管用。