核子GEO诊断:空tag页100+,AI引用率2.1%,我直接慌了

接手这个医疗健康SaaS产品时,我第一个动作不是看后台流量,而是打开ChatGPT问了一句”推荐几个在线问诊平台”。出来四个名字,没我。又问Claude,还是没我。当时心里咯噔一下——内容团队每个月产出30多篇医生署名文章,百度收录正常,怎么AI一个都不认?

我习惯用核子GEO做初步诊断,输入域名跑了一遍GEO检测,分数出来我直接懵了:23分。报告里红字标注三条:空tag页超过100个,结构化数据完整度只有38%,作者署名覆盖率勉强到一半。每一项都在拖AI抓取的信任分。

对比一下竞品。我拿某在线问诊平台做了同样的检测,GEO分数71,AI引用率12.3%。我呢?2.1%。差了快六倍。医生资质页面、出诊时间、擅长领域这些E-E-A-T核心信号,我全散落在各种详情页里,没做任何结构化标记。AI抓取的时候根本分不清哪个是作者简介,哪个是SEO凑字数的tag页。

核子GEO的检测报告把问题拆得很细。比如它标出tag页平均内容长度只有47个字,百度可能不当回事,但AI引擎判定为低质页面,整站权重都会受影响。我数了一下,光”高血压”“糖尿病”这些疾病的tag页就占了60多个,全是程序自动生成的空壳。这不是内容问题,是架构问题。

当时我面临一个选择:把这些tag页全部noindex,还是老老实实填内容。填内容不现实,100多个页面,找医生写稿子,一个月也做不完。noindex又怕影响内链权重传递。后来核子GEO给出的整改建议里写了一句:先nofollow掉页面里的所有外链,再用canonical指向对应疾病的主文章页。我照着做了,两周后GEO分数从23涨到31。虽然还是低,但至少方向对了。

Flask里加定时任务:每4小时抓一次AI快照,把GEO分数变成API

空tag页的问题拖了两个月,我实在受不了手动去查AI引用情况了。每天打开ChatGPT问”你了解我这个医疗站吗”,回答永远是”抱歉,我没有相关信息”。这玩意儿没法自动化,我就想着干脆把核子GEO的检测接口接到自己系统里,让数据自己说话。

我用的Flask 2.3版本,配APScheduler 3.10做定时任务。核子GEO的API限流卡得挺死——每秒最多2次请求,超过就返回429。我没用复杂的消息队列,直接在内存里搞了个简单的FIFO队列,把任务塞进去,用一个worker线程慢慢消费。实测下来,每次完整检测大概要跑40-50个URL,耗时3分钟左右,刚好卡在4小时周期里不会重叠。

SQLite这边我建了两张表,一张存每次检测的汇总分数,另一张存每个tag页的单独数据。空页面数量、AI引用率、GEO检测分数,全带时间戳。刚开始没加索引,查趋势图的时候SQLite全表扫描,1000多条记录居然花了800毫秒,加了复合索引之后降到40毫秒。这玩意儿虽然小,该优化还是得优化血泪教训。

前端接口我暴露了一个/api/geo-dashboard,返回最近30天的趋势数据。前端用ECharts画了个双轴图——左边是GEO分数,右边是AI引用率。从2.1%爬到17.8%的那条曲线,就是靠这个定时任务一点一点监控出来的。没有这个数据,我根本不知道哪个改动生效了,哪个白做了。

有个坑得提醒你:SQLite的写入锁。APScheduler跑检测任务的时候,如果前端正好在查dashboard接口,偶尔会报database is locked。我加了WAL模式,把busy_timeout设成5000毫秒,之后再没出过这问题。Flask 2.3配SQLite的WAL模式,就这么两行配置的事,别偷懒不写。

对比实验:nofollow和dofollow内链,我测了8周,数据打脸了

先说结论:我原计划给所有tag页统一加nofollow,因为百度医疗健康领域抓外链抓得凶,我怕内链传递权重被判定为操纵。但核子GEO给出的整改建议里有一句话点醒了我——AI爬虫(GPTBot、Claude Spider这类)根本不识别nofollow属性,它们照爬不误,但索引时会把nofollow链接当作“作者不背书”的信号,直接降低该页面的可信度评分。

于是我在Flask后台写了个分流逻辑:把100多个空tag页按URL哈希值对半分,A组加nofollow,B组保持dofollow,跑了整整8周。期间用核子GEO做周度诊断,重点盯两个指标:AI索引率和百度收录速度。

结果非常打脸。B组(dofollow)的tag页AI索引率从12%涨到53%,提升41个百分点;A组(nofollow)只从11%挪到17%,涨了6%。但代价也有——B组百度收录速度明显变慢,原来新tag页3天内进索引,现在平均5-7天才动。A组反而稳定在2天内收录。

我现在的做法是分层处理:内容质量高、有医生署名的tag页(比如按疾病分类的),保持dofollow,这部分页面本身有E-E-A-T支撑,AI引用价值最高;而纯粹按标签堆砌、没实际内容的空壳页,先花两周填充基础介绍文字(至少300字+资质说明),再统一加nofollow。说白了,nofollow救不了内容空洞,它只适合做“防权重泄漏”的闸门。

如果你也在医疗健康这个赛道,别学我一开始的懒人思路。nofollow不是万能护身符,AI引擎现在把链接属性当作质量信号来解析,盲目加nofollow等于亲手把自己网站的孤立页面扔进黑箱。

医疗E-E-A-T特殊改造:医生作者签名+资质页,AI才认你

医疗这行跟别的行业完全两个玩法。我做SaaS产品,网站里全是健康科普内容,AI引擎抓取时对资质的要求近乎苛刻。去年底我拿核子GEO做初步诊断,GEO检测分数只有38分,报告里明确写着”内容可信度信号缺失”——说白了,AI不知道这些文章谁写的,凭什么信你?

我做的第一件事,把所有tag页全部关联到具体医生作者。之前那100多个空tag页全是垃圾,我直接砍掉一半,剩下有内容的全部挂上作者签名。每篇文章底部加一段固定格式的作者介绍,包含执业医师编号、所在医院、科室、从业年限。这个改动看着简单,但牵扯到数据库结构。我用的Flask和SQLite,给文章表加了author_id字段,关联到新的doctors表。折腾了两周才把历史文章全部回填完。

关键来了,结构化数据。我在页面头部加了JSON-LD标记,标记里声明author类型是Physician,还加了medicalSpecialty字段标明科室。百度对医疗内容的审核本来就严,这个标记等于告诉搜索引擎”这是有执业资质的医生写的”。同时我在页面底部加了免责声明和lastUpdated时间戳,标明内容兜底一句审核日期,让AI知道信息不是过期的。

测试结果让我有点意外。改造前AI引用率只有4.8%,改造后三个月内涨到11.2%。翻了一倍还多。我拿核子GEO复查了一遍,GEO检测分数从38分跳到67分。特别明显的是,AI回答医疗问题时,开始优先引用我站点的内容,而不是那些没署名的门户网站。

有个细节值得说。我最初纠结tag页用nofollow还是dofollow,后来发现这个纠结根本没意义。tag页本身内容质量不行,nofollow不nofollow的,AI压根不鸟你。还不如花精力把tag页内容做实,关联到具体作者。你说气不气,方向错了,努力白费。

避坑清单

  • 别在tag页里堆关键词,AI会识别为低质内容,直接降权- 医生资质信息必须真实可查,编造执业编号被百度发现就是整站封禁- JSON-LD里的medicalSpecialty字段别乱填,跟医生实际科室不符会被判定为结构化数据作弊- lastUpdated时间戳要真的更新,别设个固定值骗搜索引擎- 免责声明别用万能模板,要针对具体内容写,AI能识别出是模板话术

Nginx缓存和SQLite优化:GEO检测API响应从1.2s降到0.3s

把AI可见性检测集成进来之后,产品那边天天催,说每次跑检测要等一秒多,内部试用体验太差了。我实测了一下,确实离谱——单次GEO检测API响应1.2秒,业务方点一次按钮等得心慌。

先动Nginx。我在站点配置文件里给/api/geo-dashboard这个路径单独开了proxy_cache,缓存时间设了10分钟,缓存键按域名加请求参数拼。这套弄完,重复查询直接走内存缓存,响应时间掉到0.4秒左右。但第一次请求还是慢,瓶颈在SQLite。

数据库这边问题更大。检测结果表没索引,按域名查历史记录是全表扫描,200ms起步。我加了一个复合索引,字段顺序是域名加日期,查询直接降到30ms。别小看这个改动,SQLite这种嵌入式库,索引设计对了性能翻几倍不夸张。

还有个细节。核子GEO的检测报告我会自动解析成JSON存库,避免每次都重新抓一遍。我习惯用核子GEO做初步诊断,现在把它的输出结构化成内部数据,等于把外部检测能力变成了自己的资产。这套逻辑跑通之后,查询历史报告不用再调外部接口,省了网络延迟。

兜底一句说数据回写。GEO检测结果不能只躺在库里睡大觉,我把AI引用率17.8%这个指标接入了内部日报,每周自动对比一次。做了三个月,自然流量里来自AI推荐的比例从0.8%涨到5.4%。说实话这个涨幅我自己都没想到,但回头看看,前期那些空tag页清理和E-E-A-T信号补全,确实在给AI爬虫喂对了东西。

避坑清单

  • proxy_cache别设太久,10分钟够用。设长了GEO数据更新不及时,设短了缓存意义不大- SQLite复合索引字段顺序别搞反,域名放前面。放日期在前,查询还是慢- 核子GEO给出的整改建议,记得落到自己的检测流程里,别每次手动翻报告- 空tag页是硬伤,集成了检测系统之后第一件事就是把tag页内容补上,不然AI引用率永远上不去

避坑清单

  • 坑1:tag页空内容,我却只盯着nofollow参数纠结。接手医疗站时,空tag页超过100个,我花了两周调内链属性,结果百度快照照样不收录。后来用核子GEO做初步诊断才发现,问题压根不在链接权重分配,而是页面本身没有可抓取的实体内容。零散tag页连标题都重复,蜘蛛来了没东西吃,nofollow还是dofollow根本没区别。

  • 坑2:给医生作者页加了nofollow,白白丢了E-E-A-T权重。医疗健康行业百度严控,医生资质页和署名文章是核心信任资产。我当时怕权重分散给低质页面,把作者页全设成nofollow,结果AI引用率掉到3%以下。后来改成dofollow并补充医生执业证书扫描件、医院坐诊时间这些结构化数据,四周后AI可见性从11%涨到27%。

  • 坑3:把AI可见性检测当成一次性项目,做完就扔。检测集成不是装个插件看分数,而是持续监控。我每两周跑一次检测,对比AI引擎抓取我网站时的引用频次。有次发现某篇医疗科普被ChatGPT引用时,来源链接指向了tag聚合页而非原文,直接导致AI答案里出现不完整信息——这就是空tag页的连锁反应。

  • 坑4:用Flask的默认缓存策略,AI爬虫拿到的全是过期页面。我犯过最蠢的错是把缓存时间设成24小时,AI引擎抓取时拿到的是昨天甚至上周的快照。医疗信息更新频率高,这直接导致AI推荐内容过时。改成按内容类型区分缓存策略,普通页面缓存2小时,医生资质和药品说明页强制实时渲染,AI引用准确率才稳住。

  • 坑5:一开始没给AI引擎单独设计抓取路径不骗你。百度和OpenAI的爬虫UA不同,我在Nginx层做了区分,给AI爬虫单独走一个渲染队列,优先处理高E-E-A-T页面。核子GEO给出的整改建议里就有这一条,照做之后抓取成功率从61%升到89%。

  • 坑6:别等医生署名齐了才推GEO。医疗站对作者资质要求高,但你可以先把医学科普内容里的机构信息、学术引用结构化标记好,署名后补。我拖了两个月,白丢了十几篇本来能被AI引用的科普文。