Skip to main content
Glama

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

機能

fetch_sitemap

sitemap.xmlを取得し、サイトマップインデックスの入れ子(最大深度3)をたどり、宣言されたすべてのURLを重複排除して返します

audit_urls

URLを並行してクロールし、ページごとの問題を報告します:壊れたステータス、リダイレクトチェーン、<title>とメタディスクリプションの欠落・長すぎ、<h1>の欠落・重複、canonicalの欠落、noindex、薄いコンテンツ

sitemap_coverage

サイトマップを、存在すると分かっているURLのリストと差分比較 → サイトマップから欠落しているもの、宣言されているが無効なもの

check_redirects

リダイレクトチェーンを追跡し、マルチホップチェーンと4xx/5xxで終わるチェーンにフラグを立てます — URL構造の変更後に使用します

すべてのツールは、ページごとのissuesリストと集計されたissue_summaryを持つ構造化JSONを返すため、モデルは生のHTMLを読み直す代わりに件数を基に推論できます。


インストール

pip install -e .

Python 3.10+が必要です。依存関係:mcp>=2.0.0httpx

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_onehttpx.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

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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