SEO & GEO について
SEO & GEO は、AI エージェント向けにページの SEO、構造化データ、クローラーのアクセス、AI 回答エンジンでの引用準備状況を監査する MCP サーバーです。従来のページ要素と GEO を評価し、スコアと優先修正項目を返します。API キーは不要です。
主な機能
- 01SEO と GEO のページ監査
- 02AI クローラー向け robots.txt の確認
- 03JavaScript なしでのコンテンツ閲覧可否の検出
- 04メタタグ、見出し、構造化データ、本文の分析
- 05サイトマップ、リンク、hreflang の確認
活用シーン
- 01AI 回答エンジンによるページのクロールと引用可否の評価
- 02検索インデックスを妨げるページ問題の特定
- 03多言語ページの hreflang 設定の確認
MCP 対応
MCP サーバーとして、読み取り専用の SEO・GEO 監査ツールを MCP クライアントに提供し、構造化データ、スコア、修正案を返します。stdio とステートレスな Streamable HTTP に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
17掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 分析するページ URL。例:'https://example.com/blog/post'。スキームの既定値は https:// です。 |
| include_geo | boolean | いいえ | GEO(AI 回答エンジン)への対応度も評価します。リクエストが約 2 回追加されます。 |
| response_format | enum | いいえ | 出力形式:人が読みやすい要約には 'markdown'(デフォルト)、完全な構造化データには 'json' を指定します。markdown | json |
| check_broken_links | boolean | いいえ | 最大 25 個のリンクをサンプル確認し、アクセス可能か検証します。時間はかかりますが、リンク切れを検出できます。 |
詳細
seo-geo-mcp-server
AI エージェントがページの SEO と GEO(生成エンジン最適化)を監査できる MCP サーバーです。オンページタグ、構造化データ、robots.txt、サイトマップ、hreflang に加え、ChatGPT、Claude、Perplexity、Gemini が実際にクロールして引用できるかを確認します。API キーは不要です。
v2 MCP SDK を基盤としており、サーバーは 2026-07-28 のプロトコルリビジョンに対応しながら、同じファクトリーで 2025 年版のクライアント(Claude Desktop、Claude Code、Cursor)も受け付けます。1 回のビルドで両方の世代に対応でき、設定は不要です。
Claude に 「このページの状態はどうですか?AI アシスタントに引用されますか?」 と尋ねるだけで、完全な監査を実行し、優先順位付きの修正案を添えた評価レポートを作成します。6 種類のウェブツールに URL を貼り付ける必要はありません。
> Audit https://example.com/guide and tell me if ChatGPT can cite it
seo_audit(url="https://example.com/guide", include_geo=true)
Overall: A (92/100) · indexable: yes
Meta tags & social preview 95 (A)
Heading structure 100 (A)
Structured data 75 (C)
GEO readiness: B (85/100)
✅ AI crawler access 25/25
✅ Server-rendered content 20/20
❌ Authorship & entity 2/10
1. Add author and Organization markup with `sameAs` links to official profiles.
開発の背景
2 つの課題を、1 つのサーバーで解決します。
SEO の課題: オンページチェッカーはすべてウェブ UI です。エージェントが監査を実行し、結果を読み取り、同じループ内でコードを修正できるものはありません。
GEO の課題: 「生成エンジン最適化」ツールの多くは、サブスクリプション制の順位追跡ダッシュボードです。AI アシスタントがあなたのサイトを引用できるかを実際に左右する仕組みは、簡単に確認できるにもかかわらず、ほとんど確認されていません。
- AI 検索クローラーはあなたのサイトにアクセスできますか?
GPTBotをブロックすると、トレーニングを止められます。OAI-SearchBotをブロックすると、引用されなくなります。前者を意図して設定したサイトの多くで、誤って後者もブロックしています。このサーバーは両者を区別します。 - JavaScript がなくてもコンテンツは存在しますか? Googlebot は JavaScript をレンダリングします。一方、
GPTBot、ClaudeBot、PerplexityBot、CCBotは、ほとんどレンダリングしません。クライアント側でレンダリングするページは Google では問題なく順位を獲得できても、すべての AI アシスタントから見えない可能性があります。
このサーバーは ortamarco.me のツールをエージェント向けに補完するものであり、domain-security-mcp-server とコア機能(接続時の SSRF ガードとホスト検証)を共有しています。
ツール
監査
| ツール | 機能 |
|---|---|
seo_audit ⭐ | 1 回の取得 → 7 つの加重セクション(メタデータ、見出し、コンテンツ、スキーマ、画像、リンク、クロール可能性) → 0~100 点のスコア、A~F の評価、優先順位付きの修正案を出力します。include_geo=true を指定すると GEO の評価も追加されます |
geo_audit ⭐ | AI 回答エンジンへの対応状況を評価します。クローラーのアクセス(25)、サーバー側でレンダリングされたコンテンツ(20)、構造化データ(15)、抽出可能な構造(15)、著者情報(10)、鮮度(8)、深さ(7) |
GEO
| ツール | 機能 |
|---|---|
ai_crawler_access | robots.txt に基づいて約 35 種類の AI クローラートークンを解決します。トレーニング用と引用用のボットを区別し、ベンダーが強制不能と明記しているブロックを警告し、Applebot から Googlebot へのフォールバックにも対応します |
render_check | JavaScript なしでもコンテンツが利用できるかを確認します。AI クローラーが読み取れない、ハイドレーション前の SPA シェルを検出します |
llms_txt_check | /llms.txt を検出し、llmstxt.org の提案に照らして検証します。また、可視性が高まると誤解させるのではなく、実際の普及状況を報告します |
ページ内
| ツール | 機能 |
|---|---|
meta_tags_check | title、description、canonical、robots(meta と X-Robots-Tag)、lang、charset、viewport |
social_preview_check | Open Graph と Twitter Card を確認し、og:image が実際に読み込めることも検証します |
heading_structure | h1~h6 の完全なアウトライン、h1 の複数使用、レベルの飛ばし、疑問形の見出し |
structured_data_check | JSON-LD/microdata/RDFa の抽出、解析エラー、21 種類のスキーマタイプに関する Google リッチリザルトの要件 |
content_analysis | 単語数、Flesch 読みやすさスコア、内容の薄いページの検出、テキストと HTML の比率、用語密度(EN + ES のストップワード) |
image_seo_check | alt テキストの欠落、寸法の欠落(レイアウトシフト)、遅延読み込み、WebP/AVIF の採用状況 |
技術面
| ツール | 機能 |
|---|---|
robots_txt_check | RFC 9309 に準拠した解析。ワイルドカードの Disallow: / と、Google がすべて拒否と解釈する 5xx 応答に警告を出します |
sitemap_check | robots.txt → 一般的なパスの順に検出。インデックスのたどり、gzip、50k/50MiB の制限、lastmod の有効性 |
canonical_host_check | http/https × apex/www の 4 種類すべてについて、1 つの正規 URL に集約されるか、また 301 と 302 のどちらを使っているかを確認します |
redirect_trace | ループと一時リダイレクトを検出する、リダイレクトごとのチェーン |
link_audit | 内部/外部リンクの分類、rel 属性、一般的なアンカーテキスト、オプションのリンク切れサンプリング |
hreflang_check | BCP-47 の有効性、自己参照、x-default、重複に加え、オプションで 相互参照 も検証します |
すべてのツールは 読み取り専用 で、outputSchema を宣言し、人が読みやすい Markdown(デフォルト)または JSON(response_format="json")に加えて、structuredContent(SDK により検証済み)を返します。また、実行可能なエラーメッセージも返します。
信頼性に関する注意点
このサーバーは、GEO 関連のコンテンツで誤解されがちな 2 つの点について、意図的に誇張した説明を避けています。どちらもここに埋もれさせず、ツールの出力に明示します。
llms.txtは採用された標準ではありません。 2024 年 9 月に提案されたコミュニティ案です。主要な AI ベンダーのうち、サードパーティーのサイトからクローラーがこれを読み取ると文書化しているところはなく、Google は公開の場で読み取らないと述べています。このツールは存在の有無を報告し、形式を検証しますが、geo_auditでは意図的に採点対象から除外しています。(llms-full.txtはドキュメントツールの慣習であり、提案の一部ではありません。)- robots.txt によるブロックには、強制力がないものもあります。
Perplexity-User、ChatGPT-User、meta-externalfetcherは、各ベンダー自身の説明によると、robots.txt を無視するか、無視する可能性があります。これらを明確に「ブロック済み」と報告すると誤解を招くため、強制できないものとして別途一覧表示します。
クローラートークンには、ベンダーの一次資料かコミュニティの集約情報かを区別する provenance フィールドがあります。また、トークンを一切公開していないベンダー(xAI/Grok、Microsoft Copilot)も明記します。ルールがないことを、許可またはブロックと解釈することはできないためです。
インストール
Node.js 20.18+ が必要です。クローンは不要です。すべての MCP クライアントから npx で実行できます。
Claude Code で使う
claude mcp add seo-geo -- npx -y seo-geo-mcp-server
Claude Desktop または Cursor で使う
claude_desktop_config.json(または ~/.cursor/mcp.json)に追加します。詳細は examples/ を参照してください。
{
"mcpServers": {
"seo-geo": {
"command": "npx",
"args": ["-y", "seo-geo-mcp-server"]
}
}
}
Windows では、"command": "cmd" と "args": ["/c", "npx", "-y", "seo-geo-mcp-server"] を使います。
クライアントを再起動してから、「example.com の SEO と GEO を監査して」と尋ねてください。
セルフホスト(HTTP トランスポート)
同じサーバーは、リモート利用または複数クライアントでの利用向けに、ステートレスなStreamable HTTPにも対応しています。1 つのエンドポイントで両方のプロトコル世代に対応し、セッション状態はなく、引き継ぐべきMcp-Session-Idもありません。
TRANSPORT=http npx -y seo-geo-mcp-server
# POST JSON-RPC to http://127.0.0.1:3000/mcp · health at /healthz
デフォルトで安全です。127.0.0.1にバインドし、localhostのHostおよびOriginヘッダーのみを受け付けるため、Web ページからの DNS リバインディング攻撃を防ぎます。Coolify や Traefik の背後などで公開するには、明示的にオプトインしてください。
| 変数 | デフォルト | 用途 |
|---|---|---|
TRANSPORT | stdio | Streamable HTTP を提供するにはhttpを指定 |
PORT | 3000 | リッスンするポート |
HOST | 127.0.0.1 | バインドアドレス。リモート接続を受け付けるには0.0.0.0を指定 |
ALLOWED_HOSTS | — | Hostヘッダーに指定できるホスト名(例:mcp.example.com)をカンマ区切りで指定 |
ALLOWED_ORIGINS | — | ブラウザーからの呼び出しを許可するオリジンをカンマ区切りで指定 |
MCP_AUTH_TOKEN | — | 設定すると、すべてのリクエストにAuthorization: Bearer <token>が必要 |
ALLOWED_HOSTSまたはMCP_AUTH_TOKENを設定せずにループバック以外のアドレスにバインドすることは可能ですが、その旨がサーバーから stderr に出力されます。Docker を使用する場合(イメージではHOST=0.0.0.0が設定されています):
docker build -t seo-geo-mcp .
docker run -p 3000:3000 -e ALLOWED_HOSTS=mcp.example.com -e MCP_AUTH_TOKEN=change-me seo-geo-mcp
開発
npm run dev # tsx watch (stdio)
npm test # deterministic unit tests: SSRF guard, robots matcher, nesting guard,
# gzip sitemaps, SPA detection, JSON-LD, HTTP transport defaults
npm run smoke # call all 17 tools over MCP, in BOTH protocol eras, and validate
# structuredContent vs outputSchema
npm run inspect # open the MCP Inspector against the built server
npm run build # type-check + emit dist/
evals/には、10 問の LLM 評価セット(安定して検証可能)と実行手順があります。詳しくはevals/README.mdをご覧ください。
仕組み
src/
├── index.ts # transport selection: serveStdio | createMcpHandler + Express
├── server.ts # the factory: registers every tool on one McpServer
├── schemas.ts # Zod 4 outputSchema for each tool
├── core/ # pure logic, no MCP coupling — reusable & testable
│ ├── validate.ts # host/URL validation and the address classifier
│ ├── netguard.ts # connect-time SSRF guard (every socket's address is checked)
│ ├── fetch.ts # fetch: guarded dispatcher, manual redirects, loop detection, byte caps
│ ├── page.ts # HTML loading + the shared parsed-document model
│ ├── meta.ts # title/description/canonical/robots, Open Graph, hreflang
│ ├── content.ts # headings, readability, word counts, image SEO
│ ├── structured-data.ts # JSON-LD/microdata + Google rich-result requirements
│ ├── robots.ts # RFC 9309 parser and rule matcher
│ ├── ai-crawlers.ts # the AI crawler registry (token, purpose, compliance, provenance)
│ ├── sitemap.ts # discovery, index following, gzip, protocol limits
│ ├── links.ts # link classification + broken-link sampling
│ ├── redirects.ts # chain tracing + host canonicalisation
│ ├── geo.ts # llms.txt, JS-rendering detection, GEO scoring
│ └── seo-audit.ts # the composite audits (one fetch, every analyser)
└── tools/ # thin MCP wrappers (Zod schemas, descriptions, formatting)
core/レイヤーには MCP の型を意図的に含めていないため、同じロジックをこのサーバーと Web UI の両方で利用できます。
セキュリティ
ツールは、呼び出し元が指定した URL と、監査対象のサイトが指定した URL(リンク、og:image、hreflang の代替 URL、サイトマップの子 URL、リダイレクト)の両方を取得するため、すべての送信接続に対してサーバー側リクエストフォージェリを防ぐチェックを行います。
- プライベート、ループバック、リンクローカル(クラウドメタデータ)、共有(CGNAT)、マルチキャスト、予約済みのアドレスは、IPv6 に埋め込まれた IPv4(
[::ffff:127.0.0.1])を含め、どの表記でも拒否されます。 - チェックは接続時に、ソケットが実際に使用しようとしているアドレスに対して実行されます。そのため、DNS リバインディングや、内部リゾルバーでしか認識できない名前も拒否されます。リダイレクトは手動で追跡され、各ホップがチェックされます。ループは報告されます。
- 信頼されていない入力には上限があります。HTML は 2 MB、ネストは 512 階層(ブラウザーが保持する量)、robots.txt の照合にはバックトラッキングなしのマッチャー、サイトマップは gzip の展開後も含めて 10 MiB、リンクチェックは同時に 6 件、結果内の各リストは最大 200 項目です。
問題を見つけましたか?非公開のセキュリティアドバイザリを作成してください。
ライセンス
MIT © Marco Orta
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。