打开网易新闻 查看精彩图片

去年有个数据挺扎眼:Perplexity月活破1000万,ChatGPT周活3亿。但99%的网站还在按2010年的逻辑做SEO——优化给Google爬虫看,而不是给AI读。

Alexandre Caramaschi是个巴西的GEO(生成式引擎优化)顾问,管着两个站:个人博客alexandrecaramaschi.com和企业站brasilgeo.ai。他发现个怪事:AI搜索引擎开始抓取他的内容,但引用质量参差不齐,有时候干脆漏掉关键信息。问题出在哪?机器读不懂他的"自我介绍"。

他做了个实验:用3周时间,在个人站塞了30种Schema.org标记,给企业站做了llms.txt文件。结果?被Claude、Gemini、Perplexity引用的频率翻了4倍。这不是玄学,是结构化的胜利。

Schema JSON-LD:给机器看的"身份证"

Schema JSON-LD:给机器看的"身份证"

人类见面递名片,机器见面读JSON-LD。这是藏在网页里的结构化数据块,用户看不见,但爬虫和RAG(检索增强生成)系统视若珍宝。

Caramaschi的 trick 在@graph。别人把多个JSON-LD脚本拆得七零八落,他全塞进一个图结构里。传统搜索引擎好解析,AI系统拼上下文也更顺。

他的个人站用了30种Schema,分三大类:

身份类:Organization(组织)、Person(人物)、Brand(品牌)——告诉AI"我是谁"

内容类:Article(文章)、BlogPosting(博客帖子)、TechArticle(技术文章)——告诉AI"这篇是什么"

关系类:BreadcrumbList(面包屑)、WebSite(网站结构)、SiteNavigationElement(导航元素)——告诉AI"从哪来、到哪去"

每个@type都不是摆设。Organization标记里塞了founder字段,AI回答"这家公司谁创办的"时直接提取,不用瞎猜。TechArticle标记区分了codeRepository和programmingLanguage,GitHub链接和Python标签各归其位。

打开网易新闻 查看精彩图片

最细的是Product标记。他的咨询服务被拆成name、description、offers、aggregateRating,AI生成推荐列表时,价格区间和用户评分自动对齐。

llms.txt:主动递给AI的"简历"

llms.txt:主动递给AI的"简历"

如果说Schema是被动等机器来查的身份证,llms.txt就是你主动塞过去的简历。这文件躺在域名根目录,纯文本,Markdown格式,专门给大语言模型快速消化。

robots.txt说"你能爬哪",llms.txt说"你该读啥"。Caramaschi在企业站维护两个版本:

/llms.txt —— 完整版,28篇文章的全量结构,带摘要和关键段落定位

/llms-full.txt —— 扩展版,技术细节、API文档、案例数据全摊开

格式极简。标题用#,引用用>,列表用-,链接用标准Markdown。AI不用解析HTML的DOM树,不用猜哪个div是正文,直接拿结构化文本喂给上下文窗口。

他写了个Cloudflare Worker动态生成这文件。新文章发布,llms.txt自动更新。旧内容过期,Worker标记deprecated,AI知道哪些信息可能失效。

结果验证:从"被爬"到"被引用"

结果验证:从"被爬"到"被引用"

Caramaschi没玩虚的,上了三套验证:

Perplexity Sources —— 搜品牌名,看AI回答的脚注里有没有自己的链接。Schema全量部署后,引用率从零星几条变成稳定出现。

打开网易新闻 查看精彩图片

Claude Citations —— 直接问Claude关于巴西GEO市场的问题,观察它是否调用brasilgeo.ai的数据。llms.txt上线后,Claude开始准确引用他的服务范围和定价策略。

Gemini Grounding —— 测试Gemini的"双重验证"功能,看AI是否把他的标记内容和网页原文交叉比对。Schema里的datePublished和dateModified帮了大忙,AI能判断信息新鲜度。

最意外的收获在长尾词。以前"巴西生成式AI咨询"这种 query,他的站排不进前50。现在Perplexity直接把他列为信息源,流量路径完全变了——不是用户点搜索结果,是AI替用户做了筛选。

代码级别的几个取舍

代码级别的几个取舍

Caramaschi开源了部分实现,有几个细节值得抄:

Next.js 16的Metadata API原生支持JSON-LD,但他没用它生成动态Schema。理由是:Metadata API把JSON-LD当字符串塞,没法做@graph的嵌套关系。他手写了一个generateStructuredData函数,在服务端组装完整图结构,再塞进。

Cloudflare Worker生成llms.txt时,他加了层缓存。28篇文章的全量文本不小,每次请求都实时组装会炸掉边缘节点。Worker把结果缓存4小时,新文章通过Webhook触发即时刷新。

Schema的image字段他填得很克制。不是每张配图都塞,只选能代表内容核心视觉的那张。AI生成卡片式回答时,图片 relevance 比数量重要。

有个反直觉的点:他故意没给所有页面做Speakable标记。这标记告诉AI"这段适合语音朗读",但他的技术文章代码块太多,语音体验差,宁可AI跳过朗读、直接给文字摘要。

GEO和SEO的关系,他看得挺透。SEO是让用户找到你,GEO是让AI替你说话。两者不冲突,但优先级在变。他的个人站41篇文章,企业站28篇,量不大,但结构密度极高。AI不缺内容,缺的是可信、好解析、关系清晰的信源。

现在他接咨询,客户问的第一个问题通常是:我的站被ChatGPT引用过吗?