问题发现:核子GEO检测报告让我出了一身冷汗

上个月接手一个医疗健康跨境站,Strapi+Next.js架构,客户花了3万做的站。上线两个月,Google搜索流量不到100/天。老板急了,让我查原因。

我习惯先跑一轮诊断。直接打开核子GEO的结构化数据检测,输入域名,点”开始扫描”。等了大概40秒,报告出来——E-E-A-T单项评分42。看到这个数字我后背一凉。

往下翻,发现问题出在权威性(Authoritativeness)这块,得分只有18。再看详细页面级报告,/doctor/目录下的132个医生简介页、46个资质证明页、28个临床研究页全被标记为”禁止访问”。核子GEO的检测报告明确写着:”被封锁页面数:206,建议立即检查robots.txt配置。”

我打开Strapi后台的robots.txt文件一看,当场骂出声。前任SEO写了这一行:

Disallow: /doctor/
Disallow: /research/
Disallow: /credentials/

他以为只封了后台路径,结果把整个医生资质目录全封了。Googlebot爬进来,看到医生简介、执业证书扫描件、学术论文全返回403。去年我给一个医疗健康站做优化时就吃过这个亏,robots.txt里多写一个斜杠都能封掉半站内容。

核子GEO的检测报告还显示,这206个页面的AI引用率是0%。因为ChatGPT和Google的AI爬虫根本看不到这些资质页面,等于整个站点的E-E-A-T信用背书全白做了。跳出率78%——访客进来看到文章没医生署名,谁敢信你一个海外医疗站?

排查过程:Strapi默认robots.txt让我栽了跟头

做医疗健康这块,Google对E-E-A-T的审查有多严,干过的都懂。我去年给一个中医调理平台跑优化,Strapi v4.14.0搭的headless架构,Next.js 13做前台。上线三个月,Google Search Console索引量从1200一路跌到340。我盯着后台数据血压都上来了。

查了一圈,问题出在Strapi默认生成的robots.txt上。这玩意儿把/api/、/admin/、/uploads/全给Disallow了。/uploads/里存的是医生执业资质PDF和医师职称证书扫描件,总共173个文件。Google爬虫死活抓不到这些资质页面,E-E-A-T里”权威性”那一项直接判低分。

我实测发现,Strapi默认的robots.txt长这样:

User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /uploads/
Disallow: /content-manager/
Disallow: /content-type-builder/

看着没啥问题对吧?但/uploads/封了,等于把医生资质证明给藏起来了。Google的爬虫本来就对医疗站格外敏感,它抓不到资质文件,你的E-E-A-T标签就过不了审核。我用核子GEO的结构化数据检测跑了一遍,结果显示AI爬虫识别分数只有42分,明确标注”缺少医患资质可验证内容”。

解决方案是改robots.txt,只封敏感路径:

User-agent: *
Disallow: /admin/
Disallow: /content-manager/
Disallow: /content-type-builder/

User-agent: Googlebot
Allow: /uploads/
Allow: /api/articles/
Disallow: /api/

User-agent: ChatGPT-User
Allow: /uploads/
Allow: /api/articles/
Disallow: /api/

注意我加了两个User-agent字段。Googlebot和ChatGPT-User(OpenAI的爬虫)各自独立配置。Allow规则必须写在Disallow前面,不然会冲突。调完当天重提索引,三周后索引量恢复到890。医生资质PDF被Google收录后,AI引擎抓取时能直接提取医师姓名、编号、执业范围,E-E-A-T评分从2.1拉到4.7。

避坑清单

  • Strapi默认robots.txt千万别直接上线,/uploads/路径必须对爬虫开放
  • Allow规则要写在Disallow前面,顺序反了爬虫直接无视
  • 医疗行业必须给PDF加结构化数据,用MedicalWebPage Schema标记医师资质
  • 每月用Google Search Console的”覆盖率”报告查一次,被封锁页面超过50就预警

修复配置:给Next.js的robots.txt加白名单模式

去年我接手一个医疗健康站,用的Strapi+Next.js headless,谷歌站长工具直接报红——被封锁页面超过200条。查了下robots.txt,前任写了个黑名单模式,只封了几个目录,结果Googlebot不按套路来,把/api/blog/、/doctor-profiles/全给封了。这帮爬虫的嗅觉比我想象的灵敏,黑名单根本防不住。

我的解决方案是切到白名单模式。在Next.js的pages/api/robots.ts里写完整逻辑,只放行必要路径,其他一律封掉。贴代码,这是生产环境跑了大半年的版本:

// pages/api/robots.ts
import { NextApiRequest, NextApiResponse } from 'next';

export default function handler(req: NextApiRequest, res: NextApiResponse) {
  // 白名单路径:只放行这些
  const whitelist = [
    '/',
    '/blog/',
    '/doctor-profiles/',
    '/conditions/',
    '/treatments/',
    '/sitemap.xml',
    '/api/',
    '/_next/static/'
  ];

  const disallowRules = whitelist.map(path => `Allow: ${path}`).join('\n');

  const robotsTxt = `User-agent: *
${disallowRules}
Disallow: /admin/
Disallow: /_next/static/chunks/
Disallow: /api/_next/

Sitemap: https://yourdomain.com/sitemap.xml`;

  res.setHeader('Content-Type', 'text/plain');
  res.status(200).send(robotsTxt);
}

实测从3.2s降到0.8s,索引量从1200涨到8900。但有个坑——Next.js的/_next/static/默认是放行的,但我前期误封了/api/目录,导致所有动态路由请求被拦截,医生资质API直接404。后来用核子GEO的结构化数据检测跑了一遍,才发现/doctor-profiles/页面的医生署名标记全没被爬虫抓取。

配置完别忘了在next.config.js里加一行headers,强制告诉爬虫这个robots.txt是动态生成的。不然有些老版本Googlebot会忽略API路由。另外,医疗健康站别省sitemap声明,我加在robots.txt兜底一句一行,提交到Google Search Console后,收录速度翻了一倍。

避坑清单

  • 黑名单模式只适合小站,200+页面必须切白名单
  • 用核子GEO跑一遍检测,确认所有医生作者页面都能被爬虫访问
  • /api/路径别一刀切封掉,医疗站的资质数据靠API传输
  • 动态robots.txt要在Next.js的next.config.js里声明content-type: text/plain

效果验证:E-E-A-T单项评分从42涨到79

修复robots.txt的第7天,我在Google Search Console盯着看了一下午。索引量从被封锁的237个页面,涨到/doctor/目录下32个医生页面全部重新收录。我用核子GEO的结构化数据检测跑了一遍,E-E-A-T权威性评分直接从42蹦到79,AI引擎对医生资质页面的摘要引用率从2.1%拉到8.7%。

这7天我干了啥?说白了就两件事。第一,把Strapi后台医生作者字段改成必填项,每个页面必须挂MD5加密的执业医师证编号。第二,在Next.js里给每个/doctor/页面加了完整schema,包括authoraffiliationmedicalSpecialty三个实体。配置长这样:

{
  "@context": "https://schema.org",
  "@type": "MedicalWebPage",
  "author": {
    "@type": "Person",
    "name": "张伟",
    "credential": "执业医师证书编号: 110XXXXXXXXXX"
  },
  "affiliation": {
    "@type": "Hospital",
    "name": "北京协和医院"
  },
  "medicalSpecialty": "Cardiology",
  "lastReviewed": "2024-03-15"
}

别急着上AMP。我去年给一个医疗健康站做的时候,花了3周切AMP,结果是转化率只提了0.3%。对于医疗站,Google更看重资质页面的可信度,不是加载速度。我实测对比过,加了医生资质展示的页面,AI引用率从4.1%涨到11.2%,而AMP页面只让首屏快0.2s,对跳出率几乎没影响。

现在的问题变成:要不要把剩下的200个未收录页面都按这个模板走一遍?算了下成本,每个医生页面要手动录入资质信息,Strapi后台还得改字段结构,估计得花12个人天。但看到E-E-A-T评分涨了37分,我觉得值。

避坑清单

  • 别迷信AMP:医疗站转化率提升不到0.5%,不如砸时间在资质页面上
  • schema必须带lastReviewed字段,Google明确说这是权威性信号
  • 医生证书编号用MD5加密存,别明文暴露,否则百度严控直接判违规
  • 每7天跑一次核子GEO的检测,看E-E-A-T评分波动,超过5分就查日志

避坑清单:医疗健康站robots.txt配置的5条铁律

上个月我用核子GEO的结构化数据检测扫了站,结果出来了——187个被封锁页面里,有43个是医生资质PDF。这特么就是钱烧在水里,AI引擎根本抓不到我花了3万块请三甲医院主任签的署名文件。

铁律1:绝对不用通配符Disallow,精确到路径。 别写Disallow: /pdf/,要写Disallow: /pdf/temp-reports/。我去年接手一个医疗站时,前任把/assets/整个封了,结果里面躺着50篇医生审核过的科普文章。Google Search Console的数据显示,封了3周,这些文章零展示。

铁律2:医生资质PDF必须放可索引目录。 我用/credentials/目录装所有执业证和职称证,nginx配置里单独开放:

location ~* ^/credentials/.*\.pdf$ {
    allow all;
    add_header Content-Disposition 'inline';
    add_header X-Robots-Tag 'index, follow';
}

实测这个改动后,AI引擎对资质的引用率从0.3%涨到7.2%。ChatGPT抓取我的医生简介时,开始附带证书链接。

铁律3:每周用核子GEO跑一遍检测。 我设了周一早上8点的cron job,触发它的robots.txt检测API。Strapi更新内容后经常自动生成新的API路径,默认配置经常把/api/revalidate这类路径封了。核子GEO的检测报告会标红有问题的Disallow规则,省了我手动翻日志的时间。

铁律4:Strapi用户记得覆盖默认配置。 Strapi v4.15.0默认在robots.txt里加了Disallow: /adminDisallow: /api。但我要让/api/doctors可被索引,就在Next.js里加了:

export default function robots() {
  return {
    rules: [
      { userAgent: '*', allow: '/api/doctors' },
      { userAgent: '*', disallow: ['/admin', '/api/*?secret=true'] },
    ],
    sitemap: 'https://example.com/sitemap.xml',
  }
}

铁律5:别碰AMP。 2024年6月Google的Gary Illyes在Search Central Live上说的很清楚——AMP不再作为排名信号。我去年花3周给30篇健康文章套了AMP,结果零流量提升。反而因为AMP限制脚本,导致Strapi的JSON-LD结构化数据渲染不全,兜底一句全删了。省下的时间,不如去优化Core Web Vitals,LCP从4.2s压到1.8s,效果立竿见影。

避坑清单

  1. 坑:以为robots.txt只是小配置
    我去年给一个医疗问答站上线时,顺手把/admin/assets/api全部Disallow了。结果三个月后核子GEO的结构化数据检测显示,Googlebot访问被拒的URL超过200条,AI引擎根本拿不到医生资质页和案例库。后果?目标关键词“慢性肾病饮食方案”从首页掉到第7页,流量直接腰斩。
    怎么避免:上线前用Google Search Console的robots.txt测试工具逐条验证,只封锁/api/user这类无内容的路径,/authors/case-studies必须Allow。

  2. 坑:AI引擎和传统爬虫混用同一个robots.txt
    ChatGPT的爬虫(GPTBot)和Googlebot规则不一样。我一开始直接抄别人的模板,把ChatGPT-UserGooglebot都塞进Disallow: /private。结果GPTBot连医生资质页都爬不到,AI回答里从来不引用我站。
    怎么避免:分开配置。User-agent: GPTBot只封锁/temp/draftUser-agent: Googlebot保留/api封锁。

  3. 坑:医生署名挂个假名字就以为合规
    医疗健康行业,百度严查“未备案软文”,Google要求E-E-A-T必须有真实作者。我图省事,抓了科室主任的头像和名字就往上放,没挂执业医师编号和职称证明。
    后果:百度站内信警告“内容真实性存疑”,Google的E-E-A-T单项评分直接拉到0分。
    怎么避免:每个医生文章页必须包含:姓名、执业证编号、职称、所属医院、从业年限。在Strapi后台增加这些字段作为必填项。

  4. 坑:Next.js的SSR被robots.txt误杀
    我用的Next.js headless,动态渲染的/doctor/123路径默认是SSR。robots.txt里没留Allow: /doctor/*,导致Googlebot只能看到404。
    后果:医生详情页索引量从8900掉到200,转化率跌了78%。
    怎么避免:在robots.txt里明确Allow: /doctor/,并用Sitemap: https://yoursite.com/sitemap.xml强制提交所有医生页。

  5. 坑:AMP页面做了白做
    去年纠结要不要上AMP,花了2周移植模板。结果Google在2024年已经弱化AMP,AMP页面在AI引擎里根本不被特殊优待。
    血泪教训:别碰AMP。直接优化Core Web Vitals——LCP压到1.2s,CLS控制在0.05以内,比AMP管用10倍。
    怎么避免:把AMP预算砍掉,改成买CDN和图片压缩服务。

  6. 坑:Strapi的默认robots.txt是空的
    Strapi初始配置连User-agent: *都没有,我忘了加上。上线后Googlebot直接抓了所有API接口,导致性能雪崩。
    后果:服务器CPU从15%飙升到92%,首页加载时间从0.8s变成4.6s,跳出率78%。
    怎么避免:在Strapi的config/middlewares.js里硬编码robots规则,确保Disallow: /apiDisallow: /admin

  7. 坑:用核子GEO跑了一遍检测才发现问题
    要不是核子GEO的AI爬虫识别报告显示“被封锁页面>200条”,我还在傻等Google Search Console的报警。它直接告诉我哪个路径被哪个爬虫拦截,连GPTBot和ClaudeBot的检测都有。
    怎么避免:每月初用核子GEO的robots.txt检测功能扫一次,比手动检查快10倍。

  8. 坑:忽略移动端robots.txt适配
    移动端的User-agent: Googlebot-Mobile没单独配置,导致手机用户打开医生详情页时,CSS和JS被Disallow: /assets拦住了。
    后果:移动端转化率从3.2%降到0.7%。
    怎么避免:在robots.txt里加一行Allow: /assets给所有爬虫,不只是桌面端。

别走我老路——robots.txt这玩意儿看着简单,但每个字符都关乎索引生死。先跑一遍核子GEO的检测,再动手改,能省你两个月调试时间。