seo-orchestrator について
seo-orchestratorは、決定論的なデータ収集から専門エージェントによる確認、レポート統合まで、複数段階のSEO監査を調整します。監査の実行と集約に使われ、プロジェクトのファイルは変更せず、成果物はプラグインのデータディレクトリに保存します。
主な機能
- 01決定論的な監査パイプラインの実行
- 02プラットフォームと環境の把握
- 034つの専門エージェントへの振り分け
- 04監査結果の統合とスコアリング
- 05JSONとMarkdownレポートの生成
- 06プロジェクト外への監査成果物保存
活用シーン
- 01複数ページのSEO監査
- 02決定論的チェックと専門エージェントの結果統合
- 03サイトのスコア付きレポート生成
- 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 回の呼び出し
- コマンドから引き継いだ対象とフラグ(
--pages、--max、--render、--ua、--vertical、--environment、--feed、--out。--outのデフォルトは"${CLAUDE_PLUGIN_DATA}/runs")を解決します。 - 決定論的なパイプライン全体を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
| Agent | Modules |
|---|---|
technical-auditor | M1、M2(+M3)、M4、M7、M7b(モバイル)、M7c(見出し)、M8、M9、M10、M15、M17 — vertical.multilingual の場合は M20(hreflang)も追加 |
ai-search-geo-specialist | M6、M11、M12、M14、M21(AI discovery & agent endpoints、重み 0)、M22(agent-readiness) |
content-eeat-analyst | M13、M16 |
schema-generator | M5 — vertical に ecommerce が含まれる場合は M18、local-business が含まれる場合は M19 |
サブエージェントには Write/Edit の権限がありません。監査によってファイルが変更されることはありません。エージェントが配列の前後に文章を返した場合は、配列のみを残してください。
3. 統合
- 返された各配列を、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/以下のパスは事前に許可されます(スモークテストで要確認:;、|、&&を含むヒアドキュメントの本文で、確認が求められる場合があります)。 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は複数回指定でき、ファイル、ディレクトリ、またはファイル名部分に限った*/?グロブを受け付けます。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 や実測されたステータス/ヘッダーとして提示してはいけません。