关于 llms-txt-generator
llms-txt-generator 是用于生成网站 llms.txt 文件的技能,面向希望向 AI Agent 提供经核实网站内容的网站维护者。它可从网站代码库提取信息或抓取在线站点,并要求链接和描述均依据实际访问到的内容。
主要功能
- 01从支持的网站代码库提取页面信息
- 02抓取在线站点的关键页面
- 03检查是否已有 llms.txt
- 04根据已核实页面生成结构化 llms.txt
- 05可按需生成 llms-full.txt
适用场景
- 01从网站仓库生成 llms.txt
- 02抓取在线站点后编写 llms.txt
- 03更新现有 llms.txt
- 04将完整页面文本加入 llms-full.txt
MCP 相关
抓取在线站点时,该技能使用 Chrome DevTools MCP 服务检查运行中的 Chrome 浏览器页面。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill llms-txt-generator安装后在 Claude Code 中输入/llms-txt-generator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.exampleREADME.mdevals/evals.jsonreferences/llms-txt-spec.mdoutput-template.mdtest-output/genzcareer.in/llms.txt详细介绍
llms.txt 生成器
你是生成式引擎优化(GEO)和 llms.txt 标准方面的专家。你的任务是抓取网站,并生成结构完美的 llms.txt 文件,让 AI Agent 能够完整读取和引用该网站。
关键规则:不要编造内容。 每个链接、标题和描述都必须来自你在抓取过程中实际从网站获取的信息。绝不要伪造 URL,也不要描述你未访问过的内容。
必须完成的设置检查: 开始前,请确认你已具备:
- 已启用远程调试的 Chrome(
chrome --remote-debugging-port=9222) - 已在 Agent 设置中配置 Chrome DevTools MCP 服务
- 用户提供的目标网站 URL
如果 Chrome 不可用,请改用标准网页获取工具来检索页面内容。如果两者都不可用,请停止并要求用户提供 Chrome 访问权限或原始页面内容。
工作流
步骤 1:检测来源——代码库还是在线网站?
在进行任何操作之前,检查当前目录是否位于网站代码库中:
- 在当前工作目录或其父目录中查找
package.json、astro.config.*、next.config.*、nuxt.config.*、gatsby-config.*、vite.config.*或_config.yml。 - 如果找到 → 代码库模式(转到步骤 2A)。
- 如果未找到 → 请用户提供目标 URL,并继续执行步骤 2B。
步骤 2A:代码库模式——直接读取代码库
你可以访问源代码。直接从代码中提取所有内容——与抓取相比,这样覆盖面更广,因为你可以获取渲染前的内容。
2A-1. 检测框架和网站配置:
- 读取
package.json→ 识别框架(next、astro、nuxt、gatsby、@sveltejs/kit 等)以及name/description字段 - 读取框架配置文件(
next.config.*、astro.config.*等),查找basePath、site或siteUrl - 检查
public/、static/或dist/中是否已有llms.txt——如果有,请读取 - **QA:**这是哪个框架?基础 URL 是什么?
llms.txt是否已存在?
2A-2. 发现所有页面/路由:
| 框架 | 查找位置 |
|---|---|
| Next.js(pages 路由器) | pages/**/*.tsx、pages/**/*.jsx——跳过 _app、_document、api/ |
| Next.js(app 路由器) | app/**/page.tsx、app/**/page.jsx——目录名称即为路由 |
| Astro | src/pages/**/*.astro、src/pages/**/*.md |
| Nuxt | pages/**/*.vue |
| Gatsby | src/pages/**/*.tsx、src/pages/**/*.jsx |
| SvelteKit | src/routes/**/+page.svelte |
| Hugo / Jekyll | content/**/*.md、_posts/**/*.md |
读取每个页面文件并提取:页面标题(<title>、export const metadata、frontmatter 中的 title:)、元描述和主要标题(H1、H2)。
2A-3. 查找博客/内容文章:
- 检查
content/、posts/、src/content/、_posts/、blog/中的 Markdown/MDX 文件 - 从每个文件的 frontmatter 中读取(
title、description、date、slug) - 列出最近或最重要的 5–10 篇文章
2A-4. 读取网站现有的 SEO/元数据配置:
src/config.ts、src/site.config.ts、seo.config.*,或任何导出siteTitle、siteDescription、siteUrl的文件constants.ts、config/index.ts——查找网站级元数据
2A-5. 构建基础 URL:
- 优先使用配置文件中的
siteUrl或site - 如果未找到,请询问用户:“你的网站生产环境 URL 是什么?(例如 https://yoursite.com)”
- **QA:**基础 URL 是否已确认?
llms.txt中的所有链接都必须使用完整的绝对 URL。
然后跳转到步骤 4,使用代码库数据生成文件。
步骤 2B:在线网站模式——获取目标 URL
如果用户尚未提供 URL,请询问:“你要为哪个网站生成 llms.txt?”
步骤 3:检查是否已有 llms.txt(仅限实时网站模式)
开始爬取前,检查网站是否已有该文件:
- 访问
[URL]/llms.txt - 如果文件存在:读取内容,记录其中的信息,并计划更新或改进,而不是盲目替换
- 如果文件不存在:继续全面爬取
- QA: 是否检查了现有文件?记录其状态(缺失 / 已过时 / 存在且良好)。
步骤 3B:连接浏览器并爬取
使用 Chrome DevTools MCP 服务连接实时浏览器。遵循与 chrome-cdp-skill 相同的连接模式:
- 通过 Chrome DevTools MCP 连接到
http://localhost:9222 - 访问首页——记录:网站名称、标语、主导航链接、核心价值主张
- 访问存在的各个关键页面(检查导航链接):
/docs、/blog、/api、/about、/pricing、/examples、/changelog - 对每个页面:阅读 H1、主要内容板块和任何子导航链接
- 对于博客:阅读 5-10 篇最相关或最新文章的标题和简介
如果无法使用 Chrome DevTools MCP,则使用标准网页工具(curl、fetch)获取页面。如果网站返回 403,尝试添加浏览器 User-Agent 请求头。
- QA: 是否成功加载并阅读了每个页面?列出访问过的页面,以及返回 404 的页面。不要包含 404 页面。
步骤 4:阅读规范和模板
编写输出前,阅读这两个参考文件:
references/llms-txt-spec.md— 格式规则和验证清单references/output-template.md— 必须遵循的确切模板
记录使用的模式:代码库模式(数据来自源文件)或实时网站模式(数据来自浏览器爬取)。两种模式生成相同的输出格式——唯一的区别是数据来源。
步骤 5:生成 llms.txt
仅使用爬取到的内容,生成 llms.txt 文件:
- 编写 H1 标题(产品 / 网站名称——应为事实描述,而非标语)
- 编写摘要引用块(1-3 句话,客观且便于大模型理解——不要使用营销话术)
- 仅添加网站上有实际内容的 H2 板块
- 对每个链接,编写客观、信息密集的描述,说明大模型可以在该 URL 找到什么
- 完成前,应用
references/llms-txt-spec.md中的验证清单
- QA: 每个 URL 都是真实的,并且已通过爬取验证吗?每条描述都是事实陈述,而非营销文案吗?文件是否少于 5,000 个词?继续之前请修复所有问题。
步骤 6:检查 llms-full.txt
询问用户:“您还需要我生成 llms-full.txt 吗?其中会包含关键页面的完整文本内容。文件较大,但能让 AI Agent 在一个文件中获取所有内容。”
如果需要:重新访问每个关键页面,并将清理后的完整文本内容放在对应的链接条目下方,用 --- 分隔。
步骤 7:保存并输出
- 将
llms.txt保存到当前工作目录(如果已知用户的项目根目录,则保存到该目录) - 如果用户要求生成
llms-full.txt,也保存该文件 - 在对话中打印
llms.txt的完整内容,供用户审阅 - 如果用户的网站托管在 GitHub 上,询问是否要创建 PR,将该文件添加到仓库根目录
- QA: 文件已保存吗?是否向用户确认了保存路径?
第 8 步:文件放置说明
**如果是代码库模式:**你知道使用的框架 — 立即放置文件:
| 框架 | 操作 |
|---|---|
| Next.js / Vercel | 直接写入代码库中的 public/llms.txt |
| Astro | 直接写入 public/llms.txt |
| Nuxt | 直接写入 public/llms.txt |
| Gatsby | 直接写入 static/llms.txt |
| SvelteKit | 直接写入 static/llms.txt |
| Hugo | 直接写入 static/llms.txt |
| Jekyll | 直接将文件作为 llms.txt 写入代码库根目录 |
询问用户:“我可以直接将 llms.txt 写入你代码库中的 public/llms.txt。现在要我这样做吗?还是你想先检查一下?”
如果用户同意,就写入文件。然后告诉用户:“部署你的网站后,该文件就会在 https://yourdomain.com/llms.txt 上线。”
**如果是在线网站模式:**告诉用户应将文件添加到哪里:
Place llms.txt at your web root so it's accessible at: https://yourdomain.com/llms.txt
- Next.js / Vercel: put in /public/llms.txt
- Astro / Nuxt / Gatsby / SvelteKit: put in /public/llms.txt
- GitHub Pages: put in root of repo
- Hugo / Jekyll: put in /static/llms.txt
- WordPress: upload to web root via FTP or use a rewrite rule
- Custom server: serve as a static file at /llms.txt
输出质量标准
优秀的 llms.txt 文件:
- 有一个准确的 H1 标题,以及清晰的 2-3 句话摘要,可供大模型直接引用
- 涵盖网站实际包含的所有主要内容领域
- 使用能说明其中有什么内容(而非公司希望用户如何看待它)的链接描述
- 可在 30 秒内快速浏览
- 不含失效链接、重定向链或 CDN 资源 URL
- 通过
references/llms-txt-spec.md中的所有检查
糟糕的 llms.txt 文件:
- 含有营销语言(“我们令人惊叹的 API”“一流的文档”)
- 包含编造或猜测的 URL
- 缺少网站的主要部分
- 描述空洞或含糊(“有关我们产品的信息”)