mcpField
S
SEO & GEO

SEO & GEO

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

SEO & GEO について

SEO & GEO は、AI エージェント向けにページの SEO、構造化データ、クローラーのアクセス、AI 回答エンジンでの引用準備状況を監査する MCP サーバーです。従来のページ要素と GEO を評価し、スコアと優先修正項目を返します。API キーは不要です。

主な機能

  1. 01SEO と GEO のページ監査
  2. 02AI クローラー向け robots.txt の確認
  3. 03JavaScript なしでのコンテンツ閲覧可否の検出
  4. 04メタタグ、見出し、構造化データ、本文の分析
  5. 05サイトマップ、リンク、hreflang の確認

活用シーン

  1. 01AI 回答エンジンによるページのクロールと引用可否の評価
  2. 02検索インデックスを妨げるページ問題の特定
  3. 03多言語ページの hreflang 設定の確認

MCP 対応

MCP サーバーとして、読み取り専用の SEO・GEO 監査ツールを MCP クライアントに提供し、構造化データ、スコア、修正案を返します。stdio とステートレスな Streamable HTTP に対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ortamarco-seo-geo": {
"command": "npx",
"args": [
"-y",
"seo-geo-mcp-server"
]
}
}
}
起動コマンドnpx -y seo-geo-mcp-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmseo-geo-mcp-server1.2.2

ツール

17

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい分析するページ URL。例:'https://example.com/blog/post'。スキームの既定値は https:// です。
include_geobooleanいいえGEO(AI 回答エンジン)への対応度も評価します。リクエストが約 2 回追加されます。
response_formatenumいいえ出力形式:人が読みやすい要約には 'markdown'(デフォルト)、完全な構造化データには 'json' を指定します。markdown | json
check_broken_linksbooleanいいえ最大 25 個のリンクをサンプル確認し、アクセス可能か検証します。時間はかかりますが、リンク切れを検出できます。

詳細

seo-geo-mcp-server

AI エージェントがページの SEO と GEO(生成エンジン最適化)を監査できる MCP サーバーです。オンページタグ、構造化データ、robots.txt、サイトマップ、hreflang に加え、ChatGPT、Claude、Perplexity、Gemini が実際にクロールして引用できるかを確認します。API キーは不要です。

ci npm MCP TypeScript License: MIT

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_accessrobots.txt に基づいて約 35 種類の AI クローラートークンを解決します。トレーニング用と引用用のボットを区別し、ベンダーが強制不能と明記しているブロックを警告し、Applebot から Googlebot へのフォールバックにも対応します
render_checkJavaScript なしでもコンテンツが利用できるかを確認します。AI クローラーが読み取れない、ハイドレーション前の SPA シェルを検出します
llms_txt_check/llms.txt を検出し、llmstxt.org の提案に照らして検証します。また、可視性が高まると誤解させるのではなく、実際の普及状況を報告します
ページ内
ツール機能
meta_tags_checktitle、description、canonical、robots(meta と X-Robots-Tag)、lang、charset、viewport
social_preview_checkOpen Graph と Twitter Card を確認し、og:image が実際に読み込めることも検証します
heading_structureh1~h6 の完全なアウトライン、h1 の複数使用、レベルの飛ばし、疑問形の見出し
structured_data_checkJSON-LD/microdata/RDFa の抽出、解析エラー、21 種類のスキーマタイプに関する Google リッチリザルトの要件
content_analysis単語数、Flesch 読みやすさスコア、内容の薄いページの検出、テキストと HTML の比率、用語密度(EN + ES のストップワード)
image_seo_checkalt テキストの欠落、寸法の欠落(レイアウトシフト)、遅延読み込み、WebP/AVIF の採用状況
技術面
ツール機能
robots_txt_checkRFC 9309 に準拠した解析。ワイルドカードの Disallow: / と、Google がすべて拒否と解釈する 5xx 応答に警告を出します
sitemap_checkrobots.txt → 一般的なパスの順に検出。インデックスのたどり、gzip、50k/50MiB の制限、lastmod の有効性
canonical_host_checkhttp/https × apex/www の 4 種類すべてについて、1 つの正規 URL に集約されるか、また 301 と 302 のどちらを使っているかを確認します
redirect_traceループと一時リダイレクトを検出する、リダイレクトごとのチェーン
link_audit内部/外部リンクの分類、rel 属性、一般的なアンカーテキスト、オプションのリンク切れサンプリング
hreflang_checkBCP-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 の背後などで公開するには、明示的にオプトインしてください。

変数デフォルト用途
TRANSPORTstdioStreamable HTTP を提供するにはhttpを指定
PORT3000リッスンするポート
HOST127.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

コメント

MCP は初めてですか?

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

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