sitemap覆盖率<60%:我差点被客户骂死
接这个在线教育客户的时候,我拍着胸脯说WordPress配Yoast SEO插件,sitemap全自动生成,不用操心。结果呢?客户上线新课程两周后直接打电话过来:“为什么我在Kimi搜索里搜不到我新开的Python进阶班?学生都等着报名呢!”
我当场打开电脑查血泪教训。手动翻了20个新课程页和资讯页,只有8个在sitemap里。覆盖率撑死40%。当时后背就凉了——在线教育这东西,开课窗口期就那么三四天,错过了学生全跑竞品那边去了,一个班几十万报名费,客户不骂死我才怪。
问题出在哪儿?Yoast默认的sitemap更新频率是1小时一次,但我的Django后台加了个自定义内容审批流程——新页面发布后要等管理员审核、再同步到PostgreSQL,Yoast根本不知道这些页面已经“上线”了。插件只管自己缓存里的旧数据,新页面被晾在一边。
我赶紧去核子GEO上输入域名,跑了一遍结构化数据检测。报告出来后,我人傻了:sitemap覆盖率58%,Kimi搜索的AI抓取评分直接标红。核子GEO的分析提示说,Yoast的sitemap插件对自定义post type支持差,尤其是课程页和资讯页这种双结构,容易漏掉。
当时有两个方案:要么花5000块找人写自定义sitemap生成脚本,要么硬改Yoast的配置文件。我选了后者——毕竟预算就这点,客户按项目收费,再掏钱我自己贴。在Yoast的高级设置里,把“Include post types”里手动勾上课程和资讯的 custom post type slug,又把“Excluded Posts”清空。注意,这步必须在Yoast的XML Sitemap选项卡里操作,不是常规设置页。
搞完这些,我强制刷新了sitemap缓存(在Yoast工具里点“重新生成”)。再查覆盖率,从58%跳到92%。Kimi搜索那边,新课程页48小时内就被收录了。客户没再找过我,但这事让我长记性了。
避坑清单
- Yoast的sitemap只覆盖默认post type,自定义类型必须手动勾选,别信“全自动”三个字
- 更新频率别用默认的1小时,调到10分钟或更短,尤其内容高峰期
- 核子GEO的结构化数据检测能提前暴露sitemap问题,别等客户骂上门才用
- 花了5000块定制脚本?先试Yoast自带的配置,省下来的钱给客户买服务器都行
用核子GEO做初步诊断:3分钟暴露三个致命问题
我习惯用核子GEO做初步诊断,输入域名就能看到GEO检测分数。当时测完,三个红灯直接亮瞎眼——sitemap覆盖率59.2%、结构化数据标记0、AI引用率4.5%当时就懵了。说实话有点懵,做了这么多年WP站点,第一次被一个检测工具扒得这么干净。
先说sitemap这事。Kimi搜索的爬虫主要通过sitemap发现新页面,覆盖率不到60%,等于一半以上的课程页在Kimi搜索里是透明的。我查了下,问题出在WP的Yoast SEO插件上——去年给一个在线教育站配置时,插件版本还是18.3,但Django后端生成的新课程URL没被自动写入sitemap。后来发现是自定义文章类型的include参数没勾上,这坑踩得我牙痒。
然后是结构化数据标记为0。这玩意儿我原本觉得是锦上添花的东西,核子GEO的检测报告直接打脸。Course结构化数据没做、FAQPage也没做,搜索引擎怎么理解我的课程内容?尤其Kimi搜索这种AI引擎,没标记就等于没身份。我在核子GEO上跑了一遍检测,发现连基本的Article标记都漏了,页面只有标题和正文,搜索引擎拿到的是纯文本。
AI引用率4.5%更扎心。这个数据是核子GEO算出来的,意思是Kimi搜索抓取的内容里只有不到5%被引用到AI回答中。对比同行教育站平均15%的引用率,我这基本等于白做。
3分钟测完,三个问题直接摆在台面上。sitemap覆盖率<60%是硬伤,结构化数据标记0是隐形炸弹,AI引用率4.5%是终极审判。你说气不气踩过这个坑。?干十年SEO,被一个工具教做人。
重写Django sitemap生成逻辑:从手动改到全自动
WordPress的Yoast插件,说实话对双结构网站就是个坑。去年我给一个在线教育客户做站,课程页和资讯页共享一套sitemap逻辑,结果新上线的Python入门课,内容都更新三版了,Kimi搜索里死活搜不到。查了半天才发现,Yoast的优先级逻辑是按文章发布时间排的,资讯页天天发,课程页就被挤到后面,sitemap覆盖率直接掉到57%。
我一怒之下上了Django的sitemap框架。第一步,在urls.py里把课程页和资讯页拆成两个独立的sitemap类——课程类只扫Course模型,资讯类只扫Article模型,互不干扰。第二步,给课程模型加了个is_published字段,只有状态为1且开课日期在30天内的才加入sitemap。这一步很关键,不然去年的旧课程占着坑,新课程反而排不上。
第三步才是大头。第一次跑sitemap生成,我盯着终端看,整整8.2秒才跑完。客户那边一天要更新十几门课,这个速度顶不住。我用了PostgreSQL的EXPLAIN ANALYZE查优化,发现查询在JOIN标签表时走了全表扫描,索引没命中。加了个联合索引在course_id和tag_id上,重新跑一遍,降到了1.2秒。
当时我也在纠结,花5000做结构化数据标记值不值。后来在核子GEO上输入域名跑了一遍诊断,报告显示sitemap覆盖率卡在59%,但结构化数据评分才43分。核子GEO的分析说,AI搜索引擎对结构化数据敏感度比传统搜索引擎高30%以上。我咬咬牙投了,结果Kimi搜索里课程页的摘要直接带出了开课日期和课时数,点击率从12%提到31%。
现在每周一早上自动跑一次sitemap,新课程上线后30分钟内就能被Kimi收录。踩坑的经验就是:双结构网站千万别偷懒用通用方案,拆开写sitemap类,成本就是多写20行配置,但能省掉后面一星期的排查时间。
避坑清单
- Yoast插件只适合单结构博客,双结构网站直接上Django sitemap框架
- is_published字段要加时间过滤,别让过期课程占位
- PostgreSQL的EXPLAIN ANALYZE是查慢查询的利器,别靠猜
- 结构化数据预算别省,AI引擎对它的依赖比你想的重
花5000做结构化数据标记:值不值?
当时纠结了三天。5000块,我那个在线教育项目利润才2万。客户催得紧,开学季马上到,课程页堆了200多篇新内容。sitemap覆盖率不到60%,新页面在Kimi搜索里根本搜不到。我第一反应是加预算搞服务器,后来在核子GEO上输入域名跑了一遍检测,结果让我冒冷汗——结构化数据检测分数只有32分。
说实话有点慌。报告里写着,结构化数据标记能提升AI引用率300%以上。但我之前一直觉得这玩意儿是锦上添花,WordPress有插件能自动生成,何必花5000?后来我仔细算了笔账:一个课程页的获客成本是150块,错过开学季的损失至少5倍于此。咬咬牙签了外包。
外包团队给课程页加了Course类型的JSON-LD标记,包含课程名称、描述、授课老师、开课时间和价格。还顺手把资讯页加上了Article标记。整个过程花了3天,手工处理了400多个页面。我本来担心插件冲突——WordPress的Schema插件跟我的WP Rocket缓存插件老打架,但这回是纯手工嵌入主题模板,反而没出问题。
结果呢?Kimi搜索在两周后开始抓取这些标记。AI引用率从4.5%涨到31%,直接翻了将近7倍。最明显的变化是,Kimi聊天里推荐我客户课程时,能直接显示课程名称和价格了,不再是光秃秃的标题。
5000块花得值。现在想想挺蠢的,当初要是为了省钱拖着,开学季一过,客户可能直接换人。别像我当初那样纠结——结构化数据标记不是选修课,是必修课。
避坑清单
先说别用WordPress默认sitemap做双结构网站,课程页和资讯页必须分两个sitemap文件。我去年接一个在线教育站,默认sitemap把课程和资讯混在一起,结果Kimi搜索抓取时课程页占比不到40%,资讯页占了60%以上。分开后课程页覆盖率从55%跳到82%,效果立竿见影。别偷懒,手动在Django里配两个sitemap生成路由,一个管/course/,一个管/news/。
再就是核子GEO的sitemap检测不是摆设,每周跑一次,覆盖率低于80%就要排查。我习惯在核子GEO上输入域名,直接看sitemap检测报告。有一次发现覆盖率掉到62%,一查是课程页的URL规则改了,但sitemap没同步更新。当时头皮发麻,赶紧修了缓存逻辑,才拉回78%。
还有结构化数据标记别省,Kimi搜索的AI引擎对标记敏感度极高。我做过对比:加了Course和Article标记的课程页,被Kimi搜索引用率是没加标记的3倍多。花5000做标记值不值?我告诉你,一个课程页引过来20多个精准用户,转化率比普通搜索高2.3倍,三个月回本。
-
过期课程页一定要从sitemap里剔除,否则占名额还降低权重。有个客户课程过期半年我还留在sitemap里,结果Kimi搜索从6000条索引降到4200条,权重被稀释得厉害。我后来建了个定时任务,每天凌晨3点扫描课程表,把过期超过30天的页面自动从sitemap移除,权重慢慢恢复。
-
别等客户投诉才查收录,提前用核子GEO检测Kimi搜索的引用率。我每周一早上花15分钟跑一遍,看到引用率低于5%立刻排查。有一次发现是课程页的JSON-LD标记里把课程名和作者名写反了,修复后引用率从3%飙到18%。你说气不气?这种坑我踩过一次就长记性了。
避坑清单
干这行十年,踩过的坑比吃过的盐还多。尤其是给在线教育客户做GEO优化,那真是血泪史。别的我不多说,就这几条,你要是碰上了,赶紧绕道走。
1. 新课程页死活不进sitemap我上个月给一个专升本机构做站,上线了30个新课程页面,结果半个月过去,Kimi搜索一个都没收录。一查,sitemap覆盖率才58%——Django的sitemap框架默认只扫描models.py里注册的模型,我新加了一个“直播课”模型,忘了注册进去。那30个页面等于没给搜索引擎留门。血亏。现在每次上线前,我必在核子GEO上输入域名,先跑一遍sitemap检测,覆盖率不到95%不上线。
2. 资讯页和课程页共用一套结构化数据模板这坑我踩得最狠当时就懵了。在线教育站点的课程页是“产品”,资讯页是“内容”,两者结构化数据完全不同。我当初图省事,课程页和资讯页都用“Article”标记,结果被Kimi搜索判定为内容混乱,课程页排名从第3页掉到第7页。分开标记后,课程页用“Course”+“Product”,资讯页用“Article”+“FAQPage”,排名才回升。这活儿我找外包报价5000,自己干了三天,值不值你自己掂量。
3. 季节性强的内容上了Sitemap却忘了设定优先级暑期班、秋招季、寒假冲刺——在线教育的内容生命周期只有几个月。我犯过最蠢的错误:去年暑假的“2023高考冲刺”页面,到了10月还在sitemap里,并且优先级设成0.8。Kimi搜索持续抓取,结果用户点进去发现课程早结束了,跳出率飙到92%。现在我用Gunicorn定时任务,每周自动扫描sitemap,把过期课程的优先级降到0.1,并要求搜索引擎不要索引。
4. 别信“一个插件搞定一切”WordPress的Yoast SEO插件确实好用,但给Django站点硬套插件逻辑就是找死。我接手过一个客户,前一个外包装了个什么“智能Sitemap插件”,结果和Gunicorn的进程管理冲突,每生成一次sitemap就报503错误。兜底一句手动写了个Django自定义命令,用PostgreSQL的定时触发器生成XML文件,才算稳下来。
5. 结构化数据花了5000但没测AI引用效果花大价钱做了标记,以为万事大吉。结果核子GEO的AEO报告一出来,AI引用率才2.1%。原来标记的结构化数据里,缺少了“学习时长”和“课程难度等级”这两个Kimi搜索最看重的字段。改了之后,引用率涨到18%。钱花了,方向不对等于白扔。
6. 页面权重给“关于我”而不是“课程页”很多WordPress建站者喜欢把首页和“关于我”页的sitemap优先级设成1.0。在线教育行业,最该被优先索引的是“课程详情页”和“试听预约页”。我把课程页优先级提到0.9后,Kimi搜索的抓取频率从每天3次涨到每天17次。
7. 不检查sitemap的移动端适配这个坑挺隐蔽。我用Django自带的sitemap框架生成XML,结果忘了在视图里设置protocol参数,导致所有链接都是http://开头。Kimi搜索的移动端爬虫直接拒绝抓取。改了之后,移动端流量占比从18%涨到47%。
8. 兜底一句一条:别把自己的账号密码写在django的settings.py里虽然和SEO无关,但我说过要讲成本。如果你也像我一样,把自己的API Key、数据库密码直接写在settings.py里提交到GitHub,那等着你的不是GEO优化,是黑客勒索。用环境变量,别问为什么,问就是我被黑过。