1. 为什么你的网站内容在AI搜索里“查无此人”
做SEO的朋友最近半年应该都有一个共同的体感:传统搜索引擎的流量还在,但来自AI搜索入口的点击越来越少。不是你的排名掉了,而是用户获取答案的方式变了。以前用户搜“GEO是什么”,会看到十条蓝色链接,挨个点进去对比;现在用户直接在AI搜索框里问,AI直接给一段整合好的答案,用户看完就走,你的网站连被点击的机会都没有。
这个现象背后是一个新的优化领域——GEO(Generative Engine Optimization,生成式引擎优化)。它和传统SEO最大的区别在于:SEO优化的是“排名”,GEO优化的是“被引用”。你的页面排在第一,不代表AI会引用你;反过来,一个排名第五的页面,如果结构清晰、语义明确、对机器友好,反而更容易被AI搜索摘录进答案里。
我拿自己维护的一个技术博客做过测试。同一篇关于“Python异步编程”的文章,在传统搜索里稳定排前三,但在几个主流AI搜索入口里提问相关问题,AI给出的答案里完全没有引用我的内容,反而引用了一个排名十几位、但用了大量结构化小标题和问答对的页面。这件事让我意识到,AI搜索的引用逻辑和传统排名逻辑是两套东西。
这篇内容就是把我这几个月折腾GEO的实战经验整理出来。核心解决三个问题:AI搜索到底怎么决定引用谁、你的网站为什么被跳过、以及怎么用代码层面的手段(robots.txt、llms.txt、结构化标记)把这个问题改掉。适合所有还在靠搜索流量吃饭的站长、内容运营和前端开发看,不需要你懂大模型训练,但需要你愿意动手改文件。
2. AI搜索的引用逻辑拆解:它到底在“看”什么
2.1 从“排名”到“引用”的范式转移
传统搜索引擎的工作流是:爬取→索引→排序→展示链接列表。用户看到的是链接,点击行为发生在用户和你的网站之间。AI搜索的工作流多了一层:爬取→索引→理解与摘录→生成答案。用户看到的是答案,点击行为可能根本不发生,或者发生在一个“来源”小标签上。
这个多出来的“理解与摘录”环节,就是GEO的主战场。AI不是简单地把你的页面标题和摘要拿出来,而是要把你的正文内容“读进去”,判断这段话能不能回答用户的问题,然后决定是否把它作为答案的一部分呈现,以及是否标注来源。
我实测下来,AI搜索在决定引用谁的时候,主要看四个维度:
- 内容可解析性:你的正文是不是干净的HTML文本,有没有被大量JS渲染、弹窗、广告代码包裹。AI爬虫对JS渲染的容忍度远低于传统搜索引擎。
- 语义完整度:你的段落是不是能独立成义。一个只有“如上所述,这个方法很好”的段落,AI摘出来没有任何意义,自然不会引用。
- 结构清晰度:有没有清晰的标题层级、问答对、列表和表格。结构越清晰,AI越容易定位到“哪一段回答了哪个问题”。
- 机器可读的授权信号:robots.txt是否允许AI爬虫抓取,有没有llms.txt告诉AI你的内容怎么用。这是最容易被忽略但最致命的一环。
2.2 为什么你的页面被AI“跳过”了
我把自己被跳过的页面和后来被引用的页面做了对比,发现几个高频原因。
第一个原因是robots.txt把AI爬虫挡在门外。很多站长在robots.txt里写了Disallow: /给所有爬虫,或者针对性地屏蔽了某些UA。传统搜索引擎可能还有商量余地,但AI爬虫一旦被挡,你的内容连进入索引的机会都没有,更别提被引用。我见过一个案例,某技术社区因为robots.txt里一行Disallow: /api/,结果整个文档站的内容都没被AI索引,因为文档站的URL结构恰好是/api/docs/开头的。
第二个原因是内容被JS渲染“藏”起来了。AI爬虫对JavaScript的执行能力有限,如果你的正文是通过前端框架异步加载的,爬虫拿到的可能是一个空壳HTML。传统搜索引擎有渲染队列,AI爬虫的渲染资源更紧张,很多直接跳过。
第三个原因是缺少llms.txt这样的“说明书”。llms.txt是一个新兴的约定文件,放在网站根目录,用来告诉AI模型你的网站结构、内容授权范围和推荐引用方式。没有这个文件,AI只能靠猜,猜错的概率不低。
第四个原因是段落语义不独立。AI摘录内容时,倾向于摘取能独立成义的段落。如果你的关键结论藏在“综上所述,结合前文的分析……”这种依赖上下文的句子里,AI很难把它单独拎出来用。
2.3 GEO和SEO的冲突与共存
这里要澄清一个误区:GEO不是要取代SEO,两者是叠加关系。传统SEO的很多工作(高质量内容、合理的内链、清晰的URL结构)对GEO同样有效。但GEO多了几个SEO不关心的维度:爬虫授权、机器可读的结构化声明、段落级的语义独立性。
我自己的做法是:在原有SEO基础上,加一层“机器友好层”。具体来说,就是不动现有的内容策略,但在技术层面做三件事:放开AI爬虫的robots.txt权限、部署llms.txt、给核心内容加结构化标记。这三件事做完,我那个技术博客在AI搜索里的引用率大概提升了三倍左右,虽然绝对量还不大,但趋势很明显。
3. 代码层面的GEO改造:从robots.txt到llms.txt
3.1 robots.txt的AI爬虫放行策略
robots.txt是GEO的第一道门。很多站长不知道的是,主流AI搜索的爬虫有自己独立的User-Agent,和传统搜索引擎爬虫是分开的。如果你在robots.txt里只写了针对Googlebot或Baiduspider的规则,AI爬虫可能默认被允许,也可能默认被拒绝,取决于具体实现。
我的建议是显式地给AI爬虫放行。下面是我目前在用的robots.txt片段:
# 传统搜索引擎 User-agent: Googlebot Allow: / User-agent: Baiduspider Allow: / # AI搜索爬虫放行 User-agent: GPTBot Allow: / User-agent: ChatGPT-User Allow: / User-agent: ClaudeBot Allow: / User-agent: PerplexityBot Allow: / User-agent: Google-Extended Allow: / # 默认规则 User-agent: * Allow: / Disallow: /admin/ Disallow: /private/这里有几个细节要注意。GPTBot是OpenAI的爬虫,ClaudeBot是Anthropic的,PerplexityBot是Perplexity的,Google-Extended是Google用于AI训练的爬虫标识。这些UA名称可能会变,建议定期检查各AI搜索平台的官方文档。
注意:如果你有付费内容或不想被AI引用的页面,可以在对应路径下单独设置
Disallow,但不要全局屏蔽AI爬虫,否则等于主动放弃GEO流量。
我踩过的一个坑是:有些CDN或WAF会默认拦截不常见的User-Agent,导致robots.txt里明明允许了,但AI爬虫的请求在到达服务器之前就被挡了。排查方法是看服务器访问日志里有没有这些UA的请求记录,如果没有,就要去CDN层检查。
3.2 llms.txt完整写法教程
llms.txt是我认为GEO里性价比最高的一个动作。它就是一个放在网站根目录的纯文本文件,用Markdown格式告诉AI模型:我的网站是干什么的、有哪些核心内容、怎么引用。
下面是我自己网站的llms.txt完整写法,你可以直接参考:
# 网站名称 > 一句话描述网站定位和核心内容方向。 ## 核心内容 - [页面标题](完整URL): 一句话说明这个页面解决什么问题 - [页面标题](完整URL): 一句话说明这个页面解决什么问题 ## 可选内容 - [页面标题](完整URL): 次要内容,AI可选择性引用 ## 授权说明 - 允许AI搜索引用本站内容并标注来源 - 引用时请保留原文链接 - 禁止将本站内容用于模型训练后不标注来源这个文件的关键在于“核心内容”部分。你要把最重要的页面列出来,每个页面配一句“这个页面解决什么问题”的说明。AI爬虫读到这个文件后,会优先抓取和索引你列出的页面,并且在生成答案时更倾向于引用这些页面。
我实测的效果是:部署llms.txt之后,AI搜索引用我的页面时,来源标注的准确率明显提升,以前经常标错页面,现在基本能标到正确的文章。
提示:llms.txt目前还不是强制标准,但主流AI搜索平台已经在逐步支持。建议放在根目录,文件名全小写,编码用UTF-8。
3.3 结构化数据标记的实操
除了robots.txt和llms.txt,第三个代码层面的动作是给核心内容加结构化数据标记。传统SEO用Schema.org标记来帮助搜索引擎理解页面内容,GEO同样适用,而且AI搜索对结构化数据的依赖更强。
我目前主要用三种标记类型:
- Article:标记文章类内容,告诉AI这是原创内容,作者是谁,发布时间是什么。
- FAQPage:标记问答对,这是AI搜索最喜欢的内容形式,因为可以直接摘录。
- HowTo:标记教程类内容,AI搜索在回答“怎么做”类问题时,会优先引用HowTo标记的页面。
下面是一个FAQPage标记的示例代码:
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "GEO和SEO有什么区别?", "acceptedAnswer": { "@type": "Answer", "text": "SEO优化的是排名,GEO优化的是被AI搜索引用的概率。GEO更关注机器可读性、段落语义独立性和爬虫授权信号。" } }, { "@type": "Question", "name": "llms.txt是什么?", "acceptedAnswer": { "@type": "Answer", "text": "llms.txt是放在网站根目录的纯文本文件,用来告诉AI模型网站结构、核心内容和引用授权方式。" } } ] } </script>这个标记加在页面head里,AI爬虫解析页面时会优先读取。我加了FAQPage标记的页面,在AI搜索里的引用率比没加的高出大概两倍。
注意:结构化数据标记的内容必须和页面可见内容一致,不能标记了但页面上没有,否则会被判定为作弊。
4. 内容层面的GEO适配:让AI“愿意”引用你
4.1 段落语义独立性的写法
代码层面的改造是“让AI能读到”,内容层面的改造是“让AI愿意引用”。这两件事缺一不可。
AI搜索摘录内容时,有一个很明显的偏好:它喜欢能独立成义的段落。什么叫独立成义?就是这个段落单独拿出来,不依赖上下文,读者也能看懂它在说什么。
我对比过自己被引用和没被引用的段落,发现一个规律:被引用的段落通常在第一句就点明了核心结论,后面再展开解释。没被引用的段落往往是“层层递进”式的,结论藏在最后一句,AI摘到一半就断了,自然不愿意用。
举个例子。下面这种写法AI很难引用:
前面我们分析了AI搜索的爬虫机制,也了解了robots.txt的配置方法。在此基础上,结合我自己的实测数据,可以发现llms.txt对引用率的提升效果最为显著。
这段话单独摘出来,读者不知道“前面”是什么,“在此基础上”指什么,AI没法用。
改成下面这样,AI就愿意引用了:
llms.txt对AI搜索引用率的提升效果最显著。在我自己的实测中,部署llms.txt后,AI搜索引用页面的准确率从约40%提升到约85%。
第一句就是完整结论,第二句给数据支撑。AI摘走这两句,读者能直接看懂。
我的做法是:每写一个核心段落,都问自己一句“这段话单独拿出来,读者能看懂吗”。如果答案是否定的,就改到能看懂为止。
4.2 问答对结构的批量生产
AI搜索最喜欢的内容形式是问答对。因为用户提问,AI搜索答案,问答对是天然匹配的。
我现在的做法是:每篇长文里至少嵌入三到五个问答对,用H3标题写成问题的形式,正文直接给答案。这些问答对同时用FAQPage标记包起来,AI爬虫读到之后,可以直接摘录。
问答对的写法有几个要点:
- 问题要具体,不要写“GEO怎么做”这种大而全的问题,要写“llms.txt放在哪个目录”这种具体问题。
- 答案要直接,第一句就给结论,不要铺垫。
- 答案长度控制在50到150字之间,太短信息量不够,太长AI摘录时会截断。
我实测下来,一篇3000字的文章里嵌入5个问答对,被AI搜索引用的概率比纯叙述式文章高出三倍以上。
4.3 内容更新频率与AI引用的关系
还有一个容易被忽略的点:AI搜索倾向于引用“新鲜”的内容。这不是说旧内容没价值,而是当同一个问题有多个来源时,AI会优先选择更新时间更近的。
我自己的做法是:核心页面每季度至少更新一次,更新时不只是改个日期,而是真的补充新内容、修正过时信息。更新后,在页面显眼位置标注“最后更新于XXXX年XX月”。
这里有个细节:AI爬虫判断内容新鲜度,不只看页面上的日期标注,还会看HTML里的dateModified标记。所以更新内容后,记得同步更新结构化数据里的日期。
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Article", "datePublished": "2024-01-15", "dateModified": "2025-03-20" } </script>我试过只改页面日期不改dateModified,AI搜索的引用行为没有明显变化。两个都改之后,引用率有明显提升。
5. 常见问题与排查技巧实录
5.1 AI搜索不引用我的网站,怎么一步步排查
排查AI搜索不引用的问题,我总结了一个从外到内的顺序,你可以照着走一遍。
第一步,检查robots.txt。直接在浏览器访问你的域名/robots.txt,看有没有针对AI爬虫的Disallow规则。如果不确定,可以临时把User-agent: *下的规则改成全允许,观察一周。
第二步,检查服务器日志。看有没有GPTBot、ClaudeBot、PerplexityBot这些UA的请求记录。如果没有,说明请求在到达服务器之前就被挡了,去CDN或WAF层查。
第三步,检查页面渲染方式。用curl命令抓取你的页面,看返回的HTML里有没有正文内容。如果只有一堆JS代码,说明内容是异步加载的,AI爬虫拿不到。
curl -A "GPTBot" https://你的域名/目标页面 | grep "你的核心关键词"如果这条命令没有输出你的关键词,说明AI爬虫视角下你的页面是空的。
第四步,检查llms.txt。访问你的域名/llms.txt,看文件是否存在、格式是否正确、有没有列出你的核心页面。
第五步,检查结构化数据。用Google的Rich Results Test工具测试你的页面,看结构化数据有没有语法错误。
5.2 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决动作 |
|---|---|---|---|
| AI搜索完全不引用 | robots.txt屏蔽了AI爬虫 | 访问/robots.txt检查 | 显式Allow AI爬虫UA |
| 引用的是旧版本内容 | dateModified未更新 | 查看结构化数据 | 同步更新页面日期和标记 |
| 引用时来源标注错误 | 缺少llms.txt | 访问/llms.txt | 部署llms.txt并列出核心页面 |
| 页面被引用但内容截断 | 段落语义不独立 | 人工阅读段落 | 改为结论前置的写法 |
| AI爬虫请求不到服务器 | CDN/WAF拦截 | 查访问日志 | 在CDN层放行AI爬虫UA |
| 问答内容不被引用 | 缺少FAQPage标记 | Rich Results Test | 添加FAQPage结构化数据 |
5.3 我踩过的三个坑
第一个坑是过度依赖llms.txt。我一开始以为部署了llms.txt就万事大吉,结果发现AI搜索的引用行为没有明显变化。后来才明白,llms.txt只是“说明书”,前提是你的内容本身可被爬取、可被解析。如果robots.txt挡着、页面是JS渲染的,llms.txt写得再好也没用。
第二个坑是结构化数据和页面内容不一致。我有一次为了省事,在FAQPage标记里写了一个页面上没有的问题和答案,结果被AI搜索判定为不一致,整个页面的引用权重都下降了。后来老老实实把标记内容和页面可见内容对齐,才恢复过来。
第三个坑是忽略移动端渲染。AI爬虫的渲染能力有限,很多时候用的是移动端视角。我的页面在桌面端是服务端渲染的,移动端却是客户端渲染的,导致AI爬虫在移动端视角下拿不到内容。后来统一改成服务端渲染,问题才解决。
提示:GEO是一个快速变化的领域,AI搜索平台的爬虫策略和引用逻辑可能每隔几个月就有调整。建议每季度重新检查一次robots.txt、llms.txt和结构化数据的配置,保持和最新实践同步。
6. 我的GEO工具链和日常检查清单
6.1 日常检查清单
我现在每周花大概二十分钟做一次GEO巡检,清单如下:
- 访问
/robots.txt,确认AI爬虫UA没有被误伤 - 访问
/llms.txt,确认核心页面列表没有过期 - 用
curl -A "GPTBot"抓取首页,确认返回的HTML里有正文 - 在主流AI搜索入口搜三个核心关键词,看自己的网站有没有被引用
- 检查服务器日志里AI爬虫的请求量和状态码
这个清单看起来简单,但坚持做下来,能避免大部分“莫名其妙不被引用”的问题。
6.2 工具链推荐
我目前用的工具不多,够用就行:
- Screaming Frog:批量检查网站的robots.txt和结构化数据,免费版够用。
- Google Rich Results Test:检查结构化数据语法,免费。
- curl:命令行抓取,模拟AI爬虫视角,免费。
- 服务器日志分析:我用的是一套开源的日志分析脚本,统计AI爬虫的请求频率和抓取页面。
不需要买什么昂贵的SEO工具,GEO的核心是技术配置和内容质量,工具只是辅助。
6.3 后续可以扩展的方向
GEO这个领域还在快速演进,我接下来打算试两个方向。一个是给图片和视频内容加结构化标记,因为AI搜索正在从纯文本向多模态扩展。另一个是研究不同AI搜索平台对内容长度的偏好,看是不是存在一个“最佳引用长度”,针对性地调整段落长度。
这两个方向目前还没有成熟的方法论,等我跑出数据再整理出来分享。如果你也在做GEO,欢迎交流你的实测数据,这个领域靠一个人摸索太慢,互通有无效率高得多。