mcpField
L
llmscout

llmscout

本地服务
github.com/RudrenduPaul商业与营销05 周前更新

关于 llmscout

LLMScout 为网站运营者检查技术 SEO 与生成式引擎优化配置,针对实时网站运行 21 项检查。Node/TypeScript 和 Python 发行版提供相同检查及 PASS、WARN、FAIL 结果,并支持批量站点报告。

主要功能

  1. 01运行 21 项 SEO 与 GEO 检查
  2. 02输出 PASS、WARN、FAIL 及修复建议
  3. 03支持 JSON 结构化结果
  4. 04批量检查多个站点并分别报告
  5. 05提供 TypeScript 与 Python 版本

适用场景

  1. 01检查网站的 SEO 基础配置
  2. 02查看 AI 爬虫规则及 GEO 相关信号
  3. 03为代理机构批量检查客户网站

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rudrendupaul-llmscout": {
"command": "uvx",
"args": [
"llmscout-cli"
]
}
}
}
启动命令uvx llmscout-cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypillmscout-cli0.3.7

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

LLMScout

CI npm version PyPI version License: MIT

安装 • 快速入门 • CLI 参考 • 比较 • 常见问题 • 参与贡献

LLMScout - 检查大模型能否引用你的网站。| Product Hunt

通过纯 TypeScript 或纯 Python 对你的网站执行 21 项技术 SEO 和 GEO(生成式引擎优化)检查,无需 Python 解释器、无头浏览器或任何外部工具链。

使用 npm 安装 llmscout-cli,然后运行 llmscout init 和 llmscout check 检查线上网站,并在终端中查看 PASS/WARN/FAIL 检查结果

安装

LLMScout 提供两种独立且互补的发行版本。两者都运行相同的 21 项检查,并给出相同的 PASS/WARN/FAIL 判定,因此请选择最适合你工具链的版本。

Node/TypeScript(npm):

npm install -g llmscout-cli
llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site

CLI 适用于 Node 18+(在 package.json 的 engines 中声明)。运行时的两项依赖是 cheerio(HTML 解析)和 commander(参数解析):npm 安装过程中无需 Python 解释器、无需 pip install,也不会下载 Playwright/Chromium。

说明

npm 安装会引入 undici,它是 cheerio 的传递依赖。过去 npm audit 曾针对它标记高严重性安全公告;package.json 的 overrides 区块将 undici(以及 js-yaml/nanoid)固定到已修复的版本范围,以解决此问题。安装后运行 npm audit,确认解析出的依赖树没有问题。

Python(PyPI):

pip install llmscout-cli
llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site

运行时零依赖——HTML 解析和 HTTP 获取都仅使用 Python 标准库。完整的 Python 专属指南请参阅 python/README.md。

然后,在你想要检查的任意项目中:

llmscout init .

这会在目标目录中生成 llmscout.json 配置文件和一个精简的 Claude Code 技能文件。设置你的网站 URL,然后运行 llmscout check .。

快速入门

生成配置并对线上网站运行检查:

llmscout init ./my-site --site-url https://example.com
llmscout check ./my-site

以下是运行 llmscout check 检查 https://example.com 的实际输出:

LLMScout check -- https://example.com

[PASS] (technical) Title tag
  Title "Example Domain" is 14 characters, within the recommended 10-60 range.

[WARN] (technical) Meta description
  No meta description found.
  Fix: Add <meta name="description" content="..."> with 50-160 characters summarizing the page.

[WARN] (technical) Canonical tag
  No <link rel="canonical"> tag found.
  Fix: Add a canonical link tag pointing at the preferred URL for this page.

[FAIL] (technical) robots.txt
  robots.txt was not reachable at https://example.com/robots.txt (HTTP 404).
  Fix: Add a robots.txt file at your site root, even a permissive one, so crawlers and agents have explicit directives.

[WARN] (technical) sitemap.xml
  No sitemap was reachable (tried: https://example.com/sitemap.xml).
  Fix: Add a sitemap.xml at your site root, or point to one with a Sitemap: directive in robots.txt, to help search engines discover pages.

[PASS] (technical) Heading structure
  Exactly one <h1> and no skipped heading levels detected.

[PASS] (technical) Image alt coverage
  No <img> tags found on the page.

[WARN] (technical) Open Graph tags
  No Open Graph tags found.
  Fix: Add Open Graph meta tags (og:title, og:description, og:image, og:url) so shared links render rich previews on social platforms.

[WARN] (technical) Twitter/X Card tags
  No twitter:card meta tag found.
  Fix: Add <meta name="twitter:card" content="summary_large_image"> (or another valid card type) so links render rich previews on X/Twitter.

[WARN] (technical) Meta robots directives
  No meta robots directives found; default Google Search snippet/preview limits will apply.
  Fix: Add <meta name="robots" content="max-snippet:-1, max-image-preview:large, max-video-preview:-1"> to control search snippet appearance.

[PASS] (technical) Image weight
  No <img> tags with an http(s) src to measure.

[PASS] (technical) Redirect chain
  The homepage resolved with no redirects.

[WARN] (geo) Structured data (JSON-LD)
  No JSON-LD structured data found.
  Fix: Add schema.org JSON-LD markup (e.g. Organization, WebSite, or Article) so generative engines can understand the page's entities.

[WARN] (geo) llms.txt
  No llms.txt found at https://example.com/llms.txt.
  Fix: Optional: add an llms.txt at your site root summarizing the site for LLM-based agents (see llmstxt.org).

[WARN] (geo) AI crawler directives
  robots.txt is unreachable, so AI-crawler directives could not be determined.
  Fix: Add a reachable robots.txt if you want to state an explicit policy for AI crawlers (GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended).

[WARN] (geo) FAQ schema
  No FAQPage structured data found.
  Fix: If this page has an FAQ section, mark it up with FAQPage JSON-LD so generative engines can surface individual answers.

[PASS] (geo) Content extraction friendliness
  Found 1 heading(s) and 1 structured text block(s); content appears reasonably extractable. (Heuristic: cannot assess semantic quality or JS-rendered content.)

[WARN] (geo) Speakable schema
  No Speakable structured data found.
  Fix: If this page has content suited for voice assistants, add a "speakable" SpeakableSpecification to its JSON-LD so voice search can surface it.

[WARN] (geo) Organization schema
  No Organization/Corporation/LocalBusiness/Person structured data found.
  Fix: Add Organization (or Person) JSON-LD with a sameAs array of your official social/profile URLs to strengthen Knowledge Panel signals.

[WARN] (geo) Markdown content negotiation
  Requesting https://example.com/ with "Accept: text/markdown" returned Content-Type "text/html" instead of text/markdown.
  Fix: Optional: serve a text/markdown representation of pages when the client sends "Accept: text/markdown" so LLM-based agents can fetch clean Markdown directly instead of parsing HTML.

[WARN] (geo) Link header (RFC 8288)
  The homepage does not send a Link response header.
  Fix: Optional: add an RFC 8288 Link response header (e.g. <https://example.com/feed>; rel="alternate") to advertise machine-readable service-discovery endpoints to crawlers and AI agents.

Summary: 6 PASS, 14 WARN, 1 FAIL (21 checks)

使用 --json 运行相同检查:

llmscout --json check ./my-site
{
  "siteUrl": "https://example.com",
  "summary": {
    "pass": 6,
    "warn": 14,
    "fail": 1,
    "total": 21
  },
  "results": [
    {
      "id": "title",
      "name": "Title tag",
      "category": "technical",
      "status": "PASS",
      "message": "Title \"Example Domain\" is 14 characters, within the recommended 10-60 range."
    }
  ]
}

运行 llmscout --json check 生成结构化 JSON 输出,其中包含每项检查的 id、status、message 和 fix 字段,以及 summary 对象

如果没有检查 FAIL,check 会以 0 退出;如果至少有一项检查 FAIL,则以 1 退出(仅有 WARN 不会导致运行失败);如果发生用法错误(例如缺少或配置错误的 llmscout.json),则以 2 退出。

功能

  • 21 项检查,分为两类。 12 项技术 SEO 检查和 9 项 GEO 检查,详见21 项检查。
  • 两种语言均无需外部工具链。 TypeScript 源码中从未导入 child_process;Python 移植版没有任何运行时依赖。检查直接在进程内运行,不会通过 shell 调用 Python 脚本或无头浏览器。
  • 从设计上支持跨平台。 无需在 shell 中调用 python3 或 py -3,也无需解析相对路径脚本,因此同一安装在 Windows、macOS 和 Linux 上的运行方式完全一致。
  • 强化的 fetch。 单一 fetch 封装(src/fetch-utils.ts)会拒绝任何非 http(s) 协议,阻止回环、私有和链路本地主机,逐跳手动跟随重定向,并将跳转次数限制为 5 次、响应正文限制为 10 MiB。
  • 支持按站点生成报告的批量模式。 llmscout fleet manifest.json 可在一次调用中,对多个本地客户端仓库路径运行完整套件;--out-dir 会为每个站点写入一个自动命名的报告文件,专为需要同时检查多个客户站点的代理机构打造。
  • 结构化输出。 每条命令都接受全局 --json 标志,以生成机器可读的输出,因此调用 CLI 的 Agent 可以通过程序解析结果。
  • 真实且可配置的 User-Agent。 默认发送真实的浏览器 User-Agent(部分 SSR 框架和 CDN 会直接拒绝类似机器人的字符串),并提供 --user-agent 标志以便覆盖。
  • 测试完善。 包含 248 项 TypeScript 测试和 233 项 Python 测试,均可通过 npm test / npm run test:coverage 和 pytest 在本地复现。Python 发行版没有任何运行时依赖,因此依赖审计无可标记的问题。在 npm 端,package.json 的 overrides 块将 undici(cheerio 的传递依赖)固定在已修补的版本范围内;目前 npm audit 报告未发现漏洞。

GEO 检查为何在当下至关重要

搜索流量确实正在转向由 AI 提供答案的模式,而且这一变化近期才出现,已有充分测量数据,并非假设:

  • Google 自己的 AI Overviews 已经在减少点击率。 Ahrefs 测得,触发 AI Overview 的关键词中,排名第 1 的点击率从 2023 年 12 月的 7.3% 降至 2025 年 12 月的 1.6%——研究范围内的平均点击率下降了 58%。(Ahrefs,2025 年 12 月) Semrush 对 1,000 万个关键词进行的独立分析发现,结果页出现 AI Overview 时,自然搜索点击率下降 61%,付费搜索点击率下降 68%。(Semrush)
  • ChatGPT 本身如今已是一个真实且可衡量的流量来源。 Search Engine Land 对 677 万次会话的分析发现,ChatGPT 占所有 AI 助手引荐流量的 92%,转化率为 7.1%,接近付费搜索的 7.8%。(Search Engine Land)
  • AI 爬虫已不再只有一种。 2024 年 5 月至 2025 年 5 月期间,GPTBot 在 AI 爬虫流量中的占比从 5% 上升至 30%。此后,OpenAI 和 Anthropic 将各自的机器人拆分为训练爬虫(GPTBot、ClaudeBot)以及独立的、可单独屏蔽的搜索/检索爬虫(OAI-SearchBot、Claude-SearchBot)。(Cloudflare Radar,《从 Googlebot 到 GPTBot》) LLMScout 的 ai-crawler-directives 检查会分别报告当前七种主要训练和搜索机器人(GPTBot、OAI-SearchBot、ClaudeBot、Claude-SearchBot、PerplexityBot、Google-Extended、Applebot-Extended),因为屏蔽某家公司的训练机器人,并不会影响其助手通过自己的搜索机器人实时检索并引用你的页面。
  • 原生支持 Markdown 的内容交付是一种真实的新兴实践,并非昙花一现。 Cloudflare 将 HTTP 内容协商(Accept: text/markdown)记录为一种基于标准的方式,可向 Agent 提供更轻量、更简洁的页面呈现形式——他们自己的基准测试显示,某篇博客文章的 token 数减少了 80%。(Cloudflare,《面向 Agent 的 Markdown》) 也有必要如实说明当前情况:对 30 万个域名的独立分析发现,在实际应用中,目前还没有任何主要 AI 爬虫发送 Accept: text/markdown 标头来进行内容协商——它们只能通过直接链接发现 Markdown。(Dries Buytaert) LLMScout 的 markdown-negotiation 检查会如实报告这一情况,不会假装生态系统的发展比实际更超前。
  • 这个领域并非所有信号都已尘埃落定,LLMScout 不会声称事实并非如此。 llms.txt 是一种真实、由社区推动的惯例(于 2024 年 9 月创建;截至 2026 年年中,约有 8%–10% 的头部网站采用,包括 Anthropic、Stripe、Cloudflare 和 Vercel),但 Google 的 Gary Illyes 已公开表示 Google 不支持该惯例,也没有支持计划,并将其比作已弃用的 keywords 元标签。(Search Engine Journal) LLMScout 的 llms-txt 检查会将其存在情况作为信息报告,而不会将其设为必须通过的项目——这个工具的职责是报告实际配置情况,而不是在证据尚不充分时推行某种政策。
  • Google 于 2026 年 5 月 7 日彻底从搜索中移除了 FAQ 富媒体搜索结果。(Search Engine Journal) FAQPage 架构本身并未弃用——它仍是有效标记,其他搜索引擎和 AI 助手仍可解析它,以提取直接答案——因此 LLMScout 的 faq-schema 检查仍会报告相关情况,只是不再暗示它能为 Google SERP 带来富媒体搜索结果。

21 项检查

每项检查都会报告 PASS、WARN 或 FAIL,并为未通过的项目提供修复建议。WARN 表示错过了优化机会,并不代表页面损坏,而且本身不会导致运行失败。

技术 SEO(12 项)
检查项(id)验证内容
标题标签(title)是否存在 <title>,且长度为 10–60 个字符。
Meta 描述(meta-description)是否存在 <meta name="description">,且长度为 50–160 个字符。
Canonical 标签(canonical)是否存在 <link rel="canonical">,且其 href 是有效 URL(相对 href 会解析,不会因此受罚)。
robots.txt(robots-txt)/robots.txt 是否可访问,并至少包含一条 User-agent 指令。
sitemap.xml(sitemap-xml)/sitemap.xml 是否可访问且有效;同时会检查 robots.txt 中的 Sitemap: 指令,作为备用位置。如果响应看起来像 CDN 挑战页面(例如 Cloudflare 机器人管理页面),会显示专门的提示,而不是笼统地提示“站点地图格式错误”。
标题结构(heading-structure)是否恰好有一个 <h1>,且标题级别没有跳级(例如 <h1> 后直接接 <h3>)。
图片 alt 覆盖情况(image-alt)<img> 标签是否具有 alt 属性(装饰性图片有意设置的 alt="" 也视为已覆盖)。
Open Graph 标签(open-graph)是否存在 og:title、og:description、og:image 和 og:url meta 标签,以便在社交平台上生成丰富的链接预览。
Twitter/X 卡片标签(twitter-card)是否存在有效的 twitter:card meta 标签及其必需的配套字段。
Meta robots 指令(robots-meta-directives)是否设置高级摘要控制指令(max-snippet、max-image-preview、max-video-preview),并标记是否明确设置了 noindex。
图片大小(image-weight)通过 HEAD 请求检查每张图片的实际字节大小,并标记会拖慢页面加载的大尺寸图片。
重定向链(redirect-chain)检查主页的完整重定向链;链路过长时发出警告,若链路最终以错误状态结束则判定失败。
GEO/生成式引擎优化(9)
检查项(id)验证内容
结构化数据(structured-data)存在 JSON-LD <script type="application/ld+json"> 块,且可解析为有效 JSON。
llms.txt(llms-txt)网站根目录下存在 /llms.txt(这是一种新兴的非标准约定——请参阅为什么 GEO 检查现在很重要;缺失时仅提供提示信息)。
AI 爬虫指令(ai-crawler-directives)报告 robots.txt 对 GPTBot、OAI-SearchBot、ClaudeBot、Claude-SearchBot、PerplexityBot、Google-Extended 和 Applebot-Extended 的允许/禁止状态。此项仅报告已配置的状态,绝不建议允许或屏蔽。
FAQ 架构(faq-schema)存在 FAQPage JSON-LD(仅提供提示信息;只适用于实际包含 FAQ 的页面——请参阅上文有关 Google 于 2026 年 5 月弃用富媒体搜索结果的说明)。
内容提取友好度(content-extraction)启发式检查:页面具有标题/段落结构,便于引擎分块,而非只有一大段无结构内容。根据设计,此项无法检测仅在客户端 JavaScript 执行后才出现的内容。
Speakable 架构(speakable-schema)JSON-LD 中存在 SpeakableSpecification,用于判断内容是否符合语音助手回答的条件。
组织架构(organization-schema)存在包含官方个人资料 URL sameAs 数组的 Organization/Person JSON-LD,用于提供知识面板信号。
Markdown 内容协商(markdown-negotiation)网站是否会在通过 Accept: text/markdown 进行内容协商时提供 text/markdown 格式的内容。
Link 标头(link-header)首页响应是否发送用于机器可读服务发现的 RFC 8288 Link 标头。

你可以通过编辑 llmscout.json 中的 checks 块,仅运行一个类别({ "checks": { "technical": true, "geo": false } })。

CLI 参考

根据此工具自身的 --help 输出转录。

$ llmscout --help
Usage: llmscout [options] [command]

Zero-config, cross-platform SEO and GEO checks for local projects, with no
Python or headless-browser dependency.

Options:
  -V, --version                  output the version number
  --json                         output structured JSON instead of
                                 human-readable text (default: false)
  --user-agent <string>          override the default User-Agent header sent on
                                 outbound fetches
  -h, --help                     display help for command

Commands:
  init [options] <path>          Scaffold a LLMScout setup (llmscout.json + a
                                 Claude Code skill file) into a target
                                 directory
  check [options] <path>         Run SEO/GEO checks against a local project's
                                 configured site
  fleet [options] <config.json>  Run the full check suite against every site
                                 listed in a fleet manifest
  help [command]                 display help for command
命令参数选项用途
init<path> 目标目录--site-url <url> 立即设置 siteUrl初始化 llmscout.json 和 Claude Code 技能文件。可重复执行:已有文件保持不变。
check<path> 包含 llmscout.json 的项目目录--out-dir <dir> 同时为此网站写入自动命名的报告文件;(全局选项 --json、--user-agent)针对已配置的 siteUrl 运行所选检查。
fleet<config.json> 站点集清单--out-dir <dir> 同时为每个站点写入一个自动命名的报告文件,文件名取自清单的 name 字段;(全局选项 --json、--user-agent)针对清单中的每个站点运行完整检查套件。

--json、--user-agent、-V/--version 和 -h/--help 是仅有的全局选项。

退出代码
代码含义
0init 成功,或 check/fleet 执行完成且没有 FAIL。
1check:至少有一项检查 FAIL。fleet:至少有一个站点 FAIL 或出错。
2用法错误:URL 协议无效、缺少/无法读取/无效的 llmscout.json、siteUrl 为空、缺少清单,或其他配置错误。

MCP 服务

LLMScout 提供 Model Context Protocol 服务,让 AI Agent (Claude、Cursor 或任何兼容 MCP 的客户端)无需人工手动调用 CLI,即可直接对运行中的网站执行 SEO/GEO 检查。

安装附加组件:

pip install "llmscout-cli[mcp]"

将其添加到 MCP 客户端的配置中(对于 Claude Desktop,配置文件为 claude_desktop_config.json):

{
  "mcpServers": {
    "llmscout": {
      "command": "uvx",
      "args": ["--from", "llmscout-cli", "llmscout-mcp"]
    }
  }
}

该服务提供一个名为 run 的工具。它会通过 shell 调用已发布的 llmscout npm 二进制文件,传入指定的子命令和参数以及 --json,并返回解析后的 JSON 结果:

run(["check", "./my-site", "--site-url", "https://example.com"])

此服务使用 stdio 传输,因此无需托管:MCP 客户端会将服务作为本地子进程启动。源代码:python/src/llmscout/mcp_server.py。

Fleet 模式

运行 cat fleet.json 显示包含两个站点的清单,然后运行 llmscout fleet ./fleet.json 检查两个站点并打印每个站点的 PASS/FAIL 摘要

fleet 面向需要在本地仓库中并行维护多个客户站点的代理机构或团队。你可以在一个清单中声明每个站点,然后通过一条命令检查所有站点:

{
  "sites": [
    { "name": "client-a", "path": "./clients/client-a" },
    { "name": "client-b", "path": "./clients/client-b" }
  ]
}
llmscout fleet ./fleet.json
LLMScout fleet report

[FAIL] client-a (/abs/path/clients/client-a) -- 6 PASS, 14 WARN, 1 FAIL
[PASS] client-b (/abs/path/clients/client-b) -- 8 PASS, 13 WARN, 0 FAIL

Fleet summary: 1 site(s) passed, 1 site(s) failed, 0 site(s) errored (2 total).

添加 --out-dir ./reports 后,每个站点的结果也会写入各自自动命名的文件(client-a.txt、client-b.txt,或使用 --json 时生成 .json 文件)——这样,代理机构跨多个客户站点运行检查时,每个客户都会得到一份可区分的报告,而不是将所有结果合并输出到一个 stdout 中。每个清单条目的 path 都相对于清单文件所在目录解析,而不是相对于进程的工作目录,因此无论从哪里调用,同一份清单都能正常使用。所有操作都仅访问本地文件系统,不涉及 SSH,也不提供远程执行入口。

库 API 参考

这两个发行版本也都是真正可导入的库,而不只是 CLI。以下导出项都确实存在(从 src/index.ts 和 python/src/llmscout/__init__.py 中检索得出),示例也都针对已发布的软件包进行了测试,并非凭记忆编写。

TypeScript(npm 上的 llmscout-cli):

import { loadSite, runChecks, ALL_CHECKS } from "llmscout-cli";

const ctx = await loadSite("https://example.com");
const results = await runChecks(ALL_CHECKS, ctx);
console.log(results[0].status, results[0].name);
// "PASS" "Title tag"
导出项签名功能
loadSite(rawSiteUrl: string, fetchFn?: FetchFn) => Promise<CheckContext>验证 URL、获取站点资源,并在一次调用中构建 CheckContext。check 和 fleet 在内部都会调用它。
fetchSiteResources(siteUrl: URL, fetchFn?: FetchFn) => Promise<SiteResources>更底层的接口:并行获取首页以及 robots.txt/sitemap.xml/llms.txt,但不构建 CheckContext。
buildCheckContext(resources: SiteResources, fetchFn?: FetchFn) => CheckContext根据已获取的资源构建 CheckContext(使用 cheerio 解析一次首页)。
runChecks(checks: Check[], ctx: CheckContext) => Promise<CheckResult[]>对一个上下文运行一组检查。若某项检查抛出异常,会将其记为 FAIL,而不会中止整个运行。
hasFailure(results: CheckResult[]) => boolean如果任意结果的 status 为 "FAIL",则返回 true。
ALL_CHECKS / TECHNICAL_CHECKS / GEO_CHECKSCheck[]完整检查套件,或仅包含两个类别中的一个。
initProject(targetPath: string, opts?: { siteUrl?: string }) => InitResult创建 llmscout.json 和 Claude Code 技能文件。可幂等执行。
loadFleetManifest / runFleet参见 src/fleet.ts加载 Fleet 清单,并对其中的每个站点运行检查套件。
safeFetch / assertHttpUrl参见 src/fetch-utils.ts功能中介绍的强化型 fetch 封装,可导出以供自定义检查复用。

类型:Check、CheckContext、CheckResult、CheckStatus("PASS" \| "FAIL" \| "WARN")、CheckCategory("technical" \| "geo")、SiteResources、LLMScoutConfig、FleetManifest。目前尚无生成的 API 文档站点;本表和源代码自带的 TSDoc 注释就是参考资料。

Python(PyPI 上的 llmscout-cli):

from llmscout import load_site, run_checks, ALL_CHECKS

ctx = load_site("https://example.com")
results = run_checks(ALL_CHECKS, ctx)
print(results[0].status, results[0].name)
# PASS Title tag

Python 软件包与 TypeScript 软件包的函数一一对应:load_site、run_checks、has_failure、ALL_CHECKS/TECHNICAL_CHECKS/GEO_CHECKS、init_project、load_fleet_manifest/run_fleet、safe_fetch/assert_http_url、load_config/default_config/select_checks,以及 Check、CheckContext、CheckResult 和 SiteResources 类型。完整列表见 python/src/llmscout/__init__.py 的 __all__。目前尚无生成的 Sphinx 文档;模块文档字符串(import llmscout; help(llmscout))和本表就是参考资料。

对比

下表中的每一项都来自可核实的来源(仓库文件、软件包清单或公开议题),并在表格下方注明。“检查器”指审查现有在线网站的工具;“生成器”指为你生成 SEO/GEO 资源文件以供发布的工具。

LLMScoutclaude-seo (AgriciDaniel)geo-seo-claude (zubair-trabzada)geo-optimizer-skill (Auriti-Labs)
是否需要 Python否是(Python 3.10+)是是(Python 3.9+)
是否需要 Playwright / 无头浏览器否可选(install.sh 会自动安装 Chromium,以便渲染 SPA)可选,用于部分检查核心功能不需要
安装npm / PyPI(依赖:cheerio+commander,或无依赖)git clone + install.sh / install.ps1,或 Claude Code /plugingit clone + install.sh / install-win.shpip install 或 uvx
跨平台 / 开箱即用支持 Windows是(不调用 shell,也不解析路径)提供 Windows install.ps1,但全新安装、Windows 和路径故障反复出现:议题 #137、#138、#139这里也反复出现 Windows 安装问题:议题 #69、#21、#3pip/uv 可跨平台;未经进一步验证
AI 爬虫 Bot 覆盖范围7 种 Bot,分别跟踪训练和搜索爬虫(GPTBot/OAI-SearchBot、ClaudeBot/Claude-SearchBot、PerplexityBot、Google-Extended、Applebot-Extended)非专用检查项非专用检查项未验证
Markdown 内容协商检查是(markdown-negotiation)否否否
类型检查器检查器检查器 + 报告生成器检查器
覆盖范围技术 + GEO(21 项检查)技术 + GEO(范围广)专注于 GEO技术 + GEO
许可证MITMIT未验证MIT

来源:LLMScout 的信息来自本仓库的 package.json、src/fetch-utils.ts、src/checks/index.ts,以及 src/ 中不存在 child_process。claude-seo 的信息来自其 README 安装部分(Python 3.10+、install.sh/install.ps1、/plugin)、MIT 许可证和公开议题 #137/#138/#139。geo-seo-claude 的信息来自其 README 和自身的议题跟踪器(Windows 安装问题议题 #69、#21、#3,均已在上文引用)。geo-optimizer-skill 的信息来自其 README(Python 3.9+、pip install geo-optimizer-skill / uvx、MIT 许可证,以及提供 audit/fix 命令的 CLI)。

Profound、Peec 和 Evertune 等托管分析产品属于不同类别(付费的托管 GEO 跟踪仪表板,而非可安装的开源软件检查器),因此有意不列入此表。

什么是 LLMScout,它为何存在

LLMScout 是一款独立的开源命令行工具,可检查网站是否存在 21 个技术 SEO 和生成式引擎优化问题。它以两种真正独立、功能等效的发行版形式提供:TypeScript/Node CLI 仅有两个运行时依赖(cheerio、commander),无需外部解释器或浏览器;Python CLI 则完全没有运行时依赖。两种实现的检查中都没有出现 child_process(TypeScript)或子进程调用(Python)。

它的存在是为了替代现有项目 AgriciDaniel/claude-seo 的安装流程,解决一类特定问题。该项目是一个 Claude Code SEO/GEO 技能,它通过技能说明调用 Python 脚本来执行检查(基于 Playwright 的渲染、通过 pip 安装依赖)。这条外部工具链加路径解析链路,是该项目反复出现安装、Windows 和路径问题的根本原因。其中包括三个问题(现已关闭,但每个都记录了本项目旨在避免的架构性故障模式):#137(全新 /plugin 安装既不会安装 Python 依赖,也不会安装 Playwright Chromium)、#138(技能说明硬编码了 python3,而标准 Windows 安装中并没有该命令),以及 #139(技能通过相对路径调用 scripts/*.py,但脚本位于插件根目录下时该路径无法解析)。另一款仍在积极使用的 Claude Code GEO 技能 zubair-trabzada/geo-seo-claude 也独立出现了同类问题(问题 #69、#21、#3)——这种故障模式源于架构,并非某个项目所特有。

LLMScout 不是这两个项目中任何一个的分支。它不与它们共享代码,名称不同,并从头重新实现了同等的检查。关键的设计选择在于它不会做什么:由于检查在宿主进程内运行,而非通过启动外部解释器和无头浏览器来执行,这类问题背后的整套故障模式在这里并不存在。无需安装解释器,无需在安装包本身之外运行 pip install,无需下载浏览器二进制文件,也无需解析相对脚本路径,因此全新安装在所有平台上的表现都一致。这种选择带来的直接代价是,内容提取检查采用静态 HTML 启发式方法,无法评估仅在客户端 JavaScript 渲染后才出现的内容。该检查会在自身输出中说明这一限制。

除了解决安装问题,LLMScout 的检查也遵循了 GEO 领域自 2025 年中以来实际发展的、有具体依据的方向——支撑这一说法的引用来源,请参阅为什么 GEO 检查现在很重要,其中包括训练与搜索 AI 爬虫的分化、Markdown 内容协商,以及 Google 自行记录的 FAQ 富媒体搜索结果弃用。

LLMScout 刚从原名 SeoFleet 更名。两个发行版都将以新包名重新发布(npm 和 PyPI 上均为 llmscout-cli)——两种安装方式请参阅安装,实时版本状态请查看上方徽章。

常见问题

LLMScout 需要 Python 吗? 不需要。npm 发行版是纯 TypeScript/Node,仅依赖两个包(cheerio、commander)。整个流程不需要执行 pip install,也不会用到 Python 解释器。

它会使用 Playwright 或无头浏览器吗? 不会,两个发行版都不会。它们都会通过 http(s) 获取 HTML 并解析(TypeScript 版使用 cheerio,Python 版使用标准库)。两个实现的检查过程中都不会下载 Chromium,也不会调用任何子进程。代价是,内容提取检查仅读取静态 HTML,无法查看由 JavaScript 渲染的内容。它会在自己的结果消息中说明这一点。

这里的“零配置”具体是什么意思? llmscout init <path> 会直接写入可用的 llmscout.json 文件和 Claude Code 技能文件,不会询问任何问题。你必须提供的唯一值是网站的线上 URL(通过 --site-url 提供,或编辑文件),因为该工具无法根据项目的本地文件推断其公开 URL。之后,llmscout check <path> 无需进一步配置即可运行;默认运行全部 21 项检查。

为什么 LLMScout 将训练爬虫和搜索爬虫分开跟踪? 因为 OpenAI 和 Anthropic 现在确实将它们作为可分别屏蔽的独立用户代理运行。屏蔽 GPTBot(训练)不会影响 OAI-SearchBot 是否仍能实时检索你的页面并在 ChatGPT 答案中引用该页面;ClaudeBot 和 Claude-SearchBot 也有同样的区别。将它们合并报告会掩盖一个真实且可采取行动的区别。

LLMScout 会建议我添加 llms.txt 吗? 不会,它只会报告是否存在该文件。llms.txt 是一种真实且日益普及的惯例,但 Google 已公开表示不支持它——来源请参见为什么 GEO 检查此刻很重要。LLMScout 会报告网站所有者可以据此采取行动的事实;对于尚无定论的问题,它不会表明立场。

为什么不直接修复 claude-seo 或 geo-seo-claude,而要另做一个工具? 它们的安装和 Windows 问题有一个共同的根本原因:检查是通过技能指令调用外部解释器和浏览器工具链来执行的。逐个修补问题症状会保留这种架构。LLMScout 则直接移除这种架构:没有外部工具链,这类安装和路径错误就不会再出现。它是独立的重新实现,而不是补丁。

我可以一次对多个网站运行它吗? 可以。llmscout fleet manifest.json 会在一次调用中,对本地 JSON 清单中的每个网站运行完整的检查套件;--out-dir 会为每个网站分别写入一个自动命名的报告文件,而不是将所有输出合并到标准输出中——专为需要检查多个客户网站的代理机构打造。

Agent 或脚本可以读取输出吗? 可以。在任意命令中传入全局 --json 标志,即可获取结构化 JSON,其中包括每项检查的 id、status、message 和 fix 字段,以及一个摘要对象。退出码保持稳定:0 表示无问题,1 表示至少有一项 FAIL,2 表示用法或配置错误。

有 Python 版本吗? 有——pip install llmscout-cli 会安装一个真正独立的 Python 移植版(并非 Node 二进制文件的包装器),且没有运行时依赖。它会运行相同的 21 项检查,并给出与此 npm 包相同的 PASS/WARN/FAIL 判定。请参见 python/README.md。

我可以将 LLMScout 用于商业用途,或用于闭源项目吗? 可以。两个发行版均采用 MIT 许可证(请参见 LICENSE):你可以在商业和闭源项目中使用、修改和再分发 LLMScout,无需支付版税,也不必将它检查的任何内容开源。唯一要求是,如果你再分发源代码本身,必须保留版权声明和许可证文本。

贡献

完整指南请参阅 CONTRIBUTING.md,其中涵盖 TypeScript 和 Python 代码库。此软件包的常用命令:

npm install
npm run build       # tsc build to dist/
npm run typecheck   # tsc --noEmit
npm test            # vitest run (248 tests)
npm run test:coverage
npm run lint        # eslint src test

CI(.github/workflows/ci.yml)会在每次推送到 main 以及针对 main 的拉取请求中运行 lint、类型检查、构建、覆盖率检查和 npm audit --audit-level=high。欢迎通过 https://github.com/RudrenduPaul/LLMScout/issues 提交问题和拉取请求。

新增第 22 项检查的流程特意设计得很简单:在 src/checks/ 下的新文件中实现 Check 接口(src/types.ts),然后在 src/checks/index.ts 中注册(并按照 CONTRIBUTING.md,在 Python 对应目录 python/src/llmscout/checks/ 下进行同样的操作)。

许可证

MIT。详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。