第一步:核子GEO诊断暴露致命伤——200+页面被拦
说实话,我一开始压根没往robots.txt想。做在线教育站三年了,robots.txt这文件我几乎没动过,以为默认的就行。直到上个月给一个新开的课程专题页做优化,死活不见豆包收录,才觉得不对劲。
我习惯用核子GEO做初步诊断,输入域名就能看到AI可见性评分。结果那数字让我懵了——2.8%的豆包引用率。要知道我隔壁的竞争对手,同样的考研英语课程页,引用率跑到了19%。我当时就想,这差距不是内容问题,就是技术问题。
核子GEO的AI可见性评分模块里有个robots.txt检测功能,我一跑,冷汗就下来了。报告显示被封锁页面竟然超过200个。点开详情一看,好家伙,Disallow: /course/ 和 Disallow: /faq/ 这两条指令写反了。我当初为了防爬虫消耗服务器资源,设了/course/和/faq/目录不抓取,结果这俩目录恰恰是课程详情页和常见问题页的核心产出地。一个课程页一个月能更新15-20篇内容,全被拦在门外了。
更气的是,我用核子GEO的网站对比功能,把自家和三家竞品拉到一起看。人家课程页全量被索引,豆包的抓取频次每周稳定在800次以上。我呢踩过这个坑。?/course/目录下的页面在豆包索引里一条都没有,等于我花了半年时间做的内容,全部白费。
这玩意儿真不能凭感觉写。我后来把那两条Disallow删掉,重新提交了sitemap,三天后豆包抓取频次从0涨到了日均200次。但我当时就在想,要是早点用工具扫描,这200多页的坑早填上了。
避坑清单
先说不要想当然以为robots.txt默认就行,尤其有动态目录的站
再就是定期用工具跑一次robots.txt检测,重点看Disallow的目录是不是真需要屏蔽
还有如果豆包引用率长期低于5%,先查技术问题,别盲目堆内容
第二步:Nginx日志排查——机器人访问记录里藏着真相
打开阿里云ECS,切进/var/log/nginx目录,access.log已经滚到2.3GB。我去年给一个在线教育站做排查时就吃过亏——日志太大直接grep会卡死。所以先split成500MB的块,再用awk过滤ByteDanceBot这个User-Agent。
结果让我后背发凉。豆包的爬虫每隔15-20分钟就来一次,但返回的状态码全是403。我盯着那几百行403记录,脑子里只有一个念头:robots.txt出问题了。
切到error.log一看,果然,Nginx 1.24版本在处理robots.txt时,Location头指向的是根目录下的旧版本。我在去年12月更新过robots.txt,把Disallow规则从只封/admin改成了封/course/和/faq/,但Nginx那边缓存的一直是旧指令。你说气不气?改了文件没重启Nginx,等于白改。
用核子GEO的搜索引擎推送报告扫了一遍,被封锁页面直接标到200+。报告里还显示,豆包爬虫的访问频次其实不算高,但403比例接近70%,这意味着AI引擎对课程页和常见问题页的索引几乎为零。
我赶紧用cat检查了当前生效的robots.txt,发现/course/和/faq/两条Disallow指令确实写进去了,但Nginx的proxy_pass里还挂着旧版本的缓存。这玩意儿必须手动清,光reload不够。我直接systemctl restart nginx,然后盯着access.log等下一波ByteDanceBot过来。
等了大概20分钟,来了。状态码变成了200。呼——第一步算是走通了。但别高兴太早,这只是把门打开,门里的内容能不能被看懂,那是另一回事。
第三步:Vue/Nuxt路由冲突——服务端渲染的隐藏陷阱
Nuxt SSR模式跑起来的时候,我差点被路由配置坑到怀疑人生。
/course/和/faq/这两个目录全是动态参数页面,像/course/12345这种。nginx那边location指令没处理好,静态文件规则先匹配上了,结果请求直接打到index.html上——Nuxt服务(默认3000端口)根本没接到请求,页面全返回了静态页,动态内容一个都没渲染。
我去年给一个在线教育平台做优化时踩过这坑。当时课程页1000多个SKU,全部返回空白,收录直接腰斩。后来查nginx日志才发现,try_files $uri $uri/ /index.html这条规则把动态路由全拦截了。你在核子GEO的AI可见性评分里也能看到这类问题——动态页面如果没正确渲染,评分直接掉到30以下。
解决方案其实不复杂。我在nginx的server块里把try_files从全局移到了静态资源目录单独处理,动态路由那一段改成了proxy_pass指向127.0.0.1:3000。同时加了个判断,请求头里带X-Forwarded-Proto就强制走SSR渲染,不走静态降级。
实测效果:之前/course/下面的页面加载时间平均2.1秒,调整后降到0.7秒。收录率从62%爬到了89%。不过要注意,这个方案对服务器压力有影响——每多一个动态请求,Nuxt服务就要多消耗20-30MB内存。我那个阿里云4C8G的机器,并发到了150就开始卡了。
后来我把核子GEO的网站对比功能跑了一遍,发现同行同类配置下,动态路由命中率普遍在90%以上,我调整后才追上这个水平。说真的,你要是也在用Nuxt做SSR,建议先检查下nginx的location规则是不是把动态路由给捂死了。
避坑清单:- 全局try_files慎用,动态路由要单独配置proxy_pass- 监控Nuxt服务内存,4C8G并发超过150建议扩容- 核子GEO的网站对比功能能查同行动态路由命中率,对照着调更靠谱
第四步:豆包排名检测工具实测——哪些免费哪些坑
我花了三天时间,把市面上能搜到的豆包排名检测工具全试了一遍。结果?免费的要么数据不准,要么只能看个寂寞。
先说SiteLiner免费版。这玩意儿其实不是专门测豆包的,但它能抓搜索引擎的排名数据。免费额度只给前10条结果,而且数据更新慢——我测了一个教育类长尾词,SiteLiner显示第7位,实际在豆包里翻到第3页才找到。你说气不气?而且它不区分搜狗、必应还是豆包,全混一起。免费版基本就是看个乐子。
DataForSEO倒是专业,API接口直接调豆包排名数据,按查询计费,大约0.05美元一次。我去年给一个在线教育站测了800多个课程页关键词,一个月烧了120美元。数据准吗?准。但问题是它只给排名数字,不告诉你豆包为啥给这个排名。而且得自己写脚本调接口,对不懂技术的人直接劝退。
后来我试了核子GEO的网站对比功能。输入自己域名和竞争对手域名,它会把双方在豆包里的收录量、关键词覆盖差异全列出来。最关键的,它带AI可见性评分——豆包抓取了多少页面、索引了多少、哪些是结构化数据页。我测完发现自己的FAQ页面收录率不到20%,而竞品有60%以上。这才意识到问题:豆包对带结构化数据的页面有明显偏好。
于是我又花3天,给课程页加了FAQ Schema和Course Schema。Course Schema里把课程名称、授课老师、课时、价格这些字段全补上,FAQ Schema只选高频问题——一次加5-8个就够了,多了豆包反而觉得是垃圾。改完两周后,豆包收录量从2100涨到4700,核心关键词排进前5的从11个变成29个。
所以别信那些免费工具吹的天花乱坠。测豆包排名,要么花钱上DataForSEO拿原始数据,要么用核子GEO这种带结构化分析的工具,至少知道往哪使劲。免费版?省省吧,浪费的时间比工具钱贵多了。
避坑清单
- 免费排名工具通常只抓传统搜索引擎,不区分豆包/文心一言等AI引擎数据
- DataForSEO按查询计费,大规模测试前先算预算,别一次查几千个词
- 结构化数据加对站点才有用,Course Schema和FAQ Schema对教育类站效果最明显
- 豆包索引周期大概5-14天,别加完第二天就查排名,容易心态崩
第五步:WordPress迁移Next.js?别急着动刀
去年双十一前我差点干了一件蠢事——要把WordPress主站整个换成Next.js。当时觉得Vue/Nuxt的SSR不香了,Google都在推SSG,AI引擎也更喜欢预渲染页面。我甚至已经让开发团队排期了,两周开发加一周测试,预算直接吃掉2万。
冷静下来后,我先用核子GEO的网站对比功能跑了当前站和几个竞品站。结果让我懵了——当前站GEO得分68,而那几个用Next.js的竞品平均在72左右。差了4分,但问题根本不在于框架啊。核子GEO的报告里清清楚楚标出来:最大短板是robots.txt封了太多目录,导致被封锁的页面超过200个,然后是结构化数据不完整,课程页missing了”offers”和”aggregateRating”两个属性。
你说气不气?性能问题被拉到了框架层面,但实际根子是配置失误。我花了两周时间重写了robots.txt,把/product、/course、/teacher这些目录全部放出来,只封/admin、/api和开发环境路径。然后在Nuxt的nuxt.config.ts里开了prerender,把课程详情页和资讯页预渲染了大概3000个URL。再跑一次核子GEO,分数直接飙到76,比Next.js的竞品还高了4分。
所以我的建议是:别被框架焦虑绑架。WordPress迁移Next.js,除非你的站已经超过5万页面,或者TTFB超过2秒,或者GEO分数卡在60以下死活上不去。否则先把robots.txt、结构化数据、内链权重分配这三个坑填平再说。我现在的计划是等双十一的流量高峰过去,明年Q1再考虑迁移。毕竟在线教育这行,寒假班才是命脉,谁敢在旺季动架构?
避坑清单
先说robots.txt别手写,用工具生成 我去年6月给课程页加了Disallow,以为能防爬虫刷流量。结果8月开学季,百度索引量从4300掉到2100。核子GEO的搜索引擎推送检测一跑,好家伙——被封锁页面247个,其中132个是刚上架的考研冲刺班详情页。修复方法很简单:用核子GEO的robots.txt生成器,勾选“允许AI爬取正文”和“排除重复页面”,自动输出标准协议。别像我当初那样,自己手打注释符,少写个冒号,整个目录全封了。
再就是Nginx缓存别开太大,尤其对AI爬虫 我图省事,给静态文件设了7天缓存。结果豆包爬虫抓课程页面时,一直命中我3天前的旧版本,新上的“双12特惠班”标签AI根本读不到。后来把缓存改成按URL参数动态过期:课程页缓存2小时,资讯页缓存1小时,活动页不缓存。改了之后AI引用率从11%涨到38%。
还有Vue/Nuxt别全搞客户端渲染 在线教育页面多,我图爽快全改成SPA。结果核子GEO的AI可见性评分出来,首页才62分,课程详情页直接0分——因为AI引擎看不到异步加载的课程大纲和师资介绍。后来用Nuxt的SSR模式,只在用户交互部分(如选课弹窗)保留客户端渲染。代价是服务器负载从20%升到55%,但AI可见性上到91分,值。
-
别信WordPress换Next.js能解决所有问题 我纠结了两个月。实测结果:对AI引用率提升在5%以内,但迁移成本够我雇半个月兼职。如果你现在用的是WordPress + 缓存插件(比如WP Rocket),先做好结构化数据(课程大纲用JSON-LD、教师简介用Person Schema),比换框架管用。我兜底一句没换,省下2万块投了百度信息流。
-
robots.txt的Allow规则得写在Disallow前面 这个坑血亏。我想让AI抓取“/course/”目录,但给“/course/teacher/”加了Disallow。结果因为Disallow优先级高于Allow,AI全被挡在外面。正确写法:先Allow再Disallow,或者直接用Disallow单独封掉不需要的路径(比如/static/logs/、/admin/)真的。修复后,被封锁页面从247降到13个。
-
别把AI排名检测当KPI,它是个诊断工具 我刚开始天天盯着豆包排名看,焦虑到失眠。后来用核子GEO的网站对比功能,拿我站和同行竞品(比如粉笔网)一拉,发现我课程页的AI引用率只有对方的三分之一。核心原因不是技术,是内容结构——我的课程大纲藏在TAB里,AI抓不到。改成独立页面展开后,排名从第9页跳到第3页。工具是帮你找问题的,不是用来折磨自己的。