mcpField
L
llmscout

llmscout

ローカル
github.com/RudrenduPaulビジネス・マーケティング05 週間前に更新

llmscout について

LLMScoutは、サイト運営者向けに公開サイトのテクニカルSEOと生成エンジン最適化を検査します。Node/TypeScript版とPython版で同じ21項目を調べ、PASS、WARN、FAILを報告し、複数サイトの個別レポートにも対応します。

主な機能

  1. 01SEOとGEOの21項目を検査
  2. 02PASS、WARN、FAILと修正案を表示
  3. 03構造化JSON出力
  4. 04複数サイトを個別レポート付きで検査
  5. 05TypeScript版とPython版を提供

活用シーン

  1. 01サイトのテクニカルSEO設定を確認
  2. 02AIクローラーの指示と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 - LLM があなたのサイトを引用できるかを確認します。 | Product Hunt

純粋な TypeScript または純粋な Python で、サイトに対してテクニカル SEO と GEO(生成エンジン最適化)の 21 項目をチェックします。どちらの場合も、Python インタープリター、ヘッドレスブラウザー、外部ツールチェーンは一切不要です。

npm で llmscout-cli をインストールし、llmscout init と llmscout check を実行して実サイトを検査し、ターミナルに PASS/WARN/FAIL のチェック結果が表示される様子

インストール

LLMScout は、相互に補完する独立した 2 種類のディストリビューションとして提供されています。どちらも同じ 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(引数解析)の 2 つです。npm のインストールでは、Python インタープリターも pip install も不要で、Playwright/Chromium のダウンロードもありません。

メモ

npm のインストールでは、cheerio の推移的依存関係として undici がインストールされます。過去に 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

https://example.com に対して llmscout check を実行した実際の出力:

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 を実行し、チェックごとの id、status、message、fix フィールドと summary オブジェクトを含む構造化 JSON 出力を生成する様子

check は、チェックに FAIL がない場合は 0、少なくとも 1 つのチェックが FAIL の場合は 1(WARN のみでは実行は失敗しません)、llmscout.json の欠落や設定不備などの使用エラーの場合は 2 で終了します。

機能

  • 2つのカテゴリにわたる21項目のチェック。 テクニカルSEOチェックが12項目、GEOチェックが9項目あり、21項目のチェックに名前を記載しています。
  • どちらの言語でも外部ツールチェーンは不要です。 TypeScript ソースのどこにも child_process はインポートされておらず、Python 版には実行時依存関係がありません。チェックは Python スクリプトやヘッドレスブラウザーをシェルから呼び出すのではなく、プロセス内で実行されます。
  • 設計上、クロスプラットフォームに対応しています。 python3 と py -3 の使い分けや相対パスによるスクリプトの解決が不要なため、Windows、macOS、Linux のどれでも同じインストールで同様に実行できます。
  • 堅牢化されたフェッチ処理。 単一のフェッチラッパー(src/fetch-utils.ts)は、http(s) 以外のスキームを拒否し、ループバック/プライベート/リンクローカルのホストをブロックします。リダイレクトは1ホップずつ手動でたどり、チェーンは最大5ホップ、レスポンス本文は最大10 MiB に制限します。
  • サイトごとのレポートに対応したフリートモード。 llmscout fleet manifest.json を実行すると、1回の呼び出しで多数のローカルなクライアントリポジトリのパスに対して一連のチェックを実行できます。--out-dir を指定すると、サイトごとに自動命名されたレポートファイルが1つずつ出力されます。多くのクライアントサイトをまとめてチェックする代理店向けに設計されています。
  • 構造化出力。 すべてのコマンドでグローバルフラグ --json を使用でき、機械可読形式で出力できます。そのため、CLI を呼び出すエージェントは結果をプログラムで解析できます。
  • 実際の User-Agent を設定可能。 デフォルトでは実際のブラウザーの User-Agent を送信します(ボット風の文字列を拒否する SSR フレームワークや CDN もあるためです)。上書きするには --user-agent フラグを使用できます。
  • 十分にテストされています。 TypeScript テストは248件、Python テストは233件あり、どちらも npm test/npm run test:coverage および pytest でローカルに再現できます。Python ディストリビューションには実行時依存関係がないため、依存関係の監査で指摘される項目はありません。npm 側では、package.json の overrides ブロックで、cheerio の推移的依存関係である undici を修正済みの範囲に固定しています。現在、npm audit で報告される脆弱性はゼロです。

GEO チェックが今重要な理由

検索トラフィックは、AI を介した回答へと実際に移行しており、その変化は最近起きたもので、仮説ではなく十分に測定されています。

  • Google 自身の AI Overviews がすでにクリック率を下げています。 Ahrefs の測定によると、AI Overview が表示されるキーワードでの 1 位の CTR は、2023 年 12 月の 7.3%から 2025 年 12 月には 1.6%へ低下しました。調査全体では CTR が平均 58%減少しています。(Ahrefs, December 2025) Semrush による独立した 1,000 万キーワードの分析では、検索結果ページに AI Overview が表示されると、オーガニック CTR は 61%、有料 CTR は 68%低下することがわかりました。(Semrush)
  • ChatGPT 自体が、現実の測定可能なトラフィック流入元になっています。 Search Engine Land が 677 万件のセッションを分析したところ、AI アシスタントからのリファラルトラフィック全体の 92%を ChatGPT が占め、コンバージョン率は 7.1%でした。これは有料検索の 7.8%に近い数値です。(Search Engine Land)
  • AI クローラーは、もはや単一のクローラーではありません。 2024 年 5 月から 2025 年 5 月にかけて、AI クローラートラフィックに占める GPTBot の割合は 5%から 30%に増加しました。その後、OpenAI と Anthropic はボットを、学習用クローラー(GPTBot、ClaudeBot)と、別個にブロックできる検索・取得用クローラー(OAI-SearchBot、Claude-SearchBot)に分割しました。(Cloudflare Radar, "From Googlebot to GPTBot") LLMScout の ai-crawler-directives チェックでは、現在の主要な学習用および検索用ボット 7 種(GPTBot、OAI-SearchBot、ClaudeBot、Claude-SearchBot、PerplexityBot、Google-Extended、Applebot-Extended)を個別にレポートします。ある企業の学習用ボットをブロックしても、その企業のアシスタントが独自の検索用ボットを通じてページをリアルタイムに取得し、引用できるかどうかには影響しないためです。
  • Markdown ネイティブなコンテンツ配信は、流行ではなく、実際に広がりつつある手法です。 Cloudflare は、HTTP コンテントネゴシエーション(Accept: text/markdown)を、エージェントにページのより軽量でクリーンな表現を配信するための標準準拠の方法として紹介しています。同社のベンチマークでは、あるブログ記事でトークン数が 80%削減されました。(Cloudflare, "Markdown for Agents") ただし、現状については正確に伝える必要があります。30 万のドメインを対象とした独立分析によると、実際には現在、主要な AI クローラーのどれもネゴシエーションのために Accept: text/markdown ヘッダーを送信していません。Markdown を見つける方法は、直接リンクに限られています。(Dries Buytaert) LLMScout の markdown-negotiation チェックは、エコシステムが実際以上に進んでいるかのように装うことなく、この状況をレポートします。
  • この分野のシグナルのすべてが確立されているわけではなく、LLMScout もその事実を隠しません。 llms.txt はコミュニティ主導の実際の慣習です(2024 年 9 月に作成され、2026 年半ば時点で Anthropic、Stripe、Cloudflare、Vercel など、上位サイトのおよそ 8~10%が採用しています)。一方、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 を報告し、問題なく PASS にならない場合は修正案を提示します。WARN は最適化の機会を逃していることを示すもので、ページが壊れているわけではなく、それだけで実行が失敗することはありません。

テクニカル SEO(12)
チェック(id)確認内容
タイトルタグ(title)<title> が存在し、10~60 文字の範囲内であることを確認します。
メタディスクリプション(meta-description)<meta name="description"> が存在し、50~160 文字の範囲内であることを確認します。
canonical タグ(canonical)<link rel="canonical"> が存在し、その href が有効な URL であることを確認します(相対 href は解決されるため、減点されません)。
robots.txt(robots-txt)/robots.txt にアクセスでき、少なくとも 1 つの User-agent ディレクティブが含まれていることを確認します。
sitemap.xml(sitemap-xml)/sitemap.xml にアクセスでき、有効であることを確認します。代替の場所として、robots.txt 内の Sitemap: ディレクティブも確認します。CDN のチャレンジページ(Cloudflare のボット管理など)と思われるレスポンスには、一般的な「サイトマップの形式が不正」というメッセージではなく、専用のメッセージを表示します。
見出し構造(heading-structure)<h1> がちょうど 1 つあり、見出しレベルが飛ばされていないことを確認します(たとえば、<h1> の直後に <h3> が続いていないこと)。
画像の代替テキスト(image-alt)<img> タグに alt 属性があることを確認します(装飾画像用の意図的な alt="" も対応済みとして扱います)。
Open Graph タグ(open-graph)ソーシャルプラットフォームでリッチリンクプレビューを表示するための og:title、og:description、og:image、og:url メタタグがあることを確認します。
Twitter/X Card タグ(twitter-card)有効な twitter:card メタタグと、必須の関連フィールドがあることを確認します。
メタ 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)GPTBot、OAI-SearchBot、ClaudeBot、Claude-SearchBot、PerplexityBot、Google-Extended、Applebot-Extended に対する robots.txt の許可/不許可の状態を報告します。設定内容を報告するものであり、許可またはブロックを推奨するものではありません。
FAQ スキーマ(faq-schema)FAQPage の JSON-LD が存在することを確認します(情報として報告されます。実際に FAQ があるページにのみ関連します。上記の Google による 2026 年 5 月のリッチリザルト廃止に関する注記を参照してください)。
コンテンツ抽出のしやすさ(content-extraction)ヒューリスティックなチェックです。ページに、エンジンが分割できる見出し/段落の構造があり、構造化されていない大きなブロックが 1 つだけではないことを確認します。設計上、クライアント側 JavaScript の実行後にのみ表示されるコンテンツは確認できません。
Speakable スキーマ(speakable-schema)音声アシスタントの回答対象となるための SpeakableSpecification が JSON-LD に含まれていることを確認します。
Organization スキーマ(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 } })を編集すると、1 つのカテゴリーだけを実行できます。

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 のスキルファイルを生成します。冪等性があり、既存のファイルは変更されません。
checkllmscout.json を含む <path> プロジェクトディレクトリ--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:少なくとも 1 つのチェックが FAIL しました。fleet:少なくとも 1 つのサイトが FAIL またはエラーになりました。
2使用エラー:無効な URL スキーム、llmscout.json が存在しない/読み取り不可/無効、siteUrl が空白、マニフェストが存在しない、またはその他の設定エラーです。

MCP サーバー

LLMScout には Model Context Protocol サーバーが同梱されており、AI エージェント (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 という 1 つのツールを公開します。このツールは、指定されたサブコマンドと引数に --json を付けて、公開済みの llmscout npm バイナリをシェル経由で実行し、解析済みの JSON 結果を返します。

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

トランスポートは stdio なので、ホストする必要はありません。MCP クライアントがサーバーをローカルの サブプロセスとして起動します。ソース:python/src/llmscout/mcp_server.py。

Fleet モード

cat fleet.json を実行して2サイトのマニフェストを表示し、続いて llmscout fleet ./fleet.json で両方のサイトをチェックして、サイトごとの PASS/FAIL サマリーを出力する様子

fleet は、複数のクライアントサイトをローカルリポジトリとして並行して管理する代理店やチームを対象としています。1つのマニフェストに各サイトを記述し、1つのコマンドですべてをチェックできます。

{
  "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)に書き込まれます。結果が1つの標準出力ダンプにまとまるのではなく、多数のクライアントサイトを対象に実行する代理店は、クライアントごとに判別できるレポートを得られます。各マニフェストエントリーの 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を検証し、サイトのリソースを取得して、1回の呼び出しで CheckContext を構築します。check と fleet が内部で呼び出す関数です。
fetchSiteResources(siteUrl: URL, fetchFn?: FetchFn) => Promise<SiteResources>より低レベルの関数です。CheckContext を構築せずに、ホームページと robots.txt/sitemap.xml/llms.txt を並行して取得します。
buildCheckContext(resources: SiteResources, fetchFn?: FetchFn) => CheckContextすでに取得済みのリソースから CheckContext を構築します(cheerio でホームページを一度解析します)。
runChecks(checks: Check[], ctx: CheckContext) => Promise<CheckResult[]>1つのコンテキストに対してチェックのリストを実行します。例外をスローするチェックは、実行を中断せず FAIL 結果になります。
hasFailure(results: CheckResult[]) => booleanいずれかの結果の status が "FAIL" の場合は true です。
ALL_CHECKS / TECHNICAL_CHECKS / GEO_CHECKSCheck[]すべてのチェック、または2つのカテゴリのいずれか一方のチェックです。
initProject(targetPath: string, opts?: { siteUrl?: string }) => InitResultllmscout.json と Claude Code のスキルファイルを生成します。冪等です。
loadFleetManifest / runFleetsrc/fleet.ts を参照fleet マニフェストを読み込み、その中のすべてのサイトに対してチェック一式を実行します。
safeFetch / assertHttpUrlsrc/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 版と関数単位で同じ API を提供します。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 ドキュメントはまだありません。モジュールの docstring(import llmscout; help(llmscout))とこの表がリファレンスです。

比較

以下の各セルは、表の下に引用した検証可能な情報源(リポジトリ内のファイル、パッケージマニフェスト、または公開されている Issue)に基づいています。「チェッカー」は既存の公開サイトを監査するツール、「ジェネレーター」は公開用の SEO/GEO アセットファイルを生成するツールを意味します。

LLMScoutclaude-seo (AgriciDaniel)geo-seo-claude (zubair-trabzada)geo-optimizer-skill (Auriti-Labs)
Python が必要いいえはい(Python 3.10+)はいはい(Python 3.9+)
Playwright/ヘッドレスブラウザーが必要いいえオプション(SPA のレンダリング用に、install.sh が Chromium を自動インストール)オプション。一部のチェックで必要コア機能では不要
インストールnpm / PyPI(依存関係:cheerio+commander、またはなし)git clone + install.sh / install.ps1、または Claude Code /plugingit clone + install.sh / install-win.shpip install または uvx
クロスプラットフォーム対応/Windowsですぐに利用可能はい(シェル呼び出しやパス解決なし)Windows 用の install.ps1 が付属していますが、新規インストール/Windows/パスに関する問題が繰り返し報告されています:Issue #137、#138、#139こちらでも Windows のインストールに関する問題が繰り返し報告されています:Issue #69、#21、#3pip/uv はクロスプラットフォーム対応。これ以上の検証は行っていません
AI クローラーボットの対応範囲7 種類のボットに対応。学習用クローラーと検索用クローラーを個別に追跡(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 ライセンス、公開 Issue #137/#138/#139 に基づいています。geo-seo-claude は、README と独自の Issue トラッカー(上記の 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 追跡ダッシュボードであり、インストール可能な OSS チェッカーではありません)であるため、この表には意図的に含めていません。

LLMScout とは何か、なぜ存在するのか

LLMScout は、テクニカル SEO と生成エンジン最適化に関する 21 の問題をウェブサイトでチェックする、独立したオープンソースのコマンドラインツールです。真に独立し、機能が同等な 2 種類のディストリビューションとして提供されています。1 つは TypeScript/Node CLI で、実行時依存関係は 2 つ(cheerio、commander)のみで、外部インタープリターやブラウザーは必要ありません。もう 1 つは Python CLI で、実行時依存関係は一切ありません。どちらの実装のチェックにも、child_process(TypeScript)やサブプロセス呼び出し(Python)は一切使われていません。

LLMScout は、特定の問題領域において、既存プロジェクト AgriciDaniel/claude-seo のインストール手順を置き換えるために存在します。このプロジェクトは Claude Code 用の SEO/GEO スキルで、スキルの説明から Python スクリプト(Playwright ベースのレンダリング、pip でインストールする依存関係)をシェル経由で呼び出してチェックを実行します。この外部ツールチェーンとパス解決の連鎖が、繰り返し報告されているインストール、Windows、パス関連のバグの根本原因です。このプロジェクトが回避しようとしているアーキテクチャ上の失敗をそれぞれ示す 3 件の Issue(現在はクローズ済み)を含みます。#137(新規に /plugin をインストールしても、Python の依存関係も Playwright Chromium もセットアップされない)、#138(スキルの説明で python3 が固定指定されていますが、標準の Windows インストール環境には存在しません)、#139(スクリプトがプラグインのルート配下にある場合、スキルから相対パスで scripts/*.py を呼び出しても解決されません)。同種の問題は、現在も活発に利用されている別の Claude Code GEO スキル zubair-trabzada/geo-seo-claude でも独立して発生しています(Issue #69、#21、#3)。この失敗は特定のプロジェクト固有ではなく、アーキテクチャに起因するものです。

LLMScout は、どちらのプロジェクトのフォークでもありません。コードを共有せず、名前も異なり、同等のチェックを一から再実装しています。重要な設計上の選択は、何をしないかです。外部インタープリターやヘッドレスブラウザーを起動するのではなく、ホストプロセス内でチェックを実行するため、これらのバグの背景にある失敗要因はここには存在しません。セットアップが必要なインタープリターはなく、パッケージ自体以外に実行する pip install もなく、ダウンロードするブラウザーのバイナリもなく、解決する相対スクリプトパスもないため、どのプラットフォームでも新規インストール時の動作は同じです。この選択による直接的な代償として、コンテンツ抽出チェックは静的 HTML に基づくヒューリスティックであり、クライアント側 JavaScript のレンダリング後に初めて表示されるコンテンツは評価できません。この制限は、チェック結果にも明記されています。

インストール問題の解決という目的に加え、LLMScout のチェックは、2025 年半ば以降の GEO 分野で実際に見られる、具体的な根拠に裏付けられた動向を反映しています。その主張の根拠となる出典(トレーニング用と検索用の AI クローラーの分化、Markdown コンテンツネゴシエーション、Google が公式に文書化した FAQ リッチリザルトの廃止など)については、今 GEO チェックが重要な理由 を参照してください。

LLMScout は、以前の名称 SeoFleet から新たに名称変更されました。両方のディストリビューションは新しいパッケージ名(npm と PyPI の両方で llmscout-cli)で再公開されています。両方のインストール方法についてはインストールを、最新バージョンについては上記のバッジを参照してください。

FAQ

LLMScout の使用に Python は必要ですか? いいえ。npm 配布版は純粋な TypeScript/Node で、依存関係は 2 つ(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 はサポートしていないと公表しています。根拠については、Why GEO checks matter right now を参照してください。LLMScout はサイト所有者が対応できる事実を報告しますが、結論の出ていない問題について立場を表明するものではありません。

claude-seo や geo-seo-claude を直接修正せず、別のツールを作るのはなぜですか? これらのインストール時および Windows での不具合には、共通の根本原因があります。スキルの指示から外部のインタープリターとブラウザのツールチェーンをシェル経由で呼び出してチェックを実行していることです。個々の症状にパッチを当てても、そのアーキテクチャは残ります。LLMScout はそのアーキテクチャ自体を取り除きます。外部ツールチェーンがなければ、この種のインストールやパスに関するエラーは再発しません。これは独立した再実装であり、パッチではありません。

一度に複数のサイトに対して実行できますか? はい。llmscout fleet manifest.json は、ローカルの JSON マニフェスト内にあるすべてのサイトを対象に、一度の実行ですべてのチェックを実行します。また、--out-dir を指定すると、1 つにまとめた標準出力の代わりに、サイトごとに自動で名前を付けたレポートファイルを書き込みます。多数のクライアントサイトをチェックする代理店向けに作られています。

エージェントやスクリプトで出力を利用できますか? はい。任意のコマンドにグローバルフラグ --json を渡すと、各チェックの id、status、message、fix フィールドとサマリーオブジェクトを含む、構造化された JSON が出力されます。終了コードは固定されています。0 は問題なし、1 は少なくとも 1 件の FAIL、2 は使用方法または設定のエラーです。

Python 版はありますか? はい。pip install llmscout-cli で、ラッパーではなく、独立した本格的な Python 版をインストールできます。実行時依存関係はありません。この npm パッケージと同じ 21 個のチェックが、同じ PASS/WARN/FAIL 判定で実行されます。python/README.md を参照してください。

LLMScout を商用利用したり、クローズドソースのプロジェクトで使用したりできますか? はい。どちらの配布版も MIT ライセンスです(LICENSE を参照)。LLMScout は商用およびクローズドソースのプロジェクトで、ロイヤリティの支払いや、チェック対象をオープンソースにする義務なしに、使用、変更、再配布できます。ソース自体を再配布する場合は、著作権表示とライセンス文を保持する必要があります。

コントリビューション

TypeScript と Python の両方のコードベースに関する完全なガイドは、CONTRIBUTING.md をご覧ください。このパッケージで役立つコマンド:

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 へのすべてのプッシュとプルリクエストで、lint、型チェック、ビルド、カバレッジ、および npm audit --audit-level=high を実行します。問題の報告やプルリクエストは https://github.com/RudrenduPaul/LLMScout/issues で歓迎しています。

22 個目のチェックを追加する手順は、意図的にシンプルにしています。src/types.ts の Check インターフェースを実装した新しいファイルを src/checks/ の下に作成し、その後 src/checks/index.ts に登録してください(CONTRIBUTING.md に従い、Python 版の python/src/llmscout/checks/ にも同様に追加してください)。

ライセンス

MIT。詳しくは LICENSE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。