mcpField
S
seo-orchestrator

seo-orchestrator

github.com/hainrixzマーケティング・グロース79203 回インストール4 日前に更新
リポジトリ

seo-orchestrator について

seo-orchestratorは、決定論的なデータ収集から専門エージェントによる確認、レポート統合まで、複数段階のSEO監査を調整します。監査の実行と集約に使われ、プロジェクトのファイルは変更せず、成果物はプラグインのデータディレクトリに保存します。

主な機能

  1. 01決定論的な監査パイプラインの実行
  2. 02プラットフォームと環境の把握
  3. 034つの専門エージェントへの振り分け
  4. 04監査結果の統合とスコアリング
  5. 05JSONとMarkdownレポートの生成
  6. 06プロジェクト外への監査成果物保存

活用シーン

  1. 01複数ページのSEO監査
  2. 02決定論的チェックと専門エージェントの結果統合
  3. 03サイトのスコア付きレポート生成
  4. 04クロール範囲とサンプリングページの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hainrixz/claude-seo-ai --skill seo-orchestrator

インストール後、Claude Code で/seo-orchestratorを入力して読み込まれたか確認します。

詳細

seo-orchestrator(レイヤー 2)

検出 → ディスパッチ → 統合の 3 段階で監査全体を調整します。スクリプトが情報取得を担い、モデルは判定のみを行います。簡潔な標準出力の概要と、そこで名前が示されている JSON ファイルだけを読み取ってください。HTML を会話に貼り付けないでください。ユーザーのプロジェクトには何も書き込まれません。すべての成果物は ${CLAUDE_PLUGIN_DATA}/runs/<host>/<run-id>/ の下に保存されます。

1. 検出 — 1 回の呼び出し

  1. コマンドから引き継いだ対象とフラグ(--pages、--max、--render、--ua、--vertical、--environment、--feed、--out。--out のデフォルトは "${CLAUDE_PLUGIN_DATA}/runs")を解決します。
  2. 決定論的なパイプライン全体を1 つのコマンドで実行します。audit.mjs は対象を取得し(URL の場合は crawl.mjs、--pages 1 またはローカルパスの場合は snapshot.mjs を呼び出し、run ディレクトリが渡された場合は取得処理を完全にスキップします)、profile.json(platform / framework / cms plugins / hosting / environment / capabilities / write_targets / vertical_hints と、vertical の推定結果)を書き込み、チェックレジストリを実行し、report.mjs を呼び出して決定論的チェックのみの初回レポートを作成します。
node "${CLAUDE_PLUGIN_ROOT}/scripts/audit.mjs" <url|path> \
  --out "${CLAUDE_PLUGIN_DATA}/runs" --checks deterministic --format json \
  [--pages N] [--max N] [--render static|auto|js] [--ua <preset>] \
  [--vertical <ids>] [--environment production|preview|staging|local] [--feed <path>]

出力される JSON の概要のみを読み取ります。run_dir、mode、platform、vertical、coverage、tier、scores、findings、checks、report_json、report_md、findings_json、warnings が含まれます。ここでは --render のデフォルトはstaticです。対象がクライアント側でレンダリングされるように見える場合は、--render auto を渡してください。終了コード 2 は対象を取得できなかったことを示します。終了コード 3 は --fail-under / --fail-on-* のゲートに抵触したことのみを示し、監査の失敗ではなく CI の問題です。 3. <run_dir>/crawl.json(slug/url/role を含むページ、テンプレート、サンプリング、警告)と <run_dir>/profile.json を読み取ります。 4. Vertical:ホームページの parsed(<run_dir>/pages/<homepage-slug>.json)と profile.vertical_hints を使って seo-vertical-detect を実行します。スクリプトが行うのは推定のみです。--vertical が渡されていない場合、profile.vertical.source は "inferred" です。読み取り結果によって vertical を追加または変更する場合は、同じ run に対して決定論的処理を再実行してください(再クロールは不要です)。これにより、条件付きチェックが実際に実行されます。

node "${CLAUDE_PLUGIN_ROOT}/scripts/audit.mjs" <run_dir> --checks deterministic --format json --vertical <ids>

references/routing.md では、vertical と条件付きモジュール(M18 e-commerce、M19 local、multilingual の場合の M20 hreflang)の対応を定義しています。 5. run には <run_dir>/findings.deterministic.json(エージェントが再出力してはならない決定論的な findings)と <run_dir>/checks.json(実行したチェック、エラー、needs_api、manual_review、dropped)が保存されています。

2. ディスパッチ(並列 — 1 メッセージ、4 回の Agent 呼び出し)

読み取り専用の専門エージェント 4 つを1 つのメッセージで起動し、詳細な中間出力が分離されるようにします。各プロンプトはエンベロープブロックと、そのエージェントのモジュール一覧で構成します。エージェントは ${…} による置換を想定しません。絶対パスを渡してください。

ENVELOPE
plugin_root: <absolute ${CLAUDE_PLUGIN_ROOT}>
run_dir: <absolute run dir>
pages: [{slug, url, role}, …]              # <run_dir>/pages/<slug>.json (+ <slug>.html, + <slug>.rendered.html when rendered)
site: robots=<run_dir>/site/robots.json  sitemaps=<run_dir>/site/sitemaps.json  discovery=<run_dir>/site/discovery.json
vertical: {primary: <v>, also: [<v>…], multilingual: <bool>}
platform: <run_dir>/profile.json           # one line: <platform>/<framework>, env=<kind>, head_owner=<…>
platform_cards: [<plugin_root>/references/platforms/<id>.md, …]   # omit when the platform is unknown
modules: [<M-ids for this agent>]
deterministic_findings: <run_dir>/findings.deterministic.json — do not re-emit these ids; add model-judged findings only
return: JSON array only — findings per schema/finding.schema.json, no prose
AgentModules
technical-auditorM1、M2(+M3)、M4、M7、M7b(モバイル)、M7c(見出し)、M8、M9、M10、M15、M17 — vertical.multilingual の場合は M20(hreflang)も追加
ai-search-geo-specialistM6、M11、M12、M14、M21(AI discovery & agent endpoints、重み 0)、M22(agent-readiness)
content-eeat-analystM13、M16
schema-generatorM5 — vertical に ecommerce が含まれる場合は M18、local-business が含まれる場合は M19

サブエージェントには Write/Edit の権限がありません。監査によってファイルが変更されることはありません。エージェントが配列の前後に文章を返した場合は、配列のみを残してください。

3. 統合

  1. 返された各配列を、Bash のヒアドキュメント(mkdir -p "<run_dir>/agents" && cat > "<run_dir>/agents/<agent>.json" <<'EOF' … EOF)を使って、<run_dir>/agents/<agent>.json にそのまま保存します。保存先はプラグインのデータディレクトリであり、プロジェクト内ではありません。これは node のパターン以外で使う唯一の Bash 呼び出しです。allowed-tools の mkdir -p / cat > エントリにより、${CLAUDE_PLUGIN_DATA}/runs/ 以下のパスは事前に許可されます(スモークテストで要確認:;、|、&& を含むヒアドキュメントの本文で、確認が求められる場合があります)。
  2. node "${CLAUDE_PLUGIN_ROOT}/scripts/report.mjs" <run_dir> --merge "agents/*.json" --lang <en|es> [--vertical <ids>] [--environment <kind>] [--out-md <path>] — findings.deterministic.json を再読み込みし、エージェントの配列を統合します(id + 正規化された位置で重複を除外し、最も重大度の高いものを採用します。needs_api / manual_review がスコア付きのステータスを上書きすることはありません)。スキーマに無効な指摘は report.dropped_findings に移し、ページごとおよびサイト全体でスコアを算出して、findings.json、report.json、report.md を書き換えます。ステップ 1 で使ったものと同じ --vertical / --environment を渡します。--merge は複数回指定でき、ファイル、ディレクトリ、またはファイル名部分に限った * / ? グロブを受け付けます。
  3. report.json の内容を提示します(references/scoring-model.md に基づく評価帯と解釈)。
    • 検索 SEO と AI の可視性 — 評価帯 + スコア + 1 行の解釈を、それぞれ個別に提示します。各項目のカテゴリ別テーブル(値、重み、有効かどうか)も提示します。
    • カバレッジ:coverage.mode(full または deterministic)、到達したティア、needs_api / manual_review の件数。
    • crawl.json のサンプリングテーブル:検出されたテンプレートとサンプリングされたテンプレートの数、ロール別ページ数、すべてのスキップとその理由。
    • プラットフォームのプロファイル行(プラットフォーム/フレームワーク/プラグイン、環境、非本番環境の場合は「プレビュー環境で想定される」旨の注記)。
    • 影響度 ÷ 工数の順に並べた主なアクション:ステータス、根拠、推奨事項、修正可能性(自動/提案/助言)、expected_impact。
    • report.md の絶対パス。その後、変更後に /claude-seo-ai:fix <target>(安全な AUTO 修正を変更ごとに確認)と /claude-seo-ai:compare --baseline latest --against <target> を実行する方法を案内します。

機能縮退モード

node が見つからない場合、またはスキルのみのインストールに scripts/ ディレクトリが含まれていない場合は、まずその旨を伝えます。代わりに WebFetch の要約のみを使い、ヘッダー/ステータス/レンダリング/robots に依存する指摘はすべて needs_api としてマークし、永続化はスキップします。レポートに 「プロンプトのみのモード — スクリプト実行による実行とは比較できません」 と明記します。WebFetch の要約を、生の HTML や実測されたステータス/ヘッダーとして提示してはいけません。

コメント