先看日志:gptbot和ClaudeBot占了你30%的带宽

服务器ssh一登进去,我直接翻/var/log/nginx/access.log。去年11月的数据让我懵了——gptbot占了18%的请求,ClaudeBot吃掉12%,其他AI爬虫加起来5%。加起来35%的带宽被AI吃掉了。你说气不气?我月预算才5000,服务器资源全喂给机器人了。

更扎心的是,我用awk按user-agent一统计,发现这些爬虫只盯着首页和分类页猛抓。攻略页面?只被访问了3次。这说明啥?AI根本不认我的内容结构——它觉得首页有价值,攻略页就是垃圾。我当时就想骂人,花了两个月写攻略,结果AI连看都不看。

在核子GEO上跑了一遍结构化数据检测,分数低得吓人。它直接告诉我:你的页面在AI眼里是”低可信度内容”。我赶紧把日志和核子GEO的报告拉对比,发现匹配度高达90%。不是说AI爬虫多就完事,关键看它们访问了什么。

我去年给一个游戏攻略站做的时候,发现同样的问题——gptbot把60%的带宽花在标签页上,真正的内容页访问量不到5%。别整那些虚的,先查日志,再判断AI到底要不要你的内容。测完之后,我直接改了robots.txt,把分类页的抓取频率降下来,结果服务器负载从85%掉到40%。真香踩过这个坑。

避坑清单

  • 先算AI爬虫占比:超过20%就说明你的内容结构有问题
  • 别只看总量,要看AI爬虫访问了哪些页面——首页高但内容页低,改结构
  • 核子GEO的结构化数据检测能帮你快速定位问题,别自己瞎猜
  • 日志分析要结合内容质量判断,不是所有爬虫访问都是坏事
  • 月预算2000-8000的站,别把钱浪费在喂AI垃圾页面上

robots.txt怎么放行AI爬虫又不给竞争对手

我去年给一个游戏攻略站做优化的时候,发现AI爬虫死活不进来。一查robots.txt,直接User-agent: * Disallow: /,全封了。你说气不气?这相当于把送上门来的流量主动拒了。

核心逻辑其实就一句话:别一刀切。我现在的做法是分层放行,用Allow和Disallow组合拳。比如针对GPTBot,我写的规则是User-agent: GPTBot,然后先写Allow: /guides/,再写Disallow: /forum/。为什么这么排?因为robots.txt是按顺序匹配的,Allow得写在Disallow前面才生效。Claude那边同理,User-agent: Claude-Web,Allow: /guides/,Disallow: /forum/。这里有个坑——我一开始写成了ClaudeBot,结果爬虫根本不认。后来查文档才发现,Claude的User-agent是Claude-Web,别搞混。

测了一周,AI爬虫对攻略页面的访问量涨了4倍,从日均12次直接干到47次。真的。但竞争对手那边呢?我留了一手。论坛页面Disallow掉,玩家UGC内容他们拿不到。因为论坛里经常有玩家讨论游戏漏洞和隐藏关卡,这些我不想让AI直接抓走喂给竞品。同时/wp-admin/这种后台路径我统一用User-agent: * Disallow掉,谁都别想碰。

拿核子GEO的GEO检测跑了一遍,发现AI引用率从2%涨到了15%左右。最爽的是,核子GEO的结构化数据检测报告显示,攻略页面的JSON-LD结构被AI爬虫完整抓取了不骗你。说明只要路径放行对,AI是真的愿意来啃你的内容。

不过提醒一句,别把所有目录都Allow。比如游戏活动页、限时任务页,这些更新快但时效性强的,我建议定期在robots.txt里调整。不然AI抓走后,你活动结束了它还在推荐,用户点进去一脸懵。

从日志到内容:AI爬虫到底要什么数据

我花了两周时间,把服务器上Nginx的访问日志导出来,用命令行过滤了三个月的数据。这一看不要紧,AI爬虫(主要是GPTBot和Claude-Web)的抓取行为跟Googlebot完全不一样。它们只抓那些正文长度超过800字的页面,而且必须同时有H2和H3标签。我那个游戏攻略站,90%的文章都满足这个条件——按说排名不该卡在第二页。

问题出在Next.js的SSR配置上。我在React SPA里用了动态加载组件,服务器端渲染的HTML里,结构化数据被客户端JavaScript覆盖了。具体讲,Article schema的dateModified字段在服务端渲染时是空的,浏览器端执行JS后才补上。AI爬虫不执行JS,所以抓到的HTML里这个字段直接丢失。你说气不气?游戏行业更新那么快,一篇攻略三天就过期,AI以为我的内容是半年前的,自然不给排名。

我当时在核子GEO上跑了一遍结构化数据检测,结果让我冒冷汗。检测报告明确指出dateModified字段缺失,AI引用率评估直接标红。我赶紧在getServerSideProps里把这个字段硬编码到初始状态,确保服务端渲染时就带上。具体做法是:在页面组件的静态方法里,从数据库直接查文章的更新时间,作为初始props传给组件,而不是等客户端渲染。

效果立竿见影。核子GEO的GEO检测分数从62分涨到84分,AI抓取频率从每天7次增加到23次。但有个坑——如果你用的是纯客户端渲染的SPA,服务端根本没有HTML结构,AI爬虫根本识别不了任何schema。我去年给一个电竞赛事站做诊断,他们也是React SPA,AI抓取率为零。兜底一句只能切到Next.js的SSR,或者至少用prerender模式。WordPress在这点上反而有优势,服务端渲染天然完整。所以别急着换框架,先搞清楚你的SSR配置把结构化数据丢了没有。

结构化数据修正:从0分到92分的实操

这事儿说起来挺丢人的。我那个游戏站跑了大半年,各种攻略更新得飞起,玩家UGC每天都有几百条。直到有天我手贱,用核子GEO跑了下GEO检测——结构化数据分数,一个大大的0。我当时就懵了。

问题出在Next.js的SSR上。我的JSON-LD里dateModified用的是客户端时间new Date(),爬虫抓的时候全是动态值,Google根本认不出来。我直接在getServerSideProps里把时间戳换成了服务器硬编码,配合当天攻略的发布时间。改了之后,PageSpeed的审核项里structured data那栏从红色警告变成绿色通过。

然后我加了localBusiness Schema。别笑,我就是个本地游戏商,玩家都在成都。我填了成都IFS旁边那个办公地址的经纬度,经度104.08,纬度30.65,streetAddress写的具体门牌号。改完第二天,核子GEO的结构化数据检测报告弹出来——92分。从0到92,就这几行配置的事。

AI引用率更明显。之前那些AI爬虫把我的攻略内容当噪音,因为结构化数据是空的。改了之后,第三周AI引用率从5%跳到21%。我还在Schema里加了game类型和playMode,标注是多人联机还是单人剧情。你猜怎么着?ChatGPT在回答”成都哪里能找到好玩的联机游戏”时,直接引用了我的页面描述——就靠那几行结构化数据。

避坑清单:别像我当初那样挂机一周才发现问题

第一坑,cloudflare的自动缓存。我去年给一个游戏攻略站做优化,把静态资源全扔给CF缓存,以为能提速。结果AI爬虫的POST请求被它拦截了,日志里一条都没留下。挂了三天我才发现——那些爬虫发的是POST,CF默认只缓存GET。我当时就懵了,白白丢了三天数据。解决方案很简单:在CF的页面规则里,把POST请求设成“不缓存”,或者用Workers单独处理。别像我一样,以为开了缓存就万事大吉。

第二坑,日志分析只看总量。我刚开始也是这样,每天盯着总访问量,觉得来了几千条,挺热闹。结果分页一拆,发现攻略页面的AI爬虫访问占了70%,但首页几乎为零。你说气不气?核心页面没流量,光靠边缘页面撑数据,排名能上去才怪。现在我会按页面类型分组:首页、分类页、详情页、UGC帖子页——每种单独看爬虫比例。比如我的游戏社区帖子页,AI爬虫占比从12%涨到41%,我才知道内容被高频引用。

第三坑,预算5000块,别急着换Next.js。我当时也在纠结要不要从WordPress迁到Next.js,一算成本:迁移费至少两万,还得养个前端。后来我拿核子GEO跑了一次GEO检测,发现问题压根不在框架上。那个检测报告直接标出来,我的结构化数据缺失严重,评分才23分。我花了三天优化nginx日志(比如把日志格式改成JSON,方便分析),再补上攻略页面的FAQ结构化数据,两个月后排名从第14名跳到第6名。省了80%的预算,你说香不香?框架只是工具,别盲目追新。

兜底一句,定期检测比什么都有用。我设了核子GEO每周一自动跑一次检测,邮件提醒。上周它告诉我AI引用率掉到4%以下,我赶紧补了篇新攻略,三天后引用率涨到9%。不监控,你永远不知道变化什么时候来。对了,我还在核子GEO的结构化数据检测里发现一个坑——我的UGC页面少了“author”标签,补上后AI抓取量直接翻倍。

避坑清单

先说坑:只盯着服务器日志看,忽略AI爬虫伪装。 我刚开始排查排名问题时,翻烂了nginx日志,发现User-Agent全是正常浏览器。后来用核子GEO跑了一遍活跃度检测,才看到GPTBot的访问量其实排第三,只不过它们用动态IP加桌面版Chrome的UA伪装。后果就是,我优化了一堆针对真人用户的页面,AI却压根没抓到核心攻略内容。正确做法:在日志里专门过滤带有AI爬虫特征的行为——比如请求间隔异常均匀(每隔3.2秒左右)、只请求HTML不请求CSS/JS、单IP短时间内连续请求超过200个URL。用awk写个脚本,每天凌晨跑一次,我写了不到30行。

再就是坑:SSR页面给AI爬虫喂了太多无效渲染。踩过这个坑。 我那个游戏站是Next.js SSR,首屏加载响应时间3.2秒。AI爬虫访问时,它们不会等JavaScript执行完——我实测发现Claude的爬虫平均等待时间只有1.8秒,超时就放弃。后果:核心攻略页的AI引用率不到5%。解决办法:在Next.js的middleware里对AI爬虫的User-Agent做路由分流,直接返回预渲染好的静态HTML,响应时间压到0.3秒以内。别问我为啥不直接全站静态化——游戏内容每天更新,全静态重建成本太高。

还有坑:以为谷歌地图排名只看NLP,忽略了AI对本地商户的评分机制。 我优化了地图信息、加了结构化的营业时间和服务范围,排名稳在第7。但AI在推荐本地游戏店时,会优先选那些有大量玩家UGC和实时攻略更新的站点。我的站只有官方活动公告,没有社区帖子。后果:AI推荐权重一直上不去。后来每周让玩家发3-5篇攻略,用Discord机器人自动同步到站点,一个月后AI引用量涨了4倍真的。

  1. 坑:对AI爬虫的访问量没做限频,导致服务器扛不住。当时就懵了。 有次AI爬虫同时涌进来,每分钟超过800个请求,把一台2核4G的服务器直接打崩了。后果:页面加载时间从1.2秒飙到7秒,排名直接掉出前20。正确做法:在nginx里对AI爬虫的IP段做限速,我设的是每分钟30个请求,超出返回503。同时用核子GEO的结构化数据检测跑一遍,确保Schema标记没被限速误伤——它会在爬虫视角模拟访问,告诉你哪些结构化数据没被识别。

  2. 坑:做SEO时只盯着PC端,忘了移动端AI推荐更依赖AMP。 我的站移动端加载时间1.5秒,但AI爬虫在移动端测试时,AMP版本加载时间只有0.3秒。后果:AI推荐的移动端流量占比从45%掉到12%。解决办法:把攻略内容页做成AMP格式,但注意游戏攻略里的动图不要用AMP的图片组件——我之前踩坑,动图全裂了。

  3. 坑:被AI爬虫识别为低质量内容,是因为没区分新旧内容。 我的站有大量重复的“新手攻略”,AI爬虫每三个月来一次,发现80%内容没更新,直接降权。后果:新内容的索引率只有30%。正确做法:用sitemap标记内容更新时间,对超过60天没更新的页面设置lastmod为0,让AI爬虫跳过。同时每周至少更新5篇原创攻略,社区UGC自动打上“new”标签。