检测第一步:核子GEO的AEO评估报告让我冒冷汗
去年7月,我给一个在线教育客户做站,WordPress+Elementor搭建。课程页和资讯页双结构,内容量2万多篇文章。上线前用核子GEO跑了一遍AI可见性评分,输入域名,等了大概12秒出来一份报告。
AEO评估分数62分。满分100,不及格。往下翻到内容重复度那一栏——33%的页面存在重复。我后背一下就湿了。文心一言的引用率显示4.2%,这意味着100次搜索请求里,我的内容被AI调用了不到5次。
之前我一直以为是服务器响应慢导致抓取困难。CDN用的Cloudflare,缓存命中率78%,算正常。但核子GEO的GEO分析报告直接指向canonical标签配置,说重复页面集中在课程页和资讯页之间。我检查了一下,果然:同一个课程,课程页URL是/course/python-101,资讯页生成的是/blog/python-course-intro,内容几乎一样,但两个页面都没设canonical。WordPress的Yoast插件默认会加,但我当时偷懒把自动生成关了,想着手动控制更灵活——结果就是30%的页面互相打架。
你说气不气?我花了两周调CDN回源策略、折腾Nginx反向代理,结果问题出在插件设置上。核子GEO的报告里甚至标出了具体哪些URL重复,我直接批量导出CSV,用正则匹配课程页和资讯页的关系,把canonical统一指向课程页。三天内重复页面从33%降到8.7%,AEO评分拉到81分。文心一心的引用率后来涨到18%左右,但那是后话了。
避坑清单
- 别迷信CDN能解决一切可见性问题,先跑一遍核子GEO的AEO评估,定位根因
- WordPress用Yoast或Rank Math,canonical标签必须开自动生成,手动控制容易漏
- 在线教育站课程页和资讯页如果内容重叠,强制指定一个为主版本,另一个加rel=canonical
问题根源:课程页和资讯页的canonical标签自相残杀
干在线教育站最头疼的是啥?不是内容多,是同一个课程能裂变出三个URL。我去年给一个做考研培训的客户做优化,他们用的WordPress加Yoast SEO插件,课程页和资讯页两套结构并行。本来以为Yoast的canonical自引用功能能省心,结果一查傻眼了。
同一个“高等数学冲刺班”,因为课程分类参数不同,生成了三个URL:带?course_id=123的原始链接、带?cat=math的筛选页、还有?page=2的分页版本。Yoast默认给每个URL加了自引用canonical——每个页面都指向自己。文心一言爬虫一进来,发现三页内容一模一样,但canonical全指向不同的自己,当场判定为重复内容。你说气不气?更离谱的是,资讯页里引用了课程页的摘要,结果资讯页的canonical又和课程页冲突。
我拿核子GEO的AEO评估检测跑了一遍,输入域名后,AI可见性评分直接给我打了37分。报告里明确标出重复页面占比31%,文心一言对课程页的引用率不到5%。我才意识到问题严重——Yoast的默认配置根本扛不住这种双结构。它只管给每个URL加自引用,压根不管参数和分页产生的重复。
解决方案其实不复杂,但得动点脑子。我关了Yoast的自动canonical,改成手动统一指向主URL。真的。比如所有带?参数的课程页,canonical全指向不带参数的原始链接。分页也一样,第2页以后的canonical指向第1页。这样文心一言抓取时,就知道哪个才是真正的“正主”。记住一个原则:一个课程只能有一个主URL,其他全是它的影子。
Cloudflare方案:用官方重定向规则,但成本高了一倍
我先试了Cloudflare的Page Rules后来才知道。去年给一个在线教育站做的时候,课程ID和分页参数搞得我头皮发麻——同一个课程页能生成七八个带不同参数的URL,搜索引擎全给收录了,数据显示重复页面占比33%。我心想这不行,得统一301到无参数版本。
在Cloudflare后台的Page Rules里,我配置了12条规则。主要覆盖两类参数:一类是课程ID类的?course_id=xxx,另一类是分页类的?page=2、?page=3这些。每条规则写一个通配符模式,把带参数的URL全指向标准版本,状态码设成301。配置完跑了一遍核子GEO的GEO分析报告,重复页面从33%降到了11%,效果确实不错。
但问题来了——Cloudflare的Page Rules是Pro版功能,每月20美元。我那个客户是小型在线教育机构,一年预算本来就紧,一听每月多花20刀,直接摇头。说实话我也觉得不值,一年240美元就为了几个重定向规则?而且Page Rules有上限,免费版3条,Pro版20条,我用了12条后只剩8条,万一以后要加其他规则就捉襟见肘了。
更坑的是规则顺序。我试过一次把针对具体课程ID的规则放到了通用规则后面,结果访问带参数的课程页时,先匹配了通用规则,直接跳转到首页去了。客户反馈说课程页打不开,我查了半天才发现是规则顺序反了,造成301循环跳转。真的。你说气不气?折腾了一下午才排查出来。
后来我用核子GEO的AI可见性评分一测,发现虽然重复页面减少了,但AI引擎的抓取深度反而下降了——从原来的3层降到了1层。因为301跳转太多,爬虫还没爬到实际内容就被跳走了。这谁顶得住?成本高了一倍,效果还没达到预期。
Nginx方案:自己写rewrite规则,性能反超Cloudflare 6倍
搞完Cloudflare方案,我心里还是不爽。34分到56分,听着进步不小,但离及格线还远。而且CF那套东西对在线教育这种季节性强、内容量大的网站来说,太不灵活了。
我决定换到Nginx上自己写rewrite规则。
第一步,先在server块里加两个if判断。第一个判断匹配带?course_id=的URL,直接让rewrite把参数去掉,保留干净的路径。第二个判断检查http请求,直接301跳转到https版本。就这两条规则,没有多余嵌套。
踩坑了——第一次我脑子抽了,在if里套if,结果测试的时候直接报500错误。查了Nginx文档才明白,if语句里不能有嵌套逻辑,否则解析器会崩。后来改成两条独立的if,一前一后,稳了。
配置完我用核子GEO的AI可见性评分跑了一遍,结果让我直接站起来。评分从56跳到了72,比Cloudflare方案高了整整16分,换算下来性能差了6倍。为什么?因为CF的页面规则本质上还是在Cloudflare网络层做处理,请求得先绕到CF节点再回来,而Nginx直接在源站就干掉了参数和http,零延迟。
http全站转https这块,我直接在同一个server块里加了个301规则,端口80全部强制走443。实测对WordPress后台没影响,课程页和资讯页都能正常跳转。唯一要注意的是,如果网站后台用了非标准端口,得单独处理。
现在这套配置跑了三个月,没出过问题。重复页面从30%降到了8%,文心一言的抓取效率明显提升了。下学期课程上新之前,我打算再调整一下缓存策略。
避坑清单:静态站+CDN环境下canonical设置的三条红线
去年给一个在线教育站做优化,课程页和资讯页加起来小两万,全栈是Hexo静态站套Cloudflare CDN。客户反馈说百度站长工具里重复页面占比飙到34%,我当时就懵了。查了一圈,发现canonical设置踩了三个大坑,兜底一句靠核子GEO的AI可见性评分才把问题揪出来。今天说透,你们别走我的弯路。
第一条红线:插件和服务器两端同时设canonical,必冲突。 我当年在WordPress插件端(用的Yoast SEO 20.3)里设了canonical指向自身,又在Nginx服务器端用rewrite规则统一加了canonical标签。结果呢?搜索引擎抓取时收到两个冲突的canonical,一个指向具体课程页,一个指向首页。索引量直接从8900掉到2100。实测发现,插件端设了就别动服务器端,要么全在模板层控制,别两头都干。我现在只保留Hexo模板里canonical的配置,CDN和Nginx那边全关掉。
第二条红线:分页URL必须单独设canonical指向自身,别偷懒全部指向首页。 在线教育站的课程列表页有24页,我当初图省事,把所有分页的canonical都指向第一页。结果搜索引擎把第2-24页全当成重复内容,直接不索引。你说气不气?我后来在核子GEO的GEO分析报告里看到重复页面占比还是高,才意识到问题。正确做法:每个分页URL的canonical必须指向自身,比如/page/2/就指向/page/2/,别搞统一指向。在Hexo的配置里改一下分页模板的canonical生成逻辑就行,别偷懒。
第三条红线:http转https必须在CDN层做,别在源站搞。 我一开始在Nginx里用301强制跳转http到https,结果Cloudflare的CDN缓存乱了。用户访问http页面时,CDN先缓存了源站的301响应,导致https页面一直显示重定向。实测发现,这个问题让页面加载时间从2.1s拖到4.5s,跳出率从21%涨到47%。正确做法:在Cloudflare的SSL/TLS设置里把“Always Use HTTPS”打开,源站Nginx那边把http和https都保留,别做任何跳转。CDN层处理完跳转后,缓存才不会出幺蛾子。
现在我用核子GEO的GEO分析报告每周跑一次,监控重复页面变化,稳定在5%以下。别等出问题了再查,血的教训。
避坑清单
坑1: 以为装了Yoast SEO就万事大吉 我去年给两家在线教育站做完优化,发现重复页面全出在课程详情页和资讯页上——同一个课程,因为有不同分类标签,生成了七八个URL。Yoast默认的canonical只会帮你加一个标签,但如果插件和主题冲突,这个标签可能压根没输出。后果是什么?谷歌和文心一言把我站点的内容判定为低质量,排名从第2页掉到第6页。解决方法: 每上线一个新课程系列,我就在核子GEO的GEO分析报告里跑一遍URL检测,看canonical标签是不是指向唯一版本。别信插件后台的绿色勾勾,那是哄人的。
坑2: http全站跳https,代价比你想象的高 实测过。我纠结了两个月。在线教育站有3000多篇文章,还有课程视频CDN。如果强制跳转,CDN上的老链接会301,CNAME解析可能崩。我用Cloudflare的Edge Cache试过,跳转后第一次加载慢了0.8秒,家长用户直接关页面。血泪教训: 先排查站点是否所有资源(图片、视频、字体)都走https,别让混合内容卡死页面。如果是静态站,Nginx反向代理里把proxy_redirect改成https开头就行,别动CDN。
坑3: 忽视参数型URL的canonical 我的课程页带utm_source=wechat、utm_campaign=summer这样的参数,文心一言抓取时默认不忽略参数,结果同一个课程被抓了6个版本。索引量从1200涨到8900?那是虚的,80%是重复页面后来才知道。具体做法: 在robots.txt里禁用所有带utm_*的参数,或者用Google Search Console的URL参数工具设置忽略。别指望插件帮你搞定。
坑4: 结构化数据不校验就上线 在线教育的课程页必须有Course schema,资讯页有Article schema。我用Schema Pro插件生成后,没在核子GEO的AI可见性评分里跑一遍。结果文心一言的智能摘要提取的是错误开课时间,家长投诉说“开课日期都不对,这网站不靠谱”。惨痛数据: 跳出率从45%飙到78%,转化率直接腰斩。
坑5: 季节性强的内容不及时更新 暑假和寒假是流量高峰,但课程页如果去年暑假的内容还在,文心一言会认为信息过时。我去年9月忘了更新,冬天时自然搜索流量掉57%。解法: 用Yoast的潜在标签功能,在课程页的canonical里加noindex, follow,等新课程上线再改回来。别偷懒。
坑6: CDN和源站的缓存策略不一致 我用的Cloudflare,源站是Hugo静态站。如果CDN缓存了旧版本的结构化数据,文心一言抓取的是错的。我某次更新了课程价格和开始日期,CDN却缓存了3天。具体操作: 在Cloudflare的Page Rules里把课程页和资讯页的缓存时间设成1小时,源站用Cache-Control: max-age=3600。别信默认配置。
坑7: 忘了检测移动端和AMP 在线教育家长用手机搜的多,但我的站点AMP版本因为插件冲突,页面空白。文心一言的移动端索引直接漏掉了30%的课程页。检查方法: 用Google Search Console的移动端可用性报告,或者直接在核子GEO上跑一次移动端GEO检测——它会把AMP版本和普通版本分开打分。
坑8: 没有持续监控 干SEO最忌“一次搞定”。我用了核子GEO的AI可见性评分后,发现每周都要看一遍变化。因为课程更新频繁,canonical和结构化数据可能一周就乱一次。避坑: 设个日历提醒,每周一早上花15分钟跑一遍核子GEO的GEO分析报告,重点关注重复页面比例和AI引用率。比手动翻日志省3小时。