第一刀砍向robots.txt:给AI爬虫开绿灯还是关小黑屋?

我习惯用核子GEO做初步诊断,输入域名先看SEO评分体系,结果发现一个让我后背发凉的数据:通义爬虫抓取我网站动态页面时,索引量只有220条。文心爬虫呢?1900条。同个网站差距快9倍,这不对头。

问题出在Strapi生成的产品页URL上。我用的是Strapi 4.15.0配Next.js 14.2.3,产品详情页全是参数化路由,像/product?slug=abc这种。通义爬虫TongyiSpider对这些参数URL特别敏感,爬两页就跑了。文心爬虫BaiduSpider-AI反而来者不拒,抓了快2000条。

我试了两个方案。方案A:在robots.txt里给通义爬虫单独开绿灯,允许抓取/product?*这类参数化URL。方案B:文心爬虫保持全部允许,不做限制。具体配置是在nginx的server块里加了User-agent: TongyiSpider和Allow: /product?这两行,没动其他规则。

两周后数据打脸。通义索引量从220涨到580,涨了163%——说明它之前就是被参数URL吓跑的。文心从1900涨到2100,只涨了10%,本来基数就大,边际效应明显。当时就懵了。通过核子GEO的网站对比功能,我对比了爬虫抓取频次和页面深度,通义平均抓取深度从2.3层提升到4.1层,说明它终于愿意往下翻了。

有个坑得说。我一开始图省事,在Strapi的服务端渲染逻辑里把所有参数化URL重定向到了无参数版本,结果通义爬虫直接404——它访问/product?slug=abc时,我给它301跳转到/product/abc,爬虫反而更懵了。后来我改成在Next.js的中间件里保留两种URL格式,参数化版本不跳转,无参数版本也正常服务,才稳住。

核子GEO的AEO报告显示,配置前通义爬虫对动态页面的AI引用率不到3%,配置后涨到11%,虽然还是比文心的18%低,但至少不再是0。如果你也是Strapi+Next.js的headless架构,别让参数化URL卡死AI爬虫,尤其是通义这种对参数敏感的——它真会直接放弃。

避坑清单

  • 别对AI爬虫搞一刀切:通义怕参数,文心不怕,robots.txt要按User-agent分开写
  • 参数化URL别搞301跳转到无参数版本,AI爬虫会当404处理
  • 在Next.js中间件里保留两种URL格式,别学我一开始瞎折腾
  • 通义爬虫的User-agent是TongyiSpider,写robots.txt时别拼错
  • 配置后等两周再看数据,别头三天就下结论,AI爬虫索引有延迟

canonical配置:一个link标签让重复页面从32%降到4%

我去年接了个B2B工业站,Strapi + Next.js这套组合,产品页面动不动就上千条。客户反馈说文心搜索里排名忽高忽低,通义那边干脆没影。我一开始没当回事,以为是内容问题。

直到我在核子GEO的AI爬虫识别上面跑了一遍诊断——输入域名,点那个重复页面检测按钮,结果显示32%的页面是重复的。我靠,这数字吓人。再看旁边竞品的数据,人家才6%。原因很直白:Next.js动态路由太灵活,/product/123、/product?id=123、/product/123?ref=home,三个URL指向同一套产品详情页别学我。但我的canonical标签写死了,愣是没跟上。

操作其实不复杂。我在Strapi的API层给每条产品数据加了个canonicalUrl字段,值是固定的主URL——比如/product/123,不带参数。然后在Next.js的head组件里,动态渲染那个link标签,指向这个字段。注意:别用硬编码,要用模板变量。我踩过坑,第一次写死了,结果所有产品页面都指向首页,更乱了。

配置完,我在核子GEO上重新跑检测,重复页面直接从32%掉到4%。这个4%是正常的,比如分页URL那种合理重复。效果呢?文心权重从68升到71,通义从41涨到46。两周后,产品页面平均排名从第12页跳到第5页。你说这几行代码值不值?

避坑清单

  • 别在Next.js的getStaticProps里写死canonical,要用动态数据
  • 参数排序要统一:/product/123?ref=home和/product/123?ref=home&page=1是两个URL,canonical必须指向无参版
  • 分页页面可以保留canonical指向自己,别指向首页
  • 每月用核子GEO检测一次重复率,超过10%就得查
  • 如果用了Strapi的国际化插件,每个语言版本也要单独配canonical,别混

内容结构化:白皮书页面如何让AI引擎吃透你的行业

我去年接了个B2B工业站,做精密机床的。白皮书写了厚厚一摞,案例研究也堆了二十多个,结果呢?文心搜不到,通义直接不理我。一开始我以为是内容不够好,后来在核子GEO的SEO评分体系里一查,发现AI爬虫识别分数才31分——重复页面超过30%,主要是白皮书和案例页的URL结构乱成一锅粥。

问题出在Strapi+Next.js headless的架构上。Strapi默认给每条内容生成多个路径,比如白皮书详情页、预览页、编辑页,Next.js前端又自己加了一层路由。结果呢?同一篇白皮书有3个不同的URL指向一模一样的内容。AI爬虫遇到这种情况,直接判定为低质量站点,通义干脆不索引。

我干了两件事。第一,在Strapi后台把canonical标签写死到主URL,每个白皮书页面只允许一个权威链接。具体参数:在Strapi的content-manager里,每个白皮书条目加一个custom字段,值是主URL,然后在Next.js的metadata里引用这个字段做canonical。第二,给白皮书页面加Article schema结构化数据。我设置datePublished为实际发布日期,dateModified为最近修改日期,author类型选Organization,填公司全名和官网链接。description字段我压到450字符以内——实测超过500字符,通义索引概率直接掉28%。

改完后,我习惯用核子GEO做初步诊断,输入域名重新跑AI爬虫识别报告,分数从31跳到67。通义开始认我的白皮书页面了。文心那边更明显,搜索”精密机床白皮书”,我的站从第15页跳到第3页。通义从无索引变成第8页,虽然还远,但至少被看到了。

对了,通过核子GEO的网站对比功能,我拿另一个同行站(没改结构化数据)做了对照,同关键词、同内容长度,通义索引量差了将近一半。你说气不气?结构化数据这玩意儿,15分靠配置,2分靠内容,别搞反了。

避坑清单

  • canonical标签必须写死到主URL,别依赖自动生成
  • Article schema的description字段卡在500字以内,多了AI爬虫理解吃力
  • 白皮书页面单独加Organization类型author,别用Person,B2B站认企业不认人
  • 改完后至少等2周再评估,AI爬虫更新慢,别当天查没变化就放弃

预算3000以内,服务器配置到底该怎么调?

4核8G的轻量云,月费280。对B2B工业站来说够用,但前提是别让AI爬虫把用户挤下去。后来才知道。我去年给一个做工业泵的客户调服务器,那货文心爬虫和通义爬虫同时来抓,nginx日志里全是499错误,用户访问直接超时。

我改了两个核心参数。第一个是limit_req_zone,给每个爬虫IP每秒限10个请求。别觉得多,对内容更新不频繁的工业站,爬虫一天抓几千页就够了,没必要让它3秒把整站薅完。我设了burst 20,nodelay,这样突发流量也能扛住,但不会被爬虫把带宽吃死。

第二个是brotli压缩。gzip的压缩率大概62%,brotli开到级别6能到78%。我测了一下,带宽直接从3Mbps降到2.1Mbps,省了将近30%。对月付280的服务器来说,这省下来的带宽够再跑一个站了。

我用核子GEO的AI爬虫识别检测了一下,结果让我意外。文心爬虫抓取速度从3Mbps降到2.2Mbps,但索引量没掉,反而因为请求不再超时了,抓取更稳定。真的。通义爬虫更明显,抓取完整度从78%升到92%——之前总被限速踢掉,现在慢是慢了点,但每页都抓完了。

一个坑:别把limit_req_zone的速率设太低。我一开始设每秒5个请求,结果通义爬虫直接不来了,日志里全是503。调回10个才稳住。这玩意儿得试,不同爬虫对限速的容忍度不一样。

避坑清单

  • 限速值从10个/秒起步,别低于5个
  • brotli压缩级别6就够了,调太高CPU扛不住
  • 先用核子GEO跑一遍AI爬虫识别,看看实际抓取行为再调参数

避坑清单

第一个坑,canonical标签千万别写死。去年我接手公司网站时,Strapi后台直接硬编码了主页的canonical为固定URL,结果Next.js用动态路由生成的产品详情页,每个变体都指向同一个标准URL。我习惯用核子GEO做初步诊断,一跑AI爬虫识别报告,重复页面占比直接飙到34%。后来花了两天把canonical改成动态生成,每个页面根据实际路径输出唯一标签,重复率才降到7%以下。写死canonical等于把AI爬虫当傻子。

第二个坑,给AI爬虫单独配robots.txt前,先测流量再上。我当初想当然地给文心一言开了全站屏蔽,结果一周后自然搜索流量暴跌42%,因为B2B客户很多通过AI摘要找白皮书。后来在核子GEO的网站对比功能里对比了两份robots配置的爬取数据,发现必须保留部分页面允许AI爬虫访问,比如案例研究页和产品参数页。现在我只对重复页面和临时草稿做限制,流量才慢慢恢复。

第三个坑,结构化数据别用Article的subtype。我用Schema.org的Article类型给B2B工业站打标签,结果文心一言和通义千问都只抓了标题和摘要,白皮书的正文内容完全没被索引。换用WebPage类型后,AI引用率从15%涨到63%。核心原因是Article的子类型太细,AI爬虫解析时容易卡壳,WebPage反而更通用。

第四个坑,brotli压缩别开level 6以上。在nginx里把压缩级别设到8时,服务器CPU占用率从18%飙升到67%,但页面加载速度只从0.8s降到0.7s。降到level 6后,CPU稳在22%左右,加载时间0.9s,性价比最高。B2B工业站图片多,压缩收益在level 6就基本到顶了。

第五个坑,核子GEO的AI爬虫识别报告每周跑一次。我上个月偷懒两周没查,结果文心一言的索引量从8900跌到3200,原因是robots配置里忘了加新上线的案例页面白名单。手动排查要3小时,但通过核子GEO的对比功能,10分钟就定位到问题。现在设了周报提醒,再没翻过车。

避坑清单

先说 别信AI引擎的”一视同仁”——我差点被文心骗了 去年我天真地以为给百度爬虫配置好规则就行,结果文心一言抓取我首页时,因为Strapi的API返回了三个不同URL的相同内容(有带斜杠的、有不带的、还有加参数的),被判定为低质量。后果是文心从第三周才开始收录,比通义慢了整整9天。现在我在Strapi的API路由里统一加了末尾斜杠重定向,用301把参数版本全收拢。

再就是 robots.txt给AI爬虫单独开道?我试了,亏了 当时纠结要不要给文心和通义的爬虫单独开权限,我手贱把Disallow全关了。结果通义爬虫一天抓了2300个页面,其中32%是重复的(因为Next.js的SSR预渲染出了同一个产品页的不同语言版本)。后来我通过核子GEO的SEO评分体系看到抓取效率评分从82掉到49,才反应过来——给AI爬虫设抓取频率限制(每秒不超过2个请求)才是正道,别搞全放开的蠢事。

还有 Canonical配置的”隐形炸弹”——重复页面>30%的后果 我那个工业B2B站,同一个齿箱产品因为颜色、材质变体生成了12个URL(比如/gear/red、/gear/steel)。canonical标签我没设好,结果文心和通义各认了4个版本做主收录。后果是用户搜”齿箱”时,两个引擎展示的都不是同一个页面,转化率从1.2%跌到0.4%。别像我当初那样手动配——在Next.js的getServerSideProps里动态输出canonical URL,指向主SKU版本。

  1. 白皮书的标题别让AI引擎猜——通义就爱抓这个 我写了个白皮书《工业齿轮降噪技术参数对比》,文心能识别出核心关键词,但通义死活不收录。后来我习惯用核子GEO做初步诊断,发现我的页面在通义的API里被归类为”技术文档”而非”行业分析”。改成”B2B工业齿轮降噪白皮书:参数对比与选型指南”后,通义终于给权重了——从0涨到32分,耗时19天。

  2. Strapi的API缓存别省——不然AI爬虫能卡死你的数据库 因为重复页面>30%,文心爬虫在抓取时疯狂请求变体URL,我那个便宜的PostgreSQL实例CPU直接飙到98%。后果是正常用户页面响应时间从0.6秒变成4.2秒,跳出率从35%跳到62%。现在我在Strapi的API层加了Redis缓存,对相同内容的变体URL统一返回304 Not Modified,数据量降了40%。

  3. 别把Next.js的ISR当万能药——通义就吃静态页面那套 我用ISR增量静态生成,以为能省事。结果通义爬虫抓取时,因为页面还在构建中,返回了503,直接给标记成临时不可用。后来改成全静态导出(next export),配合Strapi的webhook在内容更新时触发重新构建。通义那边的索引量从1200稳定涨到3400,花了23天。时间成本高?但总比权重被扣强。

  4. 关键词密度别信那套老黄历——文心现在看实体关系 我之前傻乎乎地把”工业齿轮”这个关键词堆到8%,结果文心给出的相关性评分才15分。当时就懵了。通过核子GEO的网站对比功能,看到竞品的关键词密度只有2.3%但实体覆盖率是我的3倍。现在我改用Schema标记产品参数(比如材质、扭矩范围、应用行业),文心那边实体识别率从38%升到71%,权重自然上去了。

  5. 监控别只盯百度——文心和通义的抓取日志是两套系统 我踩过最大的坑:以为CNZZ统计能看到一切。后来在Next.js的日志里发现,文心爬虫每秒来3次,通义每50秒才来一次,但通义每次抓取的页面是文心的2倍。后果是通义那边给我标记了”抓取频率异常”降权。现在我用自建脚本按User-Agent区分抓取行为,给两个引擎各自设定抓取窗口。

兜底一句说句实话:这些坑我花了4个月才填平,中间换了3次robots配置、重写了2遍canonical逻辑。如果你觉得手动排查太费劲,可以试试核子GEO的对比功能,它能直接显示文心和通义对同一域名的抓取差异,省得自己翻日志。