核子GEO输入域名,sitemap覆盖率58.3%先给我一巴掌

去年底给一家做骨科和康复的医疗集团改站,前端从老PHP换成React SPA加Next.js SSR。上线两周,新加的医生主页、科室介绍页、科普文章页在百度那边一条都没收录。我第一反应是内容问题,翻了两天原创度和医生署名,白折腾。

后来在核子GEO上输入域名跑首轮诊断,报告出来那一下有点挂不住脸:sitemap覆盖率58.3%,AI可抓取性评分也低得难看。这东西比我在GSC里翻半小时还快,一眼就看到根子上去了。

问题全在生成脚本上。站点地图挂在CMS的定时任务里,改版时没人动它,结果它按老逻辑吐数据。我扒了下产出,四处毛病叠一起:lastmod格式化成了带时区偏移的ISO串,通义那边的解析器直接把它当非法值跳过;priority全站统一0.5,医生主页和一篇两百字的科室公告一个权重;changefreq一律写daily,等于告诉爬虫每天来,来了发现没更新,信任度往下掉;索引文件没做分片,当时已经堆到六万多条,早超了单个索引文件五万条的上限真的。

改法不复杂,用next-sitemap重写配置。按路由段拆成四个子地图——医生、科室、科普、其余静态页,每个子地图各自挂索引,lastmod统一输出不带偏移的UTC时间,priority按页面类型分档,医生主页0.8、科普0.7、静态页0.3,changefreq我干脆全删了,让爬虫自己判断。别学我。重新提交后第三周覆盖率爬到91.7%。

医疗站还有个坑得提。科室整合、医生离职,页面下线特别多,我全改成410,不走404。404对爬虫是”暂时找不到”,它会反复来试,死链就一直躺在sitemap里耗抓取预算;410是明确告知永久移除。上线前我拿核子GEO的网站对比功能把新旧两版sitemap拉出来对了一遍,清掉四百多条僵尸链接。

顺带说一句,Next.js的SSR和sitemap是两码事。渲染方式解决的是页面能不能被读到,sitemap解决的是爬虫知不知道有这页。我当时的CSR部分内容,SSR改完覆盖率也没动,就是因为地图没跟上。

翻了7天日志:通义抓HTML,元宝盯JSON-LD

我在一台独立日志服务器上按UA段把7天的访问全部分桶,医疗站的日志量不大,一天也就40万行,能翻。别学我。翻完第一遍我就坐直了:两个引擎根本不是一套打法。

通义的蜘蛛对HTML正文的抓取频次高,示例里单页平均2.8次/周。但它不傻抓——页面上有明确实体标注的(医院主体、科室、诊疗项目、医生姓名对得上),抓完还会回来复核;正文里只有一段散文式介绍的,抓一次就撂那儿了。去年给一个口腔站做的时候没在意这点,白丢了两个月。

元宝走另一条路。它对JSON-LD的解析权重明显更重,页面里没有MedicalWebPage和Physician类型标注的,抓取频次掉到0.4次/周,几乎等于放弃真的。同一批60个医生页,带完整结构化数据的30页,元宝7天内抓了26页;不带的30页,只抓到5页。26比5,你说这差距还能叫“差不多”吗。

中间有个坑我踩了两天。我在CDN的WAF上加了爬虫频控,结果元宝的抓取走的是腾讯云内网段,被规则误判成恶意爬虫,一部分请求直接403。日志里全是拦截记录,页面本身一点毛病没有。所以我不建议一上来就把WAF调成严格模式,先放行、观察、再收紧,医疗站本来就怕被误伤。

通义还吃TTFB后来才知道。示例里TTFB超过1.2s的页面,二次抓取间隔会被拉长到原来的3倍,从平均2天一次变成6天。这直接把我推到了SSR和CSR的十字路口——React SPA那套首屏在移动网络下TTFB压不进1.2s,只有上Next.js的服务端渲染。我在核子GEO上输入域名跑了一遍,报告里sitemap覆盖率不到60%,新上的医生页压根没进sitemap,等于结构化数据做得再全,爬虫也不知道有这页。这活儿得两头一起改。

避坑清单

1. 以为改完路由,sitemap会自己更新

我在 Next.js 里把几个科室页从 CSR 切到 SSR,路由结构动了两层,静态 sitemap 还是老的。示例站点连续三周 sitemap 覆盖率停在 58%。新页面在通义那边压根没被抓到。

怎么避:每次发版前拿线上实际路由和 sitemap 对一遍。我习惯在核子GEO上输入域名跑一次 GEO 检测,sitemap 覆盖率和抓取缺口会直接摊在报告里,比自己写脚本比对省事。

2. 把通义和元宝当同一个引擎喂内容

同一个医生科普页,通义引用了,元宝那边搜品牌词都不带提的。元宝吃微信生态,认证公众号和视频号里的内容权重明显更高。通义那边的数据源里带神马,官网得在阿里站长平台提交验证才有反应。

怎么避:两个引擎分开测,别拿一边的结果推另一边。通过核子GEO的网站对比功能,能把两个引擎的引用情况放一张表里看,省得我自己做表格。

3. 医生署名塞在页面最底部小字

医疗站 E-E-A-T 这块,署名位置比署名本身还关键。放页脚等于没放。

怎么避:医生姓名、执业证编号、科室、内容审核日期,全部提到正文首段上方当时就懵了。结构化数据里作者字段单独标,别混在机构信息里。

4. CSR 页面给爬虫的是空壳

React SPA 那批老页面,AI 抓过去正文是空的,只有导航和页脚。抓了等于白抓。

怎么避:至少首屏正文和 FAQ 段落走 SSR,交互重的部分留在客户端。不用一步到位全量 SSR。

5. sitemap 里塞了未上线和已下线的页面

404 率一上去,抓取预算全浪费在死链上。

怎么避:只提交 200 状态的 URL。当时就懵了。下线页面立刻从 sitemap 摘掉,别留着等它自然消失。

6. 一次全量上线,没做 A/B

医疗站百度这边卡得死。我图快,一次推了全站改动,收录掉了将近三周才缓慢回来。现在想想挺蠢的。

怎么避:先拿 10% 的 URL 做对照,跑满两周看收录曲线再放量。月预算 5 到 10 万的盘子,经不起这种反复。

7. 只看收录数,不看引用质量

收录涨了,但 AI 回答里引的是竞品。数字好看,没意义。

怎么避:每周固定查一遍品牌词和长尾问句在通义、元宝里的实际回答,记录是否出现官网链接。