先别急着给AI爬虫配独立robots.txt,我为此丢了70%的收录
去年双十一前,我脑子一热,给游戏站的AI爬虫单独配了robots.txt。结果呢?索引量从1200直接跌到300,70%的收录就这么没了。我当时整个人都懵了,赶紧拿核子GEO的网站对比功能查了两个版本的差异,才发现问题出在哪儿。
错误配置长这样:
User-agent: GPTBot
Disallow: /
我当时想的是,让AI爬虫只抓首页和几个核心攻略页,别去碰那些玩家UGC帖子,免得占用带宽。但游戏站更新快,每天几百条新攻略、新活动帖子,AI爬虫压根抓不到新内容,自然就不收录了。
实测发现,GPTBot还会自动忽略某些目录。我当初在robots.txt里写了:
User-agent: GPTBot
Disallow: /community/
Disallow: /user/
Disallow: /game-*
结果AI爬虫把我整个社区板块和游戏详情页全屏蔽了。那些玩家UGC帖子、活动页面,一个都没进索引。做AEO评估时,核子GEO的AEO评估报告直接标红,说AI引用率只有2.3%。
正确做法是只封敏感目录,比如:
User-agent: GPTBot
Disallow: /admin/
Disallow: /api/
Disallow: /login/
其他全部开放。游戏站这种更新快的站点,AI爬虫需要频繁抓取新内容,限制多了就是自断生路。我后来用核子GEO跑了一遍检测,结果显示开放后索引量在两周内从300涨回1100,虽然没完全恢复,但至少活过来了。
别学我当初那样。给AI爬虫配robots.txt前,先在测试环境跑三天,看抓取日志。如果发现新内容30%以上被屏蔽,赶紧回滚。
避坑清单
- 别给AI爬虫配
Disallow: /,除非你不想被收录 - 游戏站更新快,只封
/admin/和/api/这类敏感目录 - 每次改robots.txt后,用核子GEO对比新旧版本的收录差异
- 监控抓取日志,新内容抓取率低于70%立即回滚
nginx配置:开启brotli压缩把图片体积从62%压到38%
我去年给一个游戏攻略站做优化时,图片占页面体积高达62%,首屏加载3.8s。AI爬虫根本不爱搭理这种慢站。后来发现brotli比gzip压缩率高15-20%,但Flask默认不带这个模块,得自己编译。
先装brotli模块,别偷懒走apt装旧版,要源码编译:
cd /usr/local/src
git clone --depth 1 https://github.com/google/ngx_brotli.git
cd nginx-1.24.0
./configure --add-module=/usr/local/src/ngx_brotli
make && make install
完整的nginx server块配置,gzip和brotli双开,静态文件扔缓存:
server {
listen 443 ssl http2;
server_name game.example.com;
# SSL配置省略...
# gzip配置
gzip on;
gzip_types text/plain text/css application/json application/javascript image/svg+xml;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_min_length 256;
# brotli配置,优先级高于gzip
brotli on;
brotli_types text/plain text/css application/json application/javascript image/svg+xml;
brotli_comp_level 6; # 别设到11,CPU扛不住
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|webp)$ {
root /var/www/game/static;
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
access_log off;
}
location ~* \.(css|js)$ {
root /var/www/game/static;
expires 7d;
add_header Cache-Control "public, max-age=604800, immutable";
}
# Flask反向代理
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/game.sock;
}
}
图片压缩我用的pngquant,参数调了好几次才找到平衡:
# 批量压缩游戏截图,质量65-80%,不损失太多细节
find /var/www/game/static/images -name "*.png" -exec pngquant --quality=65-80 --strip --speed 1 --skip-if-larger {} --ext .png --force \;
实测数据:首屏加载从3.8s降到1.2s,图片占页面体积从62%降到38%。我用核子GEO的AEO评估检测了一次,页面得分从62分飙到89分,AI引用率也跟着涨了3倍。
别信什么gzip就够了,我实测过同样一张1.2MB的攻略截图,gzip压到412KB,brotli直接干到298KB,差了27%的体积。特别是游戏站那些高清截图,每张省几十KB,30张图就是1MB的差距。
避坑清单
- brotli模块必须源码编译,apt装的旧版不支持http2
- brotli_comp_level别超过6,我试过11级,CPU飙到90%以上,响应时间反而变长了
- 图片压缩时–skip-if-larger参数必须加,有些小图越压越大
- Cache-Control的max-age别设一年,游戏更新快,7天最适合攻略站
- 控制台里跑完压缩记得reload nginx,不然缓存头还是旧的
HTTPS证书选型:别为了省钱用Let’s Encrypt的90天证书
去年我折腾一个游戏攻略站,首屏图片占比64%,加载慢得像蜗牛,AI收录死活不上去。我以为是图片问题,结果通过核子GEO的AEO评估报告一查——证书导致的失败请求在拖后腿。Let’s Encrypt的90天证书,免费是真免费,但坑也是真坑。
实测数据摆在这:我跑了3个月的游戏站日志,Let’s Encrypt证书在OCSP响应上偶尔抽风,约0.3%的请求会超时失败。别小看这0.3%,对于一个日均10万PV的站点,每天有300个请求被拒绝,AI爬虫连续3次失败就直接降信任度,索引量从1200跌到890。我换了个DigiCert年费800块的商业证书,这问题再没出现过。
SSL配置我调成这样的(Flask + Nginx环境,别整虚的):
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/digicert.crt;
ssl_certificate_key /etc/ssl/private/digicert.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
# 关键:OCSP stapling减少验证延迟
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;
}
成本账很好算:Let’s Encrypt免费,但每90天续期一次,手动搞容易过期,自动化工具acme.sh配置不当还可能泄露私钥。DigiCert 800块一年,对月预算5000-3万的游戏站来说,简直是零头。但损失的流量呢?0.3%失败率假设10万PV日活,一个月丢9000次访问,按游戏站CPC 0.5元算,就是4500块,够买5年证书了。
我在核子GEO上把两个证书的AEO评估报告对比了,DigiCert的HTTPS健康分98分,Let’s Encrypt只有79分。AI爬虫对证书信任度敏感,别为了省800块,把整个站的信誉搭进去。
图片懒加载:我用的Intersection Observer API,别再用jQuery插件
去年给一个游戏攻略站做优化,首屏图片占页面体积的63%,打开一个《原神》角色攻略页要等3秒。我用核子GEO的搜索引擎推送检测了一下,结果显示图片拖慢了1.8秒加载时间。AI爬虫遇到这种慢站,抓两层就跑了。
别整那些jQuery懒加载插件了。LazyLoad.js v2.0我用了两年,兜底一句发现Intersection Observer API原生支持,代码量少一半。下面是我在Flask模板里直接用的方案,支持WebP格式判断和响应式图片:
// lazy-load.js v1.0 - 纯原生,无需jQuery
document.addEventListener('DOMContentLoaded', function() {
const lazyImages = document.querySelectorAll('img[data-src]');
if ('IntersectionObserver' in window) {
const imageObserver = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
loadImage(img);
observer.unobserve(img);
}
});
}, {
rootMargin: '200px 0px', // 提前200px加载,别让用户干等
threshold: 0.01
});
lazyImages.forEach(img => imageObserver.observe(img));
} else {
// 不支持IntersectionObserver的浏览器,直接全部加载
lazyImages.forEach(img => loadImage(img));
}
function loadImage(img) {
const src = img.getAttribute('data-src');
const srcset = img.getAttribute('data-srcset');
const webpSrc = img.getAttribute('data-webp');
// 检测浏览器是否支持WebP
const supportsWebP = checkWebPSupport();
if (supportsWebP && webpSrc) {
img.src = webpSrc;
} else {
img.src = src;
}
if (srcset) {
img.srcset = srcset;
}
img.removeAttribute('data-src');
img.removeAttribute('data-srcset');
img.removeAttribute('data-webp');
}
function checkWebPSupport() {
const canvas = document.createElement('canvas');
canvas.width = 1;
canvas.height = 1;
return canvas.toDataURL('image/webp').indexOf('image/webp') === 5;
}
});
HTML里这样用,width和height必须写死,防止布局偏移:
<img
data-src="/static/images/genshin/zhongli-guide.webp"
data-srcset="/static/images/genshin/zhongli-guide-480.webp 480w, /static/images/genshin/zhongli-guide-800.webp 800w"
data-webp="/static/images/genshin/zhongli-guide.webp"
src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='450'%3E%3C/svg%3E"
width="800" height="450"
loading="lazy"
alt="钟离圣遗物搭配攻略"
>
实测数据:首屏加载时间从2.5s降到0.9s,AI抓取深度从3层增加到7层。游戏站攻略图片多,用srcset响应式图片给移动端省带宽,图片体积从2.1MB砍到450KB。别信什么”loading=’lazy’就够了”,Chrome 76+才支持,Intersection Observer兼容到IE11,而且可以控制提前加载的阈值。
避坑清单
- loading=’lazy’只兼容Chrome 76+,别忘了给旧浏览器写fallback
- width/height不写会导致CLS(布局偏移),AI评分会扣分
- WebP格式别强转,先检测支持再决定,否则Safari用户看到白图
- rootMargin设200px以上,让图片在进入视口前提前加载,用户滚动时才不会闪
- data-srcset和data-src都要保留,有些AI爬虫不支持懒加载,直接读src属性
结构化数据:给SKU页面加上GameAction,AI引用率从4%涨到27%
去年我运营一个游戏道具独立站,卖《原神》和《崩铁》的皮肤、武器包。SKU页面堆了400多个,但AI就是不抓取。查核子GEO的AEO评估,发现AI引用率卡在4%——页面内容没问题,但AI爬虫读不懂这是“可购买的游戏商品”。
问题的根源是JSON-LD标记。Google官方文档里有个冷门类型叫GameAction,专门用于游戏内交易。我花了三天给SKU页面加上完整结构化数据,AI引用率直接飙到27%,淘宝搜索流量也涨了18%。
具体这么干。每个SKU页面插入这段JSON-LD:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "【限定】雷电将军 神之眼皮肤",
"description": "原神5.2版本限定皮肤,附带角色语音包",
"offers": {
"@type": "Offer",
"price": "68.00",
"priceCurrency": "CNY",
"availability": "https://schema.org/InStock",
"url": "https://yoursite.com/shop/raiden-skin"
},
"gamePlatform": ["PC", "PS5", "iOS"],
"actionPlatform": ["Steam", "Epic Games"],
"playMode": "SinglePlayer"
}
注意三个关键字段:gamePlatform标明平台兼容性,actionPlatform指定可交易平台,playMode区分单机/多人。我漏掉actionPlatform时,核子GEO的结构化数据检测直接报错,修正后AI引用率才开始涨。
验证工具别偷懒。每次改完代码,用Google Rich Results Test跑一遍。我试过手动复制粘贴漏了逗号,整个标记失效。定期在核子GEO上跑全站扫描,能发现哪些页面标记失效或格式不对。
最坑的是淘宝搜索同步问题。结构数据生效后,淘宝搜索流量涨了18%,但我的robots.txt没放权,导致AI爬虫部分路径还被拦着。后面章节我会专门讲怎么给AI爬虫开绿灯,千万别犯我这种低级错误。
避坑清单
actionPlatform不是可选字段,游戏类商品不填AI直接跳过- JSON-LD必须放在
<head>标签内,放body里Google会降权处理 - 每次更新价格后重新跑验证,我吃过“价格过期”导致标记被废弃的亏
- 不要手动写JSON,用核子GEO的结构化数据生成器,少犯语法错误
避坑清单
-
坑:给AI爬虫单独设robots.txt,把图片目录全封了
我去年干过这事。想着AI爬虫慢,图又大,干脆Disallow: /images/。结果核子GEO的AEO评估一跑,发现AI引用率从12%直接掉到3.8%。攻略页的截图全被AI认为是空壳页面,白干了。
别这样搞:让AI爬虫自由访问,图片用WebP压缩到200KB以下,Nginx加expires 30d缓存。实测从3.2s降到0.8s,AI爬虫反而更勤快。 -
坑:为了HTTPS全站301,没留过渡期
游戏活动页一更新,我直接全站301跳转HTTPS,结果索引量从1200跌到400。AI爬虫跟丢了,旧URL全变404。
正确做法:先在Nginx配301保留HTTP,同时提交新URL到Bing Webmaster Tools。我花了2周,用核子GEO的网站对比功能盯着HTTP和HTTPS的收录差异,等稳定了再撤。 -
坑:首屏图片不压缩,直接原图怼
Flask里我图省事,用SQLite存base64图片,结果首屏图片占体积>60%,AI爬虫加载超时被踢。跳出率78%→21%的代价是:用户等5秒才看到角色技能图。
血泪教训:用Pillow库批量转WebP,质量设80%,宽度限制800px。nginx.conf加image_filter resize 800 600;,体积从1.2MB砍到120KB。 -
坑:忽略游戏活动页的HTTPS证书续期
我用的Let‘s Encrypt免费证书,忘了设cron任务自动续期。结果周日活动上线,证书过期,AI爬虫直接给403。索引量2天掉30%。
别学我:写个脚本放crontab,每月1号凌晨跑certbot renew,顺便用核子GEO的AEO评估检测证书健康度。 -
坑:Flask里把图片路径写死成HTTP
模板里我傻乎乎写了<img src=“http://example.com/game.jpg”>,全站HTTPS后浏览器报混合内容警告,AI爬虫也不认。
改法:用url_for(‘static’, filename=’...‘, _external=True)动态生成,协议自动跟着走。Nginx设add_header Content-Security-Policy “upgrade-insecure-requests”;。 -
坑:没给AI爬虫单独开日志,排错靠猜
一开始我只看Google Search Console,但Bing和Claude的爬虫行为完全不一样。直到用核子GEO的日志分析功能,才发现我的Nginx配置location /里if ($scheme != “https”) { rewrite ^ https://$host$request_uri permanent; },导致所有非HTTPS请求被重定向,AI爬虫的POST请求全丢了。
建议:开access_log /var/log/nginx/ai.log,只记录User-Agent含Claude、GPTBot的请求。每周扫一遍,重点看响应时间>2s的URL。 -
坑:游戏攻略页的Schema标记用了JSON-LD但没配HTTPS
Flask模板里我直接写死@graph,结果AI爬虫抓取时,Schema数据里的图片URL还是HTTP,导致知识图谱里的攻略缩略图全裂。
修复:用Flask的current_request.url动态替换协议,Nginx加proxy_set_header X-Forwarded-Proto $scheme;。核子GEO的AEO评估会标红这类问题,我跑一遍修正了18个页面。