seo-audit-mcp
seo-audit-mcp
Claude(または任意のMCPクライアント)に、ライブサイトの技術的SEO監査(サイトマップのカバレッジ、ページごとの問題、リダイレクトチェーン)の能力を提供するMCPサーバーです。
平易な言葉で質問すると — "mortgagecalculatortools.comを監査して、Googleに伝えられていないページを教えて" — モデルがツールを呼び出し、サイトをクロールし、具体的な答えを返します。
解決する問題
サイトのsitemap.xmlは、どのページが存在するかをGoogleに伝える方法です。ページがそこにない場合、エラーも警告も発生しません — そのページは単にインプレッションが蓄積されることがありません。手動で確認するには、ファイルシステムの一覧をXMLファイルと差分比較する必要があるため、実際には誰も行いません。
ケーススタディ:正しいと判明した25ページのギャップ
このツールを最初に適用したサイトでは、ディスク上に125個のHTMLファイルがあり、サイトマップには100個のURLがありました。25ページのギャップ — バグとして報告され、誰かに割り当てられる類の発見です。
sitemap_coverageの1回の呼び出しでギャップが浮かび上がり、サンプルに対するaudit_urlsの1回の呼び出しで説明がつきました:25ページすべてが<meta name="robots" content="noindex, follow">を保持していました。それらは意図的にインデックスから除外された2つのコンテンツクラスターであり、サイトマップがそれらを除外するのはまったく正しいことでした。その後ファイルシステムと照合:ディスク上に25のnoindexページがあり、同じ25ページがサイトマップに存在せず、noindexページが誤って含まれることはゼロでした。完璧な整合性です。
それが有用な結果です。カバレッジの数値だけ("125 vs 100")は欠陥と読まれ、誰かの1日分の時間を費やします。カバレッジにページごとのnoindexステータスを組み合わせれば、質問は1分で解決します。このツールは、見つける実際のギャップと同じくらい、排除する誤報にも価値があります — そのためaudit_urlsはURLを数えるだけでなく、ページごとにnoindexを報告します。
ツール
Tool | 機能 |
|
|
| URLを並行してクロールし、ページごとの問題を報告します:壊れたステータス、リダイレクトチェーン、 |
| サイトマップを、存在すると分かっているURLのリストと差分比較 → サイトマップから欠落しているもの、宣言されているが無効なもの |
| リダイレクトチェーンを追跡し、マルチホップチェーンと4xx/5xxで終わるチェーンにフラグを立てます — URL構造の変更後に使用します |
すべてのツールは、ページごとのissuesリストと集計されたissue_summaryを持つ構造化JSONを返すため、モデルは生のHTMLを読み直す代わりに件数を基に推論できます。
インストール
pip install -e .Python 3.10+が必要です。依存関係:mcp>=2.0.0、httpx。
Claude Codeに接続する
プロジェクトの.mcp.jsonに追加します(またはグローバルに使用する場合は~/.claude.json):
{
"mcpServers": {
"seo-audit": {
"command": "python",
"args": ["-m", "seo_audit_mcp"]
}
}
}Claude Desktopでは、同じブロックをclaude_desktop_config.jsonに置きます。
あとは質問するだけです:
https://example.com/sitemap.xmlのサイトマップを取得し、最初の20 URLを監査し、問題を頻度別に要約してください。
直接実行する
python -m seo_audit_mcp # stdio transport設計ノート
デモと、クライアントの本番サイトに向けられるものとの違いを生む、特筆すべき3つの決定事項があります:
クロールは設計上レート制限されています。 fetch_manyは16の同時リクエストに制限されたasyncio.Semaphoreの背後で実行され、すべてのツールが入力を制限します。その上限がないと、500 URLのサイトマップは同時に500のソケットを開き、対象ホストへの攻撃とみなされるでしょう。クロールは対象サイトが負担するコストであるため、上限はツール面から引き上げることはできません。
取得失敗によって実行が中止されることはありません。 fetch_oneはhttpx.HTTPErrorを捕捉し、例外を発生させる代わりに返されたPageAuditに記録します。200 URLのクロールでの1つの死んだホストは、199の良い結果を失う代わりに1行を劣化させるだけです。
解析は意図的に寛容です。 実際のHTMLは不正な形式であることが多いため、厳格なパーサーがクロール中に例外を発生させるのは危険です。抽出器はNoneを返す寛容な正規表現で、例外は投げません — ただし罠は処理されます:<script>と<style>の本文は、単語数と見出し抽出の前に除去されるため、JS文字列リテラル内の<h1>は見出しとして数えられず、相対canonicalはページURLに対して解決されます。
normalize_urlは意図的に末尾のスラッシュを除去しません:/aと/a/は実際に異なるページになり得るため、それらをまとめると、このツールが表面化するために存在する重複コンテンツの問題が隠れてしまいます。
テスト
pip install -e ".[dev]"
pytestこのスイートはネットワーク不要です — HTTPはhttpx.MockTransportを通じて実行されるため、CIでも飛行機内でも動作します。本番で問題になる解析のエッジケースをカバーしています:スクリプトに埋め込まれた見出し、名前空間のないサイトマップ、相対canonical、200ステータスでスタイル付きHTML 404を返すサイトマップURL、非HTMLコンテンツタイプが「タイトルがない」ページとして誤って報告されるケース。
ライセンス
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Technical SEO + GEO (AI-search) site audits: hosted crawls, prioritized fixes, report diffs.
Professional SEO auditing: 15 tools, 9 checks, CWV, E-E-A-T, schema, GEO. Free tier.
SEO research, audits, backlinks, GSC, and content workflow tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/huanmxwp-crypto/seo-audit-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server