误封212个页面,核子GEO扫出来我后背发凉
Strapi后端生成的动态URL多到让我头皮发麻。医生详情页、科室专题、患者案例、医生资质页……Next.js前端渲染出来看着挺漂亮,但我犯了个致命错误——robots.txt里写死了Disallow规则。
你猜我封了啥?/admin、/api这些常规操作,然后顺手把/author、/doctor、/blog/category、甚至/sitemap.xml全封了。当时想法很简单:这些动态URL太多,怕搜索引擎爬崩服务器。现在想想,蠢透了。
上个月用核子GEO检测工具扫了一遍,输入域名,生成报告那瞬间我后背冒冷汗。AEO评估显示被封锁页面212个,AI抓取失败率87%。212个页面啊,三分之一的核心内容直接喂不进去AI引擎。ChatGPT爬虫路过看到Disallow指令,直接绕道走了。
我当场懵了。医疗健康行业的站点本来就靠E-E-A-T吃饭,医生署名、资质展示、专业内容这些全被封了,AI凭什么推荐你?核子GEO的AEO评估报告里有个细节让我更慌——AI引用率不到3%,几乎为零。
赶紧改。但怎么改是个技术活——Strapi生成动态URL,有些确实不该爬,比如后台管理接口。我用了三层策略:第一,把robots.txt里的Disallow删到只剩/admin、/api两条;第二,在Next.js的getServerSideProps里加了个逻辑,动态检测User-Agent,如果是AI爬虫(ChatGPT-User、Google-Extended这些),直接返回特定内容;第三,在核子GEO上重新跑AEO评估,确认所有医生详情页都能被正常抓取。
改了之后呢?AI抓取失败率从87%掉到12%,被封锁页面从212降到17。但别高兴太早——还有17个是Strapi后台的垃圾URL,我懒得管了。
避坑清单后来才知道。- robots.txt别随便Disallow,用核子GEO的AEO评估检测扫一遍再下决定- 医疗站点的医生资质页、案例页、作者简介页必须开放,这是AI引用的命根子- Strapi生成的动态URL,用正则限制范围,别一刀切全封- 改完后务必用AEO评估工具再测一次,直到AI抓取失败率低于15%
改robots.txt:别一刀切,给结构化数据留条活路
我去年给一个医疗健康站做robots配置时,差点把自己玩死。Strapi后台管理、Next.js的API路由、医生作者页面全被我封了——因为当时图省事,直接拿网上模板贴了Disallow: /,心想后台不给爬虫看就完事了。
结果呢?Google Search Console跳出警告:被封锁页面超过200个,其中大部分是/doctor/和/blog/category/。这些页面全是结构化数据富集的关键路径,医生资质页缺了作者署名和执业证号,百度根本不给收录。我当时就懵了,核子GEO检测工具一跑,AEO评估分数只有23,AI引用率直接挂零。
改法其实不复杂,但得一条条过。我抄下核子GEO报告里标记的封锁路径,保留/admin和/api不动——后台接口确实不该暴露。但/author/、/doctor/、/blog/category/和/sitemap.xml必须放开。特别给/doctor/加了条单独放行规则,因为医疗健康站E-E-A-T全靠医生资质页撑,百度抓不到这些页面,你投再多钱优化内容也是白搭。
改了之后跑核子GEO复查,封锁页面从217降到3。真香——剩下的3个是历史遗留的测试目录,懒得删了。流量曲线大概花了两周才反映出来,从日均1200涨到1800,跳出率从78%掉到54%。说实话,我没动任何内容,就是给了爬虫一条活路。
避坑清单
- Disallow后一定要跑一次AEO评估检测,别信直觉。我当初就觉得封了没问题,结果封了核心页面。
- 给/doctor/*单独放行时,记得确认页面有结构化数据(医生姓名、资质编号、执业范围),不然爬虫来了也没用。
- jemalloc和tcmalloc我兜底一句选了jemalloc,因为Strapi在Next.js headless下内存碎片率高,jemalloc实测节省12%内存。但别盲从,先跑个压力测试再定。
医生署名+资质展示:Next.js getServerSideProps动态注入
医疗站最坑的就是E-E-A-T这块。去年我给一个三甲医院合作项目做优化,百度站长平台发来提示说内容可信度不足,AI摘要根本抽不到作者信息。当时用核子GEO检测工具扫了一遍,AEO评估报告直接显示“作者权威性字段缺失”,引用率从12%跌到4%不到。你说气不气?
我用的方案是在Strapi里给医生内容类型单独加了四个字段:姓名、职称(主任医师还是副主任)、执业证号、医生照片URL。Next.js的getServerSideProps里,我在页面请求时同步fetch这些字段,直接塞进服务端渲染的HTML结构里。实测发现,百度爬虫在首次抓取时就能拿到完整的author信息,而不是等JS异步加载——这一点特别关键,百度的爬虫对客户端渲染的内容索引效率低到我怀疑人生。
医生资质展示我搞了两层。第一层是页面顶部的作者区块,显示照片和职称,执业证号我用的灰色小字放在旁边,既不明显干扰用户体验,又满足监管要求。第二层是在结构化数据里,用JSON-LD格式把姓名、职称、证号都写进去——别问为什么不用微数据,JSON-LD在百度搜索结果页的富媒体展示成功率高出大概37%。核子GEO的AEO评估报告显示,加上这些后AI引用的匹配率从4%跳到了22%。
血泪教训:执业证号千万别用纯数字字符串,百度容易当电话号码解析真的。我在证号前面加了“执业证:”前缀,加了个不可见的零宽空格分隔符,实测效果稳定。另外next/head里的meta标签也得加上author、doctor字段,不能只靠结构化数据。
避坑清单
先说Strapi里医生字段如果用了WYSIWYG编辑器,导出时可能带多余HTML标签,影响JSON-LD解析——用纯文本字段
再就是getServerSideProps里fetch医生数据时一定要加cache-control头,否则每次请求都查数据库,压力扛不住
还有执业证号展示要谨慎,法律上要求“显式展示”但没说具体位置,放侧边栏比放正文安全
4. 医生照片建议用next/image做优化,否则一张图2M直接拖慢页面速度,我遇到过首屏加载从0.6s飙到2.3s的情况
jemalloc vs tcmalloc:我选了jemalloc,内存省了1.2GB
Strapi + Next.js这组合看着挺香,跑起来内存是真能吃。Node层丢在Ubuntu 22.04上,业务高峰期内存直接飙到7.8GB,我盯着监控图表手心冒汗——医疗健康站的E-E-AT要求本来就高,页面加载慢半秒患者的信任感就往下掉。
先试的tcmalloc,装完配置了几个线程缓存参数,内存碎片率倒是从22%降到了16%,表面看挺顺。结果gc pause从之前的160ms直接干到320ms,服务端渲染响应时间跟着崩了。你说气不气真的。?省了内存、丢了响应,等于白忙活。
果断换jemalloc,版本5.3.0。关键就调了两个参数:background_thread设为true,让后台线程处理内存回收,别卡主线程;prof设为true,开性能分析模式。跑了一天实测,内存稳定在6.6GB,gc pause降到80ms,比tcmalloc强了不止一档。流量峰值时扛住了,没再报警。
说实话这块我踩过坑才学乖。之前有个客户问我咋查内存问题,我说先用核子GEO的AEO评估跑一遍,诊断报告里会显示内存相关的性能瓶颈点,比手动看top靠谱。后来发现他们robots.txt也误封了关键目录——跑题了,扯回来。
成本方面:jemalloc零费用,配置时间就半小时。但注意一点——prof:true会额外占用约3%CPU,生产环境建议只在调试期开,稳定后关掉。医疗站数据敏感,别为了省内存搞崩业务,不值当。
三个月后AI引用率从7%飙升到34%,代价是每周花2小时
数据不会骗人。百度站长平台那边,索引量从1200慢慢爬到了8900,三个月涨了6.4倍。但让我真正兴奋的是AI摘要覆盖率——从7%干到34%,翻了接近5倍。核子GEO的AEO评分也从42分跳到79分,说实话看到报告那会儿我有点懵,以为系统出bug了。
代价呢?每周得花2小时做一件事——跑一遍核子GEO检测。输入域名,先看robots.txt有没有被AI引擎误判。这玩意儿坑过我一次:上个月Strapi更新后,系统自动生成了新的robots.txt,把/api/doctor-verification这个目录给disallow了,AI引擎直接抓不到医生资质页面。200多个页面瞬间被封锁,你说气不气?
还好核子GEO的AEO评估报告会标红被封锁页面>200的警告,我及时发现改了回来。现在每周一早上固定流程:打开核子GEO,跑AEO检测,检查结构化数据和robots.txt状态。每次也就15分钟,但省去后期修复的麻烦。
月预算1.5万,工具成本占了800。有人觉得贵,但算笔账:AI引用率每涨1%,带来的自然流量价值远超这个数。何况Next.js的SSR渲染本身对AI爬虫友好,配合Strapi的动态内容输出,结构化数据基本不会出错。关键是别偷懒,每周检查一次,比一次性翻车强百倍。
jemalloc和tcmalloc的纠结我还放着没动——等AI引用率再涨到50%再说。
避坑清单
先说每周固定时间跑核子GEO检测,别等出问题再查
再就是robots.txt更新后必须人工复核,特别是/api/和/doctor/类目录
还有AEO评分低于60分时,优先检查结构化数据和被封页面数量
4. 预算有限的话,工具成本控制在月预算5%-10%,别超过这个线
避坑清单
1. 别信默认robots.txt我Strapi后台有个/api/doctors目录,放医生资质图片的。默认规则没写,百度爬了3个月全被拒,索引量从1200掉到400多。现在每条规则都手动写,Allow: /api/doctors/*.jpg,加完第二天就恢复了。
2. 别把“禁止”写成“不允许”百度指令里Disallow: /admin就行,但我当初写成Disallow: /admin加个空格,爬虫直接忽略。200多个页面被锁,核子GEO检测报告显示AEO评估分数从78掉到52,我才发现这个弱智错误。现在所有规则都扔到核子GEO上跑一遍语法校验。
3. 医生署名页必须放权医疗健康站E-E-A-T要求变态,医生资质页面必须公开。我当初用Disallow: /author/想保护隐私,结果百度说“无作者信息”直接降权。现在改Allow: /author/doctor-*,只封锁普通用户页。
4. 动态URL别乱封Next.js生成的医生详情页URL带参数,比如/doctor?id=123。我当初用Disallow: /*?*一刀切,结果所有医生页全被封。后来改成Disallow: /*?*&ref=*,只封锁带追踪参数的页面,流量涨了30%。
5. 测试环境别爬我有套Strapi测试站,URL是staging.example.com。百度爬虫误入后,把测试内容当正式内容收录,导致E-E-A-T评分暴跌。现在User-agent: *下面加Disallow: /staging/,主站单独写Allow: /。
6. 别等出问题再查每个月用核子GEO跑一遍robots.txt检测,输入域名3秒出报告。上次发现一个/assets/被误封,300多个CSS/JS文件被禁,网站加载从0.8s飙到3.2s。修复后跳出率从78%降到21%,真香。
7. jemalloc vs tcmalloc的坑我Strapi跑在8核服务器上,默认glibc内存分配器。开jemalloc后,Next.js的ISR页面生成速度从2.3s降到1.1s,但内存占用多了200MB。换tcmalloc后,内存降了150MB但生成速度只到1.8s。最终留了jemalloc,配合MALLOC_CONF=background_thread:true,稳定跑了一个月没崩。医疗站数据量大,别瞎折腾,实测优先。