#背景
上一篇讲 GEO 的原理(让内容被 AI 正确引用)。原理落到代码上有三个具体问题:
- AI 抓取时拿到的是一堆 HTML 标签,正文与导航混在一起,信噪比低;
- 主流 AI 爬虫的 UA 与普通爬虫不同,robots 一刀切会误伤或误放;
- 你不知道它们到底来没来、拿了什么 —— 没有反馈就没法优化。
#做法
#1. 两个文本出口:索引与全文
/llms.txt 给"目录",/llms-full.txt 给"全文"——这是社区约定,好处是纯文本、无标签、AI 直接可读:
# Vabora 开发极客
> 全栈开发:官网、小程序与 App、企业系统、AI 应用与自动化集成。
## 核心页面
- [对外服务](https://vabora.dev/services): 六项服务的范围与报价
- [作品案例](https://vabora.dev/cases): 12 个可量化结果的真实项目
## 最新文章
- [SQLite 并发写入实测](https://vabora.dev/posts/sqlite-wal-concurrency): 100 并发零丢失两个文件都从数据库实时生成(有一分钟缓存),不手工维护——手工维护的清单必然过期。
#2. 每篇文章都有 Markdown 出口
/posts/{slug}/md 返回原始 Markdown(text/markdown; charset=utf-8)。这一步比 llms.txt 更关键:AI 想引用具体做法时,拿到的是干净源码而不是渲染后的 HTML。
curl -s https://vabora.dev/posts/sqlite-wal-concurrency/md | head -5顺带一个好处:写文档、喂给模型做上下文时,你自己也用得上这个出口。
#3. 爬虫放行要按 UA 精确匹配
# robots.txt 片段
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Bytespider
Allow: /按具体 UA 段写,而不是 User-agent: * 全放开:前者可以单独收紧某一家(比如某爬虫频率失控时只封它),也不会把普通搜索引擎的抓取策略搞乱。
#4. 抓取要能看见
后台「GEO → 抓取观测」记录每个 AI 爬虫的访问:UA 归一化后的名称、路径、时间、次数。验证方式很直接:
grep -c "GPTBot" storage/logs/*.log看不到就别急着优化内容——先检查 robots、检查服务器是不是在 CDN 层把非浏览器 UA 拦了。
#结果
/llms.txt与/llms-full.txt随内容自动更新;- 每篇文章同时存在 HTML 与 Markdown 两种出口,canonical 指向 HTML 版本(避免重复内容判定);
- 爬虫放行与观测同源:放行了谁,就能看到谁来了。
#取舍
- 不做 UA 伪装探测:有站点通过 JS 判断"是不是 AI"再返回不同内容,我们不这么做——一样的内容对人和机器,才符合"可被抓取"的初衷,也没有 cloaking 风险。
- llms.txt 不是标准:它只是目前的事实约定,各家的支持程度不一。所以结构化数据 + 语义化 HTML + 纯文本出口三件都做,任何一条路都能走通。
- 不加访问门槛:把全文锁在登录后确实能提高"被引用的稀缺性",但对一个靠作品获客的站点,被引用本身就是价值。
评论
还没有评论,来说点什么吧。