作者审计了360个域名,总结出AI搜索引擎选择来源的四个关键基础设施问题:访问→定向→理解→引用,按顺序修复可在30分钟内解决。
我审核了 360 个域名的 AI 搜索可读性框架。平均得分 54.1 分(满分 100)。大多数网站失败不是因为内容质量,而是因为四个基础设施问题——这些问题只需 30 分钟即可修复。
这是快速版本。四个步骤,真实代码,按顺序执行。
AI 搜索是一个选择问题,而不是排序问题。模型收到查询后,决定查阅哪些来源、提取哪段内容,然后要么引用你、要么改写而不署名。没有第二页。
被选中需要四件事按顺序生效:
Access——AI 爬虫能够抓取你的内容
Orientation——它能找到重要的东西
Understanding——它能解析你在说什么
Quotability——它能提取一段自包含的段落
先修 Access,再修 Schema。先修 Schema,再修 Content。顺序错了 = 白干。我见过团队在"AI 优化"的名义下重写内容,而他们的 robots.txt 封堵了 GPTBot。
目前至少有 11 个 AI 爬虫在主动索引网页。每个都有不同的 user-agent 标识。大多数网站是意外封堵的——某个 CMS、安全插件或 boilerplate 模板添加了 Disallow: /,没人去检查。
检查你现在提供的是什么:
curl https://yoursite.com/robots.txt
如果你在 User-agent: * 下看到 Disallow: /,你封堵了所有爬虫。如果你看到 Disallow: / 而没有指定 user-agent,效果相同。
以下是一个最小化的 robots.txt,显式允许主要 AI 爬虫访问公开内容,同时锁住私有路径:
# Allow major AI crawlers access to public content
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: Googlebot
Allow: /
User-agent: Google-Extended
Allow: /
User-agent: Applebot
Allow: /
User-agent: CCBot
Allow: /
User-agent: Bytespider
Allow: /
User-agent: Diffbot
Allow: /
# Block private/admin paths from all crawlers
User-agent: *
Disallow: /admin/
Disallow: /private/
Disallow: /api/internal/
# Sitemap
Sitemap: https://yoursite.com/sitemap.xml
上传到网站根目录。完成。
关于 Access 再多说一句:如果你的网站是 SPA,初始 HTML 响应返回一个空的 <div id="root"></div>,AI 爬虫什么都看不到。GPTBot 和 PerplexityBot 不会可靠地执行 JavaScript。
检查爬虫实际看到了什么:
curl -A "GPTBot" https://yoursite.com | grep -i "your main heading"
如果什么都没返回,你的内容是隐形的。你需要 SSR、SSG 或预渲染层。这不是 5 分钟能搞定的,但你现在就需要知道它。
llms.txt 是网站根目录下的纯文本文件,给 AI 爬虫提供内容的结构化摘要。把它想象成模型实际能读懂的 sitemap。
在我的审核中,54.2% 的网站有 llms.txt 文件,但只有 26.9% 有完整的。破损的 llms.txt 比没有更糟糕——它给模型的是一张缺失街道的地图。
以下是一个最小化模板:
# Your Company Name
> Your Company builds [what you build] for [who you serve].
## Docs
- [Getting Started](https://yoursite.com/docs/getting-started): Quick start guide
- [API Reference](https://yoursite.com/docs/api): Full REST API documentation
## Product
- [Features](https://yoursite.com/features): Feature overview
- [Pricing](https://yoursite.com/pricing): Pricing tiers and FAQ
## Blog
- [Blog Index](https://yoursite.com/blog): Engineering and product blog
# 行是网站标题
> 行是对你所做之事的单句描述
## sections 对链接进行分组
每个链接格式为 - [Title](URL): Description——description 很重要,它给模型提供上下文的线索,告诉模型那个 URL 下有什么
不要列出每一篇博客文章。只列出能回答"这是什么网站?"和"它是做什么的?"的页面。
上传到 https://yoursite.com/llms.txt。完成。
Schema 是你用来告诉模型你的实体是什么的方式:你是谁、你的网站做什么、你的页面回答什么问题。
在审核中,75.6% 的网站有一些 schema,但只有 52.2% 有 Organization schema,18.1% 有 FAQ schema。"有一些 schema"和"有对 AI 引用真正重要的 schema 类型"之间的差距,就是大多数网站失利的地方。
把这放到首页的 <head> 中。把值替换成你的真实数据。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://yoursite.com/#organization",
"name": "Your Company",
"url": "https://yoursite.com",
"logo": "https://yoursite.com/logo.png",
"description": "Your Company builds [what you build].",
"sameAs": [
"https://github.com/yourcompany",
"https://x.com/yourcompany",
"https://www.linkedin.com/company/yourcompany"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "support",
"email": "support@yoursite.com",
"url": "https://yoursite.com/contact"
}
},
{
"@type": "WebSite",
"@id": "https://yoursite.com/#website",
"url": "https://yoursite.com",
"name": "Your Company",
"description": "What your site does, in one sentence.",
"publisher": { "@id": "https://yoursite.com/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://yoursite.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
]
}
</script>
@graph 结构让你在一个块中声明多个实体并用 @id 相互引用。这就是你告诉模型"这个组织发布了这个网站"的方式。
如果你有 FAQ 页面或回答问题的页面,在相关页面添加这个:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is AI search readiness?",
"acceptedAnswer": {
"@type": "Answer",
"text": "AI search readiness is the degree to which a website can be discovered, understood, and cited by generative AI systems like ChatGPT, Perplexity, and Google AI Overviews."
}
},
{
"@type": "Question",
"name": "How is GEO different from SEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "SEO optimizes for ranking positions on a search results page. GEO optimizes for selection and citation by generative models that synthesize answers from multiple sources."
}
}
]
}
</script>
FAQ schema 是你通往问答提取的直接线路。当模型看到带有 Question 和 acceptedAnswer 对的 FAQPage 时,它可以逐字引用这些答案。这就是为什么 18.1% 的采用率很重要——这是与被引用最直接相关的 schema 类型,而 82% 的网站没有它。
最后一步是编辑,而不是基础设施。模型只有在你的内容结构适合被引用时才能干净地引用你。
BLUF: Bottom Line Up Front。每页都应该以对其核心问题的独立回答开头。细节放在下面。答案放在最前面。
# How Our API Handles Rate Limiting
When we first launched our API in 2023, we didn't have any rate limiting
in place. After a few incidents where a single client overwhelmed the
auth service, we realized we needed a more robust approach. We
experimented with token bucket algorithms, considered sliding window
loggers, and eventually settled on a fixed window counter approach
combined with exponential backoff. Here's how it works...
[800 more words of context, history, and implementation details]
阅读此内容的模型必须从分散的句子中综合出答案。它会改写而不引用,或者跳过此来源去选择一个更干净的。
# How Our API Handles Rate Limiting
Our API enforces rate limiting using a **fixed window counter** with
exponential backoff. The default limit is **100 requests per minute**
per API key. When the limit is exceeded, the API returns HTTP 429 with
a `Retry-After` header indicating the wait time in seconds.
## How It Works
Rate limits are calculated per API key, not per IP address. Each
request increments a counter that resets at the start of each
60-second window. When the counter exceeds 100, subsequent requests
receive a 429 response until the window resets.
## Handling 429 Responses
Clients should implement exponential backoff: wait 1 second before
the first retry, then double the wait on each subsequent retry, up to
a maximum of 60 seconds. The `Retry-After` header provides the exact
wait time for the current window.
第一段是自包含的。模型可以将其作为直接引用提取出来。它在完整页面的上下文之外也有意义。这就是可引用性。
去你最重要的 5 个页面。对每一个:
找到页面回答的核心问题
写一个 2-3 句话的独立回答
把它放在顶部,在任何背景或历史之前
把细节移到下面
这是最费力的步骤,但对你被引用还是被改写的影响最大。
我再重复一遍,因为这是最常见的错误:
Access → Orientation → Understanding → Quotability
如果你的 robots.txt 封堵了 GPTBot,你的 llms.txt 和 schema 就是隐形的。如果你的 llms.txt 破损了,你的 schema 会把模型引向死胡同。如果你的 schema 缺失了,你的内容结构也帮不了模型理解它在读什么。
先修地基。每一层使能下一层。
从基准数据来看:
有 llms.txt 的网站比没有的高 20 分。有 schema 的网站高 28 分。各层是叠加的。
这些都不需要营销代理。只需要 30 分钟和一个文本编辑器。你需要改的四个文件:
robots.txtllms.txt<head>(JSON-LD)