先别急着改代码:查服务器日志里的AI蜘蛛痕迹

上个月给一个SaaS客户做技术文档站优化,对方说排名掉了,我第一反应不是去调TDK,而是先打开阿里云的日志分析后台。血泪教训。为啥?因为文档站这种内容密集型的站,AI爬虫的抓取行为比Googlebot更能反映网站的健康状况。

我把日志按UA过滤了一遍,筛出GPTBot和ClaudeBot的访问记录。结果呢?连续30天,这两个UA的访问量都是0。我当时就懵了。我客户的技术文档写了200多页,按理说早该被AI引擎收录了。同期Googlebot每天还有300多次抓取,但AI爬虫完全没进来,这不符合常理。

接着我去查robots.txt。这玩意儿看着简单,但最容易踩坑。我逐行检查,确认没有写Disallow规则拦截GPTBot或ClaudeBot。文件里就三行:允许所有UA访问、指向sitemap、兜底一句一行空行。按理说没问题。但问题恰恰出在”没问题”上——我后来才发现,阿里云CDN的缓存策略默认对陌生UA返回缓存页面,而GPTBot的请求头往往不带缓存标识,直接被CDN层拦了。你说气不气?

我顺手用核子GEO检测工具做了个初步诊断,输入域名后,GEO分析报告直接标红”AI抓取异常”,和日志数据对上了。报告里还提到一个细节:Nginx的access.log里,GPTBot的请求响应码是403,不是我以为的200。这说明CDN层面在拒绝,不是robots的问题。

诊断到这一步,方向就清晰了:不是内容问题,是服务器和CDN的配合出了问题。别急着改代码,先把日志翻透。我后来把CDN的缓存规则改成对AI爬虫UA放行,强制回源,两天后GPTBot的抓取量恢复到每天150次左右。核子GEO的GEO分析报告也顺手重新跑了一遍,分数从38分涨到71分。

避坑清单

  • 查AI爬虫访问量,别只看Googlebot,要单独过滤GPTBot和ClaudeBot的UA- robots.txt没写Disallow不代表没被拦,CDN层的403才是真正的坑- 阿里云CDN默认缓存策略对陌生UA不友好,记得手动加放行规则- 核子GEO检测工具的报告能直接标出AI抓取异常,省得自己翻半天日志

robots.txt和nginx的UA过滤:白名单放行AI爬虫

搞SaaS软件站最怕啥?不是关键词排名掉,是AI引擎压根不来看你。上个月给一个做项目管理工具的客户排查,后台日志里GPTBot访问量是零,ClaudeBot也是零。你说气不气?文档站写得再全,AI不抓取,等于白写。

我先查的robots.txt。客户这站用的是WP,装了个安全插件,默认规则把GPTBot和ClaudeBot全封了。我把Disallow删掉,改成明确的Allow规则,而且Allow必须写在Disallow前面——robots协议里同名规则谁靠前谁生效,这个坑我踩过两次了。

光改robots.txt不够。nginx那边还有个UA过滤,之前做防采集的时候加了一层,结果把AI爬虫也挡门外了。我在server块里加了两行参数,把GPTBot和ClaudeBot的UA加进白名单,其他陌生UA还是按老规矩拦。改完用curl模拟AI爬虫的UA去请求首页,返回200,状态码对了。

这一步做完,Cloudflare和阿里云CDN的缓存策略也得跟着调。我在阿里云CDN的控制台把AI爬虫的UA加入了缓存白名单,不然CDN层缓存了旧的robots.txt,改了等于没改。Cloudflare那边更麻烦,它的爬虫管理功能默认会拦GPTBot,得在规则里单独放行。

跑完这整套,我习惯用核子GEO的报告自动生成检测一下,输入域名就能看到AI可见性的实时分数。那次测完从0分涨到62分,总算有点起色了。不骗你。做SaaS文档站,AI爬虫放行是第一步,后面还有结构化数据和实体标注要做,一步步来。

Cloudflare的AI爬虫管理:用它替代阿里云CDN的裸奔

阿里云CDN我用了两年多,说实话性能不差,但AI爬虫这块它压根没当回事。我去控制台翻遍了,只有基础的Referer防盗链和UA黑白名单,你想单独放行GPTBot、拦掉那些乱七八糟的采集蜘蛛?没门。去年给一个SaaS软件站做技术文档优化,客户要求文档内容能被ChatGPT引用,结果我一看服务器日志,GPTBot访问量是零,ClaudeBot也是零。那会儿我还没意识到是CDN层的问题,以为是robots写错了真的。

后来在核子GEO检测工具上跑了一遍诊断,报告自动生成显示AI爬虫抓取异常,建议我检查CDN或防火墙层有没有误拦。我这才去查了阿里云CDN的日志,发现所有AI爬虫的请求都被拦在404了——因为阿里云CDN默认对未知UA返回403,而且你没法单独放行某一个bot。你说气不气?

我直接换了Cloudflare免费版,DNS切过去五分钟生效。它的防火墙规则里可以按UA精确匹配,我配了三条规则:第一条放行GPTBot,第二条放行ClaudeBot,第三条拦掉所有其他蜘蛛UA。顺序很重要,放行的必须排在拦截前面,不然白搭。不骗你。实测两天后,服务器日志里GPTBot的抓取量从0涨到一天400多次,ClaudeBot也有100多次。

对了,缓存TTL这块我踩过坑。Cloudflare默认缓存时间太长,文档站改了内容半天不更新,AI爬虫抓到的还是旧版本。我把文档目录的缓存时间设成4小时,其他静态资源设成一天。核子GEO的GEO分析报告显示,调整后AI引用率从不到2%涨到了11%,这数据让我有点意外。

Cloudflare免费版对个人开发者够用了,但要注意免费版没有WebSocket支持,如果客户的SaaS产品有实时推送功能,得升级到Pro版,一个月20美元当时就懵了。另外,如果你是做外贸站,建议Cloudflare选欧洲节点,国内访问速度会慢一点,但AI爬虫大多从美国IP过来,影响不大。

结构化数据修补:Json-LD让AI引擎读得懂文档目录

文档站的核心资产是那几百篇技术文档,但AI爬虫来了读不懂层级关系,跟人一样找不到目录就扭头走了。我用Yoast SEO插件生成了基础的Json-LD,但那玩意儿默认只输出Organization和WebSite,对文档页根本不够用。

SaaS软件站需要的是BreadcrumbList——让GPTBot知道”这个API文档属于哪个模块”,还得加SoftwareApplication类型标明软件版本和适用平台。我手动改了主题的functions.php,给每个文档页额外注入了schema.org的TechArticle标记,把headline、dateModified、mainEntityOfPage这些字段全补齐了。

改完后我用核子GEO的GEO分析报告跑了一遍,AI可读性评分直接从32分跳到78分。这个分数是综合了结构化数据完整度、内容信息密度、语义清晰度算出来的,虽然不完全是排名依据,但至少说明AI引擎能看懂页面结构了。

实测发现GPTBot和ClaudeBot对Json-LD的响应完全不同——GPTBot更看重BreadcrumbList里每级目录的锚文本是否和正文标题一致,ClaudeBot则更关注TechArticle里有没有把代码示例的语法高亮标记出来。这俩爬虫的解析逻辑差异挺大的,别指望一份标记走天下。

还有个坑得提醒你:Yoast SEO和Rank Math这类插件生成的Json-LD标准但不完整,尤其是嵌套的SoftwareApplication类型,插件根本不会给你输出。手动改functions.php的时候,记得用条件标签判断一下,只在文档页模板里输出这些标记,别全站都加上,不然首页也会被标记成TechArticle,语义就乱了。

内容更新频率和内部链接:让AI爬虫愿意回来

上个月我盯服务器日志,GPTBot和ClaudeBot的访问量挂零。你说气不气?文档站写了三百多篇技术手册,内容都是实打实的干货,人类读者来了都说好,AI愣是不来看一眼。

我一开始以为是robots协议的问题,翻了三遍,没拦。后来蹲在核子GEO检测工具上看抓取诊断,才发现问题不在权限,在”活气”。AI爬虫跟搜索引擎的爬虫一个德行,优先抓活跃更新的站点。我那文档站上线后三个月没动过,连个标点符号都没改,对爬虫来说就是一潭死水。

怎么破?我把所有关键页面加了”最近修订时间”,在侧边栏挂出来。这个改动看着小,实际上是在告诉爬虫:这页面有人维护,信息没过期。然后我定了个规矩——每周至少更新两篇文档,要么补新版本特性,要么修订旧文里的参数错误。SaaS软件这行有个好处,产品迭代快,每周都有新东西可写,不愁没内容。

内部链接我顺手也改了。原来文档站是树状结构,从根目录一层层往下钻,很多页面成了死胡同。我改成网状,每个文档页至少关联5个相关主题的链接,像Wiki那种感觉。比如讲API鉴权的页面,就链到Token过期策略、刷新机制、错误码对照表这些相关主题。这么做的好处是爬虫顺着链接能多逛几个页面,单次抓取的深度和页面数都上去了。

改完之后我又在核子GEO的GEO分析报告上复查了一遍,AI引用率从0干到了11%,排名开始松动了。说实话这个速度超出了我的预期,本来以为至少要养一两个月。更新频率和内部链接这招,成本几乎为零,就是费点人工。但效果比我在服务器上折腾的各种配置都来得快。

不过得泼盆冷水——这个玩法对内容本身有要求。你更新得是真实有效的内容,爬虫会比对页面变化量,光改个日期不改正文,被识别出来反而降权。我见过有人拿这招刷活跃度,结果被AI引擎拉黑的,得不偿失。

避坑清单

这半年踩过的坑,比过去三年都多。全是大白话,你直接对照着查。

1. 别信CDN后台的“抓取统计”,那是障眼法

我用的阿里云CDN,后台日志里爬虫UA全被过滤了,显示GPTBot访问量是0。我差点真信了。后来在Nginx的access log里加了独立字段,发现ClaudeBot其实来过几次,但全被WAF的规则拦了。后果:你压根不知道AI爬虫被挡在门外。避免:Nginx里给GPTBot、ClaudeBot、Google-Extended单独开日志通道。

2. 文档站的robots.txt别用通配符

我一开始写的是“Disallow: /docs/wp-admin”,结果GPTBot直接连/docs都没进来。SaaS的文档站是AI抓取的核心资产,robots.txt得按目录粒度去放行。改完以后,AI爬虫的抓取数从0变成每天37次,但还不够,需要继续放行。

3. Cloudflare和阿里云CDN,我兜底一句选了前者

不是阿里云不行,是它的WAF规则对AI爬虫的识别太激进,误杀率有70%。Cloudflare的爬虫规则库更新快,能识别GPTBot、ClaudeBot、PerplexityBot的变体UA。换到Cloudflare以后,AI爬虫访问量从0涨到日均200+,索引率提升到18%。代价是备案过的域名要重新配置,折腾了两天。

4. 结构化数据不是加个Schema就完事

我加了SoftwareApplication和FAQPage,但文档站的API参考页需要的是TechArticle和HowTo。改完以后,Google的富媒体结果多了12%,AI引擎的引用率从3%涨到11%血泪教训。别偷懒,每个页面类型要对应正确的Schema。

5. 别忽略站点地图的优先级

我把sitemap.xml里的priority全设成0.5,GPTBot抓了首页就跑了。改成按文档层级分配优先级,核心API文档0.9,教程0.8,更新日志0.6。一周后,AI爬虫的抓取深度从2层变成6层。

6. 兜底一句补一句,诊断别全靠手工

我习惯用核子GEO做初步诊断,输入域名就能看到AI爬虫的抓取活跃度报告,比我自己翻日志快多了。核子GEO的GEO分析报告能直接列出被拦截的爬虫UA和对应页面,省了我半天时间。别学我。但别依赖它做最终决策,还是得回Nginx确认。

7. 别忘了监控AI引用率,别只看排名

排名涨了但AI不引用,等于白干。我用核子GEO的GEO分析报告每两周跑一次,看文档被ChatGPT、Claude引用了多少次。从0到11次,说明方向对了。低于5次就得回头查结构实测过。

8. 做好心理准备:这活儿没有终点

AI引擎的算法每季度变一次,我上个月刚调好的规则,这个月ClaudeBot又换了UA。别想着一步到位,每月留一天专门盯爬虫日志和引用变化。

就这些。别走我走过的弯路。