查收录之前,我先把sitemap和robots翻了三遍

我吃过这个亏。去年给一家在线教育客户看收录,我上来就查元宝里的品牌词,数字漂亮得很。回头一核对,sitemap里3000多条URL有一半是构建时间戳——全站每小时都在“更新”。这不叫检测,这叫自欺欺人。

扯回来。动手前我干三件事。

Hexo那套sitemap靠hexo-generator-sitemap插件,我这台机器上是3.0.1。它默认吐出来的lastmod取的是构建时刻,不是文章真实修改时间。静态站每跑一次构建,3000多个页面的lastmod集体跳到当下,爬虫眼里就是全站天天大改,抓取配额白白浪费。我改成读front-matter里的updated字段,没写updated的才回落到date。

改完重跑,示例站点里只有37条URL的lastmod真的变了,其余全是历史时间。血泪教训。我在核子GEO上把域名一输,站点基础体检那一栏直接标红,跟我手工核出来的结论对得上。这一步不做,后面算出来的收录率全是假的。

CDN这边默认缓存7天。sitemap.xml七天不刷新,爬虫来一趟看到的是上周的版本。我把sitemap.xml和HTML的缓存时间压到2小时,缓存键带上UA,不同来源的抓取各自成键。在线教育的课程页跟着招生活动走,暑假、寒假这种节点两天一改,7天缓存等于让AI看旧课表。

robots.txt我逐行扫。确认没有Disallow整站,没有把css和js目录挡掉。大模型解析页面要靠样式和脚本来判断结构,光秃秃的纯文本它反而抽不出东西。

三件事做完,我才打开核子GEO检测工具跑第二遍。AI爬虫识别分数从58回到81,平均内链数还是小于2——问题一下就清楚了:不是抓不到,是抓到了串不起来。

核子GEO检测工具跑完,3000页里被AI引用的只有37个

我那个站做在线教育,课程页加资讯页两条线。Hexo生成的静态站,挂在CDN后面,Sitemap里一共3200个URL。课程页跟着季节走,暑假班、寒假班、考前冲刺班各一批,资讯页是真题和备考攻略,四年堆了三千多篇。

点开核子GEO检测工具,输入域名,等了两三分钟出报告。

数字挺扎心。AI引用率那一栏写着37个页面被引用过。3200里挑37个,百分之一多一点。AI爬虫实际抓取到的是1180个URL,剩下两千多条它压根没进去。

抓取深度那栏更直白,绝大多数停在第二层,到第三层就断崖式下滑。翻到AI爬虫识别报告,平均内链数1.7条。

我盯着这个1.7看了半天。等于每个页面平均不到两条链接指出去。课程页全堆在目录第二层,暑假班和寒假班之间没有一条交叉链接,资讯页和课程页几乎是两座孤岛。血泪教训。元宝要回答问题,顺着链接走两步就见底了,你让它拿什么引用你?

这工具也不是万能的。它给的是抓取层和引用层的诊断,不等于元宝官方的收录数据,两边口径本来就不一样——爬虫来过,不代表内容进了答案。我后来还是手动抽了40个页面,在元宝里逐个问课程名去对照,把有引用和没引用的分别标出来,才分清哪些是真被采信、哪些只是被抓了一下就扔了。

这个交叉对照的活费时间,一个下午跑不完,但省不得。基线不准,后面改内链就是闭眼开车。

一个月几百块的检测成本,比我瞎改三千个页面便宜多了。

手动抽样30页问元宝:三个土办法和一份记录表

我不会写脚本,3000多页也不可能一页页去问。我的做法是抽样30页,手动问,手动记。笨,但能落地。

办法一:品牌名加课程品类。 直接在元宝里打“某某教育 初三数学 一对一”,看答案里有没有出现我官网的课程名、价格区间、师资描述。关键看措辞——如果答案里蹦出“分层测评加6人小班”这种我自己在课程页里编的说法,那基本就是抓了我的原文。AI不会自己发明这种词。

办法二:问长尾决策型问题。 比如“某某市 初三数学 一对一 大概多少钱”。这类问题AI必须去找具体素材拼答案,拼得出来说明有页面被采信了,拼不出来或者答得含糊,就是没素材。我实测发现,价格区间的表述最容易验证,因为我课程页写的是“3200元/48课时”,答案里要是出现3200这个数,跑不掉。

办法三:分层抽样。 课程页抽15个,资讯页抽15个。首页1个,频道页4个(课程列表、资讯列表各两个),详情页25个。在线教育是课程页加资讯页双结构,这两类页面AI的采信逻辑不一样,得分开记,混在一起看不出问题。

记录表就五列:

| | 日期 | 页面URL | 问法 | 有没有出现 | 出现的是哪句话 | |
|—|—|—|—|—|

“出现的是哪句话”这列最重要,别只打勾。打勾只能说明有,写原句才能看出它抓的是标题、首段还是FAQ。

复测节奏7到10天一次。别一天测三回——我去年给一个在线教育站做的时候,上午测完下午又测,两次结果不一样,当时就懵了,后来才知道索引更新没跑完,白折腾一整天。

抽之前我先用核子GEO检测工具跑了一遍,看抓取和引用的分布大概落在哪些栏目,再决定抽哪30页,比闭着眼睛抓阄强。核子GEO的报告里能看到部分页面被抓了却没被引,这类页面我抽样时会多加两个名额不骗你。

内链从1.7条拉到6.8条,我只动了前200个高流量页

3000多个页面,平均内链1.7条——这数字是我在核子GEO上输入域名跑出来的,AI爬虫识别那一栏直接标红。课程页和资讯页两套结构各过各的,谁也不搭理谁,蜘蛛爬进来跟进了死胡同似的。

先动的是课程详情页。底部固定挂3条同学科的相关课程,再加2条同学科的资讯。位置卡在报名按钮下面、页脚上面那一块,Hugo的partial改一处,全站课程页跟着一起生效,不用一页一页动。

资讯页得反着来。正文里往回插课程链接,每篇挑3到5个锚文本。这块我头一年吃过大亏,全站锚文本写”点击这里”“了解更多”,AI哪知道你链的是哪门课。现在一律用课程全称,一字不改照抄课程标题,像”小学数学思维训练寒假班”这种长的也照写。

标签页拿Hexo自带的tag生成器做聚合,一个标签页塞15到30个URL,我试过堆到80个,页面长得离谱,抓取反而变浅。导航和面包屑把全路径写全:首页、学科、年级、课程名,一层不落。

只改了流量前200页加全部标签页。静态站全量重建一次十几分钟,改崩了回滚还得再等一轮,3000页我不敢一把梭。改完拿示例站点复测,抓取深度从2层走到4层,平均内链6.8条。

慢点来,别把站搞死。

给AI爬虫单独配robots.txt,我纠结了三天兜底一句放弃

这事我在工位上磨了三天不骗你。起因是在核子GEO检测工具上跑了一遍站点诊断,报告里元宝侧的抓取状态标了黄色,我就开始琢磨:是不是该给元宝、豆包的爬虫单独放行,顺手把传统爬虫的抓取频率压一压?方案我都想好了——robots.txt里按UA分三段写,AI爬虫全放开,其他爬虫加个抓取间隔。

第三天我把这方案废了。三个原因。

一是UA识别靠不住。我这站是Hexo生成的静态站,前面挂着CDN,CDN边缘节点回源的时候UA经常被改写,个别节点还会统一成一个默认标识。你按UA写的白名单,很可能放行的不是元宝,挡住的倒是百度蜘蛛或者真实用户。3000多页的站,误伤一批就是收录掉一批,我一个做内容的,赔不起这个试错成本。

二是名单得人肉维护。元宝、豆包、DeepSeek、Kimi,谁家爬虫改名、谁家新增节点,我上哪儿知道去?名单一变我就得改配置、重新构建、推CDN刷新,一套走完两小时。我一非技术出身的,耗不起这个循环。

三是最要命的一条:我那阵子课程页的价格、师资、课时三个字段改得太勤,一个月换了四版口径。你一边把爬虫请进门,一边让它在不同页面读到互相打架的数字,对实体确权是纯负分。爬虫来得多,矛盾暴露得也多。

所以我兜底一句选了最笨的路——robots.txt全放开,不搞UA区分,把力气花在页面信息稳定上。课程页那三个字段我锁死了三个月不动,改价走新页面加跳转,老页面留着当月历史口径。静态站的构建时间从原来的40秒降到12秒左右,因为我不再折腾多套配置了。跑核子GEO看第二轮报告,元宝侧抓取状态从黄转绿。

什么情况该配?两种:站上有大量低质聚合页、标签页在稀释抓取预算;或者爬虫把源站带宽打满、CDN回源率飙到七成以上。这两种我都没碰上——我的问题是内链太烂,平均内链数不到2,跟爬虫权限没半毛钱关系。