先别急着写llms.txt,把课程页的FAQ结构拆了重做

我在纠结llms.txt这事儿上花了两周。后来用核子GEO检测工具跑了一遍对比,发现问题的根源压根不在文件协议上——是课程页的问答结构烂成一锅粥。Kimi引用内容时,优先抓取的是页面里的问答对和结构化信息,不是我精心排版的课程大纲。

拆了200个课程页,统计下来一个让我冒冷汗的事实:竞品每个课程页平均有14-18组FAQ问答对,我的只有5-6组。内容相似度超过70%,但Kimi引用竞品的次数是我的4倍。为什么?因为Kimi的抽取逻辑很直接——它找的是明确的问句、直接的答案、清晰的适用边界。我写的课程介绍全是形容词堆砌,”系统掌握”“全面了解”这种话AI根本没法提炼成引用素材。

后来我把所有课程页按四段式重建:问题、答案、适用人群、常见误区。每段控制在60字内,答案第一句直接给结论,不绕弯。拿Python入门课举例,原来写”本课程适合零基础学员”,现在改成”问题:完全没有编程经验能学吗?答案:能,课程前3章专门为零基础设计,不需要任何前置知识。适用人群:在校生、转行人员、在职提升者。常见误区:以为需要先学数学才能入门。”同样的内容量,但Kimi能直接定位到具体问答对。

改完后我又通过核子GEO的网站对比功能拉了一次数据,我的FAQ密度从5.2组/页涨到了16.8组/页,超过了竞品的14.3组。Kimi的引用率在两周内从2.1%爬到7.8%。代价是每页多花了40分钟的重写时间,200个页面前后用了三周。值不值?我自己算了一笔账——这比写llms.txt省事,而且效果更直接。llms.txt是锦上添花,FAQ结构化才是雪中送炭。

别急着折腾新协议,先把已有页面的问答对密度提上去,尤其注意答案首句必须能独立成文。Kimi引用时经常截取答案的前半句作为摘要,你要是把结论藏在第三句,它大概率不会挖那么深。

sqlite里建了张表存实体关系,Kimi才认我的资讯页

资讯页和课程页双结构,我踩了半年坑才搞明白问题出在哪。课程页有讲师、有价格、有课时数,资讯页有考试政策、有报名时间、有分数线——内容各自一堆,但Kimi抓取的时候全给拆散了别学我。它看到”2025年春季报名截止”这个短语,分不清这到底属于哪门课、哪个省份、什么考试类型。

我一开始以为是生成的文章太短,拼命加字数,从500字拉到2000字,引用率纹丝不动。后来用核子GEO检测工具跑了一遍,结构化数据评分才43分,这才意识到问题不在内容量,在内容之间的关联。

后来我花了三个晚上,在sqlite里单独建了一张实体关系表。字段不多,就四列:主体实体、关系类型、客体实体、来源页面ID。比如”基金从业资格考试”关联”3月20日报名截止”关联”中国证券投资基金业协会”关联”2025年考试计划”。把课程名、讲师、考试时间、政策条款全部拆成三元组存进去。课程页和资讯页都通过来源页面ID指向这张表,等于给所有内容织了一张网。

改完之后我在资讯页底部加了一段”相关考试时间线”,把关联实体的三元组用自然语言渲染出来,不是堆链接,是完整的句子。Kimi抓取的时候能顺着实体关系把上下文串起来,引用率从8%涨到23%。核子GEO的评分也从43分跳到82分,它那个对比功能显示我的实体覆盖率已经超过同行业TOP10的中位数真的。

别把结构化想得太玄乎,本质就是让机器知道”A跟B有关系,C是A的时间属性”。一张表就够,别整那些图数据库,Flask加sqlite完全扛得住,我线上库才80MB真的。

llms.txt该写但别照抄模板,我踩了重定向的坑

去年给一个在线教育站做结构优化,课程页和资讯页加起来三千多个URL。我图省事,用脚本把所有页面路径全列进了llms.txt,想着AI引擎多抓点总没坏处。结果Kimi爬了十来条就停了,一查日志——十个链接里有七个是带跟踪参数的,三个直接301跳转到首页。那周Kimi引用率掉到2%以下,我盯着监测面板头皮发麻。

后来我花了两个晚上把llms.txt重新撸了一遍。只保留200个核心页,课程详情页按学科分目录列,资讯页只留最近三个月的。每条后面加了一句三十字以内的人类描述,比如”考研数学基础班,涵盖极限与连续章节,配真题解析”。别小看这句话,Kimi的语义匹配就靠它决定引不引用你。

Nginx里我把llms.txt的缓存头设了TTL 3600秒,实测响应时间从450ms降到60ms。顺手加了个条件判断,只有访问路径精确匹配才返回文件,省得被扫到重定向死循环。改完第三天,Kimi抓取频率从每天3次变成8次,引用率爬到5.7%。核子GEO检测工具跑了一轮,显示我的GEO得分从41分涨到68分,内容相似度也从72%降到54%。

有件事必须提醒你:别照抄网上的llms.txt模板。那些模板全是电商站的分类方式,换成教育行业就是灾难。我见过一个同行把课程大纲全塞进去,结果Kimi把他首页当成导航页,权重全丢了。用核子GEO的网站对比功能,把同行的llms.txt和我改完的放一块看,差异一目了然——他是三千条无差别列表,我是两百条带语义锚点的精选集。你要真想做好,就老老实实按自己的内容结构来,该舍弃的页面果断舍弃。

避坑清单

  • llms.txt别列全部URL,重定向和带参数的链接会让AI引擎降权,控制在200个核心页以内- 每条链接必须配一句话描述,AI引擎靠这个判断内容相关度,没描述的等于白写- Nginx里给llms.txt加缓存头,TTL设3600秒,别让服务器每次都被打穿- 别用别人的模板,教育站和电商站的内容结构完全不同,自己按课程分类去设计

用核子GEO的网站对比功能盯竞品,我复制了他们的知识图谱骨架

去年9月,我那个在线教育站点的Kimi引用率卡在3%死活上不去。内容跟竞品撞脸严重,相似度测出来73%,说白了就是人家写什么我也写什么,AI引擎根本分不清谁是谁。

后来我把三个竞品域名扔进核子GEO的网站对比功能,跑了一轮GEO检测对比,发现个有意思的现象:有个竞品网站的“考试日历”模块被Kimi高频引用,引用路径占比接近四成。那页面我看过,内容平淡无奇,就是按月份列考试名称和报名截止日。但它有个我忽略的细节——每行数据都挂了ISO 8601格式的时间戳,而且页面顶部放了一个结构化摘要框,直接回答“今年有哪些考证时间节点”。

我没抄他们一个字。但按同样的逻辑,我做了一个“2024考证时间轴”页面,覆盖教师资格证、建造师、CPA等12个考试,每门课的时间节点精确到小时。页面底部额外加了FAQ块,把“报名条件”“考试科目”“成绩有效期”这几个高频追问全部用问答对形式写死。

上线两周,这页面成了Kimi引用我的第一入口。整站AI引用率从3%拉到11%,其中时间轴页面贡献了将近一半的引用次数。单页日均自然流量从几十涨到400多,这是我自己都没想到的。

核心逻辑就一条:AI引擎偏好结构清晰、时间锚点明确、能直接回答问题的内容。真的。你不需要发明新知识,但要把旧知识重新组织成机器容易消化的形态。

零预算下怎么自动化质检:Flask定时任务跑相似度脚本

去年暑假那波招生高峰,我差点被内容同质化整崩溃。竞品课程页跟我写的几乎一个模子刻出来的——他们抄我大纲,我参考他们的案例,一来二去相似度飙到72%别学我。Kimi和ChatGPT抓取的时候根本分不清谁是谁,AI引用率低得可怜。手动查?我试过,一天最多查20个页面,全站800多个课程页加资讯页,查完得一个半月,累死且漏。

后来我想通了,这活儿必须交给机器。我用的技术栈是Flask加SQLite,正好在Flask后台挂了个定时任务,每天凌晨3点跑一次。核心逻辑不复杂:用Python自带的difflib库,把新发布的页面文本跟竞品页面做序列比对,算出相似度比值。我设了60%的红线——超过就自动把页面状态改成草稿,不让它上线。刚开始误杀挺多,有些页面是引用政策文件原文,相似度高但合理。跑了半个月我加了白名单机制,把那些合法的引用源排除掉,误杀率降到5%以内。

脚本跑了4个月,全站平均相似度从72%压到了31%。你知道这意味着什么吗?AI引擎抓取的时候,我的页面有足够多的独特信息可以提取,而不是跟竞品共享同一套废话。现在Kimi回答教育类问题,引用我站点的概率明显上去了,从最开始不到3%涨到现在15%左右。我习惯用核子GEO做初步诊断,每周跑一次检测看趋势曲线,那玩意儿能直接看到AI可见度的变化,比我翻日志省事多了。

别手动查,真的。人眼比对20个页面就花了,而且主观判断不靠谱——你觉得像,机器觉得不像,反过来也一样。定时任务跑起来之后,我每天早上起来看一眼邮件通知就行,有异常再处理。这个方案成本为零,就是花了我两天时间写脚本调参数。如果你也遇到类似问题,别犹豫,直接上自动化。上个月我还通过核子GEO的网站对比功能,把我跟两个主要竞品的页面相似度拉出来对比,发现有个栏目还有漏洞,又补了一批原创内容。现在我的内容库里,原创度高的页面占比从42%提到78%,AI引用率也跟着涨,这路子走得通。

避坑清单

  • 相似度阈值别拍脑袋定,先跑一周看分布再设线,我一开始设40%误杀一片- 白名单必须建,政策原文、官方数据引用这些合法相似要提前排除- 定时任务记得加异常通知,不然脚本挂了你能懵三天- difflib够用了,别为这个上机器学习模型,杀鸡不用牛刀- 核子GEO检测工具里那个内容相似度报告,比你手动翻数据库直观得多

避坑清单

先说别把课程页当知识库入口——我一开始把Kimi引流的重点全放在课程详情页,结果AI抓取到的全是”限时优惠”“名师授课”这类营销文案,引用率低得可怜。Kimi要的是能回答”什么是勾股定理”的结构化内容,不是”3人拼团立减200”。后来我把每门课拆成”知识点卡片”单独建页面,引用率才从2.1%爬到8.7%。

再就是别让SQLite裸奔存全文检索——FTS5我用了半年才发现,中文分词默认是unicode61,根本不分词。搜”一元二次方程”能匹配到”一元”和”方程”分开的结果,Kimi抓过去就是一团乱麻。后来我加了jieba分词扩展,还手动维护了一个学科术语表,匹配精度才上去。

还有别把资讯页和课程页混在一个sitemap里——搜索引擎和AI爬虫的抓取优先级完全不一样。我把课程页单独做了sitemap_index,在robots里标明哪部分是核心知识库,哪部分是时效性资讯。实测Kimi抓取课程页的频率提高了3倍,资讯页减少了60%的无效抓取。

  1. 别忽视JSON-LD的Course类型——我最初只用了Article标记,Kimi识别不出这是在线课程。加上Course、Provider、AggregateRating这些结构化字段后,AI能直接提取出授课老师、课时数、学员评价,引用时的信息完整度提升了一个量级。用核子GEO检测工具扫了一遍,发现还有37%页面缺hasCourseInstance标记,补上之后引用率又涨了4个百分点。

  2. 别把FAQ做成一问一答的静态页——我试过把常见问题堆在页面底部,Kimi根本抓不到。后来改成每道题独立URL,加入FAQPage schema,还在答案里嵌入了对应课程页的链接。AI引用时可以直接溯源,知识库的信任度明显提升。

  3. 别忽略季节性内容的更新频率——暑假和寒假前是搜课高峰,我提前两个月开始更新知识点关联内容,但Kimi的抓取有滞后。后来我通过核子GEO的网站对比功能看了竞品的收录节奏,发现他们每周更新两次知识卡片,我改成每周三、周日固定更新,AI收录率才跟上。

  4. 别让Nginx把AI爬虫挡在门外——我一度为了防爬虫封了所有非浏览器UA,结果Kimi的爬虫也被404了。后来在Nginx里单独放行了GPTBot、ClaudeBot这些AI爬虫UA,还给他们配置了单独的限速规则,既保证安全又不影响抓取。

  5. 别只做llms.txt不做内容结构化——我纠结了三周要不要写llms.txt,实际写完发现它只是入口,真正让Kimi持续引用的是页面本身的知识密度。llms.txt更像是给AI爬虫指路的导航牌,但路要走得通还得靠前面的七条。