compare について
compare は、SEO 監査結果、URL、ステージング環境と本番環境、競合サイトを比較する Claude SEO スキルです。構造的なコンテンツギャップ表も作成でき、成果物はユーザープロジェクト外に保存します。
主な機能
- 01ベースライン、ステージング、競合の比較
- 02検索結果を基にしたギャップ表の作成
- 03スコア、カテゴリ、ページ範囲の変化を報告
- 04プラグインデータ領域への成果物保存
活用シーン
- 01ステージング環境と本番環境の比較
- 02前回監査からの変化の確認
- 03複数の競合サイトとの比較
- 04検索結果に対してページに不足するトピックの特定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill compareインストール後、Claude Code で/compareを入力して読み込まれたか確認します。
詳細
/claude-seo-ai:compare
4種類の比較を1つのスクリプトで実行します。読み取り専用です。すべて ${CLAUDE_PLUGIN_DATA}/runs の下に書き込まれます(比較結果は <root>/compare/<a>__<b>/compare.json に保存されます)。ユーザーのプロジェクトには書き込みません。
$ARGUMENTS によって実行内容が決まります。
| ユーザーが指定した内容 | 実行するコマンド |
|---|---|
| 2つのURL/実行参照 | compare.mjs <refA> <refB> — 同じホストはベースライン、ステージングらしいホストはステージング、2つのサイトは競合サイトです |
| 3~5個の参照 | compare.mjs <refA> <refB> <refC> … — 競合サイトのマトリクス(最大5件) |
| 「前回の監査以降」 | compare.mjs --baseline latest --against <url|run> |
| ステージングと本番環境 | compare.mjs --prod <ref> --staging <ref>(ホスト同士の関連性が見た目でわからない場合は、--map staging.example.com=example.com を追加します) |
| 「X で上位表示されているページにはあって、自分にはないものは何か」 | 以下のコンテンツギャップのフロー |
<ref> は、実行ディレクトリ、report.json、latest[:<host>]、baseline[:<host>]、または URL です。
フロー A — ベースライン、ステージング、競合サイト
- それぞれの対象の実行結果を取得します。 参照がすでに実行結果(
latest、latest:example.com、パス)であれば、何もする必要はありません。実行結果のない URL の場合は、まず監査を実行し、ユーザーが取得内容を確認して、ページの追加を依頼できるようにします。node "${CLAUDE_PLUGIN_ROOT}/scripts/audit.mjs" <url> --pages 3 --checks deterministic --render static --out "${CLAUDE_PLUGIN_DATA}/runs"(これを省略した場合、compare.mjsが同じ設定で URL を監査します。) - 比較します。
node "${CLAUDE_PLUGIN_ROOT}/scripts/compare.mjs" --baseline <refA> --against <refB> --out "${CLAUDE_PLUGIN_DATA}/runs"便利なフラグ:--mode auto|baseline|staging|competitor|gap·--map <from-host>=<to-host>(繰り返し指定可能) ·--no-host-normalize(www.と未加工のホストを維持) ·--format md(compare.mdも書き込みます) ·--data(ドキュメント全体を出力) ·--fail-on-regression(終了コード 3) ·--set-baseline(新しいほうの実行結果をベースラインに設定)。 compare.jsonを読み取り(stdout の概要にパスが記載されています)、次の順に提示します。- 判定 —
improved/regressed/mixed/unchangedと、2つのスコア差およびその評価区分を示します。2つの軸を決して混同しないでください。 - 変化したカテゴリを、変化の大きい順に示します。片方で無効だったカテゴリの
deltaはnullです。「0」ではなく、「 では測定されていません」と伝えてください。 - 検出結果:まず
regressedとnew(問題が発生した項目です)、次にfixedとimproved、最後にunchangedの件数を示します。それぞれのステータスのfrom → toと場所を引用してください。 - カバレッジの変化は独立したリストにまとめ、これらは結果ではないことを添えます。
needs_api/manual_reviewの遷移や、もう一方の実行で一度も確認されていない場所は、2つの実行で異なる内容を測定したことを示しています。 - 構造上のギャップ(
gaps):スキーマの種類、エージェント関連/検出用エンドポイント、AI クローラーの設定、見出しとトピックの重複、回答ブロック、エンティティリンク、単語数、レンダリングモード、hreflang。gaps.availableが false の場合、ゼロを表示するのではなく、ページスナップショットがなかった側を伝えてください。 - 変化したページを正規化されたパスで示し、
only_a/only_bのパスも示します。行にcoverage_change: trueがあるページはスコアではなくカバレッジが変化しています。たとえば、2回目の実行で 429 や 404 になったなど、2つの実行のうち一方ではスコアが付けられていません。これらはpage_coverage.changesから独立したリストとして読み取ってください。 - ページカバレッジ(
page_coverage):same_pagesが false の場合、2つの集計では異なるページセットの平均が使われており、軸の差は判定に含まれません。その旨の警告が表示されます。軸の変化をサイト自体の変化として提示せず、その点を明確に伝えてください。 - 競合サイトモードでは検出結果の差分はありません(
findings: null)。スコア/カテゴリの表、該当状況のマトリクス、「対象サイトとセット内の最良サイト」のギャップを示し、あるサイトでの検出結果が別のサイトでも同じ事実を示すわけではない理由を説明してください。
- 判定 —
- 次のステップを提案します:
--set-baselineで今回の実行結果を今後の比較の基準に設定する、問題が悪化した項目には/claude-seo-ai:fix <target>を使う、CI では--fail-on-regressionを使用する。
フロー B — コンテンツの不足
- 比較対象を見つけます。 クエリを
WebSearchで検索し、対象ページと同じホスト上にない上位3~5件のオーガニック検索結果のURLを選びます。集約サイト、マーケットプレイス、ユーザーが目指している種類のページではないリスト記事は除外し、除外したURLとその理由をユーザーに伝えます。比較対象のセット全体がこの手法の根幹なので、明示する必要があります。 - 各ページのスナップショットを作成します(監査は不要です。不足分のマトリックスは構造を比較するものです)。
node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <url> --run gap-<slug> --render static --out "${CLAUDE_PLUGIN_DATA}/runs"対象ページについても、すでに実行結果がある場合(latest:<host>)を除き、同じ手順を行います。 - マトリックスを作成します。
node "${CLAUDE_PLUGIN_ROOT}/scripts/compare.mjs" --mode gap --subject <ref> --set <ref,ref,ref> --query "<the query>" --out "${CLAUDE_PLUGIN_DATA}/runs" - 先にマトリックスを示し、その後に説明を加えます。 次の項目を、決定論的な行として示します。比較対象ページのうち少なくとも2ページにあり、対象ページにはない見出しのトピック、スキーマの種類、頭文字が大文字の語(固有名詞の代用指標であり、抽出されたエンティティではありません)、エージェント関連/発見用エンドポイント、単語数、100語あたりの実質的な数値、疑問形の見出しとそのうち直接的な回答を含むものの数です。各行には、その項目を裏付けるページ数を示します。次に、比較対象のセットが必須事項として扱っている内容や、対象ページに追加できる内容について定性的に読み解き、すべての項目に方向性を示すものと明記します。
- 不足項目のリストをアウトラインまたは
/claude-seo-ai:fixのプランにまとめることを提案します。ここからユーザーのプロジェクトに書き込んではいけません。
誠実さについて
- 比較は2つの測定結果であり、順位付けではありません。 スコアはクロールされたページの構造を示します。スコアが高くても、あるサイトが別のサイトより上位に表示されるという予測にはなりません。
WebSearchは、ある時点における1つの検索エンジンの結果です。 比較対象のセットは1つの検索結果ページのスナップショットであり、順位追跡でも、何らかの対象から抽出したサンプルでもありません。不足分のマトリックスを提示する際は必ずその旨を伝え、ユーザーから「では、この順位になるの?」と聞かれた場合は改めて説明します。- 測定されていない項目を合格として扱ってはいけません。
needs_apiとmanual_reviewへの遷移はcoverage_changesに記録され、仕様上、fixed/regressedから除外されます。そのように提示し、もう一方の実行では訪問していないページを修正済みと説明してはいけません。2xxを返さなくなったページも同じ種類のイベントです。ロールアップから除外され、page_coverageに記録されるため、スコアの改善として報告してはいけません。 - カバレッジを明示します。 いずれかの側で
coverageがdeterministicの場合、モデルによる判定が必要なモジュールは評価されていないと伝えます。coverage_warningが設定されている場合は、その内容を読み上げます。暫定バンド(state: "partial")は、同じ文の中でカバレッジの割合とともに報告します。 - 方向性はあくまで方向性として示します。 不足分の各行はページ間の構造上の違いを示すものであり、確信度は「方向性を示すもの」です。「これで順位が上がる」と断定してはいけません。
- ユーザーの言語(EN/ES)で回答します。ここで行う処理によってユーザーのプロジェクトに書き込まれることはありません。実行時の成果物と比較結果は
${CLAUDE_PLUGIN_DATA}に保存されます。
コメント
Markdown 対応