每天,越来越多的人使用 ChatGPT、Perplexity 和其他 AI 工具来搜索和总结内容。正如我在之前一篇关于 SEO to SAO 的文章中所讨论的,网站和博客的大部分访问量将来自 AI 代理只是时间问题。
当涉及到使您的内容可供语言模型访问时,有一种比复杂的抓取解决方案更简单的方法——特别是对于使用 Astro 构建的静态生成站点。在这篇文章中,我将引导您创建一个 llms.txt 文件,该文件以清晰、结构化的格式将您的博客内容公开给 LLM。
什么是 llms.txt?
llms.txt 文件在概念上类似于 robots.txt,但专门为语言模型设计。它提供了一种结构化的、基于文本的内容表示形式,易于 LLM 解析和理解。
LLM 不太擅长通过链接浏览多个页面。相反,LLM 非常擅长从单个页面抓取内容并将其存储到它们的内存中。这就是 llms.txt 变得非常宝贵的地方。
为什么像 Crawl4AI 这样的抓取工具可能大材小用
像 Crawl4AI 这样的工具为 LLM 提供了强大的网站抓取功能。虽然它们非常适合为动态站点生成 LLMs.txt,但对于静态站点来说,它们可能大材小用。
特别是对于 Astro 站点,内容通常以带有 frontmatter 的 markdown 文件存储,您已经拥有完美结构化的内容,可以直接公开。
在 Astro 中实现 llms.txt 端点
以下是如何为您的 Astro 站点生成 LLMs.txt 文件。
在 src/pages/llms.txt.ts(或 src/pages/api/llms.txt.ts,具体取决于您的 Astro 配置)中创建一个文件,并添加以下代码:
import { getCollection } from "astro:content";
import type { APIRoute } from "astro";
export const GET: APIRoute = async () => {
try {
// Fetch all content collections
const [blogs, features, transcriptions, alternatives, help] = await Promise.all([
getCollection("blog"),
getCollection("features"),
getCollection("transcription"),
getCollection("alternatives"),
getCollection("help")
]);
// Sort blogs by date (newest first)
const sortedBlogs = blogs
.filter(post => !post.data.draft)
.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime());
// Filter non-draft content
const activeFeatures = features.filter(item => !item.data.draft);
const activeTranscriptions = transcriptions.filter(item => !item.data.draft);
const activeAlternatives = alternatives.filter(item => !item.data.draft);
const content = `# 您的网站名称 - 完整内容指南
本文档包含您网站的完整内容。
网站:https://yourwebsite.com
上次更新:${new Date().toISOString().split('T')[0]}
## 博客内容
${sortedBlogs
.map((post) => `#
## ${post.data.title}
URL: https://yourwebsite.com/blog/${post.data.slug || post.id}
发布日期:${post.data.date}
类别:${post.data.category}
作者:${post.data.author}
描述:${post.data.description}
${post.body}
---`).join('\n\n')}
## 其他内容部分
${activeFeatures
.map((feature) => `#
## ${feature.data.title}
URL: https://yourwebsite.com/${feature.data.slug}
类别:${feature.data.category}
${feature.data.description}
${feature.body}
---`).join('\n\n')}
---
提供此内容是为了帮助 AI 助手了解您网站的产品并提供准确的信息。`;
return new Response(content, {
headers: {
"Content-Type": "text/plain; charset=utf-8",
"Cache-Control": "public, max-age=3600" // 缓存 1 小时
},
});
} catch (error) {
console.error('生成 llms.txt 时出错:', error);
return new Response('生成 llms.txt 时出错', { status: 500 });
}
};
此代码的工作原理
此代码创建一个 API 端点,该端点:
- 使用
getCollection()从您的内容集合中获取所有帖子 - 过滤掉草稿内容,仅包含已发布的文章
- 按日期对内容进行排序,以首先显示最新内容
- 创建一个结构化的文本文件,从您的网站标题开始
- 包括每个帖子:
- 帖子标题作为标题
- 指向帖子的直接链接
- 元数据(日期、类别、作者、描述)
- 完整的帖子内容
- 通过适当的错误日志记录来优雅地处理错误
- 设置适当的标头,包括用于性能的缓存
为您的内容结构进行自定义
调整集合名称
上面的示例使用了多个集合。如果您只有一个博客集合,请简化它:
export const GET: APIRoute = async () => {
const posts = await getCollection("blog"); // 调整为您的集合名称
const publishedPosts = posts
.filter(post => !post.data.draft)
.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime());
const content = `# 您的博客名称
${publishedPosts
.map((post) => `# ${post.data.title}
https://yourwebsite.com/blog/${post.data.slug || post.id}
${post.data.description}
${post.body}
`).join('\n\n')}`;
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
};
添加内容过滤
您可能希望排除某些类别或仅包含特色内容:
// 仅包含特色帖子
const featuredPosts = posts.filter(post => post.data.featured && !post.data.draft);
// 排除特定类别
const filteredPosts = posts.filter(post =>
!post.data.draft && !['internal', 'private'].includes(post.data.category)
);
使用 llms.txt 的好处
1. 改进的 AI 可发现性
AI 工具可以快速了解您的整个内容库,而无需抓取多个页面。
2. AI 响应的更好上下文
当用户提出与您的内容相关的问题时,AI 模型可以访问全面、结构化的信息。
3. AI 时代的 SEO
随着搜索朝着 AI 驱动的结果发展,为 AI 消费提供结构化内容变得至关重要。
4. 性能优势
静态生成意味着您的 llms.txt 文件在构建时创建,从而提供快速的响应时间。
测试您的 llms.txt 实现
实现端点后,通过以下方式进行测试:
- 直接访问端点:
https://yoursite.com/llms.txt - 检查内容结构以确保包含所有帖子
- 验证格式是否清晰易读
- 通过要求 AI 工具分析您的 llms.txt 内容来进行测试
llms.txt 的最佳实践
保持内容新鲜
当您发布新内容时,通过重新构建您的站点来定期更新您的 llms.txt。
包括相关的元数据
添加发布日期、类别和描述,以帮助 AI 了解上下文。
清晰地构建内容
在各个部分之间使用一致的标题格式和清晰的分隔符。
监控文件大小
对于有数百个帖子的站点,请考虑对内容进行分页或过滤,以保持文件易于管理。
结论
为您的 Astro 网站创建一个 llms.txt 文件是一种简单的方法,可以使您的内容可供 AI 语言模型访问。这种方法利用 Astro 的内容集合来创建您网站内容的结构化、全面的视图。
随着 AI 对于内容发现变得越来越重要,实现 llms.txt 可以使您的网站在 AI 驱动的搜索环境中获得更好的可见性。该实现简单、高性能,并且易于维护,作为您 Astro 构建过程的一部分。
立即开始实施 llms.txt,以确保您的内容为 AI 驱动的搜索和发现的未来做好准备。
常见问题
llms.txt 和 sitemap.xml 之间有什么区别?
虽然 sitemap.xml 列出了您的页面供搜索引擎抓取工具使用,但 llms.txt 以针对语言模型理解和处理而优化的格式提供实际内容。
我应该多久更新一次我的 llms.txt 文件?
您的 llms.txt 文件会在您重新构建 Astro 站点时自动更新,因此它会与您的内容发布计划保持同步。
我可以在 llms.txt 中包含图像和媒体吗?
llms.txt 是基于文本的,因此请包含图像和媒体的描述,而不是文件本身。专注于 AI 可以有效处理的文本内容。
llms.txt 会影响我的 SEO 吗?
不会,llms.txt 不会对传统的 SEO 产生负面影响。它的设计旨在通过使 AI 工具可以访问内容来补充您现有的 SEO 策略。
我的 llms.txt 文件应该有多大?
没有严格的限制,但要保持合理。对于有数百个帖子的站点,请考虑过滤以仅包含您最重要或最新的内容。