mcpField
G
growth-report

growth-report

github.com/infrasity-labsマーケティング・グロース150133 回インストール17 週間前に更新
リポジトリ

growth-report について

ライブの DataForSEO データを使い、3か月分の SEO パフォーマンスをまとめた HTML レポートを生成するスキルです。指定した期間と国について、ドメインと競合を分析するマーケティングチーム向けです。

主な機能

  1. 01自然検索トラフィックとキーワード順位の変化を集計
  2. 02対象ドメインと競合の実績を比較
  3. 03競合の過去のトラフィック傾向を追跡
  4. 04流入の多いコンテンツページを特定
  5. 05戦略優先カードとエグゼクティブサマリーを作成
  6. 06Infrasity のブランドデザインで HTML を出力

活用シーン

  1. 01四半期の SEO パフォーマンスレビュー作成
  2. 02複数の競合とサイトの検索実績を比較
  3. 03トラフィック変化とコンテンツ拡充の機会を特定

インストール

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

$npx skills add https://github.com/infrasity-labs/dev-gtm-claude-skills --skill growth-report

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

同梱ファイルREADME.mdreferences/html-template.md

詳細

SEO パフォーマンスレポートスキル

DataForSEO のライブデータを使用して、3 か月分の包括的な SEO パフォーマンス HTML レポートを生成します。 レポートでは、トラフィックの推移、キーワードランキング、主要なコンテンツクラスター、競合他社との位置づけ、 戦略的な優先事項、エグゼクティブサマリーを、すべて Infrasity のブランドデザインシステムに沿って取り上げます。


STEP 0 — 何よりも先に、すべての入力を収集する

4 つの入力はすべて必須です。 4 つすべてが確認できるまで、API を呼び出してはいけません。

次の正確な形式を使い、1 回のメッセージでまとめて質問してください。1 つずつ質問せず、 必要な情報を一度にすべて尋ねてください。


ユーザーが 4 つの入力をすべて提供していない場合は、次のように尋ねます。

レポートの生成には、次の 4 つの情報が必要です。

  1. 対象ドメイン — レポート対象のサイト。例:firefly.ai
  2. 競合ドメイン — 最大 5~6 社。例:spacelift.io, env0.com, terraform.io
  3. 日付範囲 — 3 か月間の開始日と終了日(デフォルト:2026 年 2 月 20 日 → 5 月 20 日)
  4. 地域 — 検索データの国(デフォルト:United States)

デフォルトから変更したい項目はありますか?


ユーザーが対象ドメインと競合他社をすでに提供している場合(例:「firefly.ai と spacelift.io, env0.com の SEO レポートを生成」)は、任意の 2 つの入力を確認します。

承知しました。firefly.ai と spacelift.io, env0.com のレポートを生成します。

デフォルトの設定を確認します。

  • 日付範囲: 2026 年 2 月 20 日 → 2026 年 5 月 20 日
  • 地域: United States

このまま進めてよろしいですか? 変更したい項目はありますか?


入力の解析ルール:

入力ルール
TARGET_DOMAINhttps://、http://、www.、末尾のスラッシュを削除します。ドメイン部分のみを保存します(例:firefly.ai)。
COMPETITORS各ドメインから同じプレフィックスを削除します。カンマ区切りまたはスペース区切りのリストを受け付けます。競合他社は最低 2 社、最大 6 社です。
START_DATE人が読み取れる任意の日付形式を解析して → YYYY-MM-DD にします。デフォルト:2026-02-20
END_DATE人が読み取れる任意の日付形式を解析して → YYYY-MM-DD にします。デフォルト:2026-05-20
LOCATION国名を受け付けます。デフォルト:United States。有効な DataForSEO の location_name である必要があります(国名全体のみ。都市名や地域名は不可)。

確認後、処理を続ける前に、確定した入力を明確にユーザーへ提示します。

✓ 対象: firefly.ai ✓ 競合他社: spacelift.io, env0.com, controlmonkey.io, scalr.com, terraform.io ✓ 日付範囲: 2026 年 2 月 20 日 → 2026 年 5 月 20 日 ✓ 地域: United States

データを取得しています...


CRITICAL API SETTINGS

DataForSEO のすべての呼び出しで、必ず ignore_synonyms: false を使用してください。 デフォルトの ignore_synonyms: true を使うと、トラフィックとキーワード数が 30~50%過少に計上されます。 これは最も重要なパラメーターです。決して省略しないでください。


STEP 1 — ベースライン指標

dataforseo_labs_google_historical_rank_overview を次の内容で呼び出します。

target:          TARGET_DOMAIN
location_name:   LOCATION
language_code:   en
ignore_synonyms: false

返された月次配列から、START_DATE に最も近いスナップショットを見つけます(年と月で照合)。 次の値を抽出して保存します。

  • baseline_traffic = metrics.organic.etv
  • baseline_keywords = metrics.organic.count
  • baseline_top3 = metrics.organic.pos_1 + metrics.organic.pos_2_3

⚠️ DataForSEO に pos_1_3 フィールドはありません。Top 3 は必ず pos_1 + pos_2_3 で計算してください。

レポートのトラフィック推移バーに使用するため、START_DATE から END_DATE までのすべての月次スナップショットも抽出します (通常は 3~4 個のデータポイントです)。

  • 各スナップショットについて、month_label(例:「2026 年 2 月」)、etv、year、month を保存します。
  • 日付の昇順に並べ替えます。
  • これらを HTML テンプレート内の TREND_LABEL_1..4、TREND_ETV_1..4 に設定します。

STEP 2 — 現在の指標

dataforseo_labs_google_domain_rank_overview を次の内容で呼び出します:

target:          TARGET_DOMAIN
location_name:   LOCATION
language_code:   en
ignore_synonyms: false

metrics.organic から次の値を抽出します:

  • current_traffic = etv
  • current_keywords = count
  • current_top3 = pos_1 + pos_2_3
  • current_pos_1 = pos_1
  • current_pos_2_3 = pos_2_3
  • current_pos_4_10 = pos_4_10
  • current_pos_11_20 = pos_11_20
  • current_pos_21_100 = pos_21_30 + pos_31_40 + pos_41_50 + pos_51_60 + pos_61_70 + pos_71_80 + pos_81_90 + pos_91_100 の合計

すべての差分を計算します:

traffic_growth_pct  = ((current_traffic - baseline_traffic) / baseline_traffic) * 100
keywords_change     = current_keywords - baseline_keywords
keywords_change_pct = (keywords_change / baseline_keywords) * 100
top3_growth_pct     = ((current_top3 - baseline_top3) / baseline_top3) * 100

書式ルール:

  • 正の値には + を付けます。負の値には自動的に - が付きます
  • すべてのパーセンテージを小数点以下1桁に丸めます
  • 正の差分には pos CSS クラス、負の差分には neg を追加します

STEP 3 — 競合状況

3a — 現在のトラフィック概要

dataforseo_labs_bulk_traffic_estimation を次の内容で呼び出します:

targets:         [TARGET_DOMAIN, ...COMPETITORS]   ← all domains in a single API call
location_name:   LOCATION
language_code:   en
item_types:      ["organic"]
ignore_synonyms: false

返された各ドメインについて、etv と count を抽出します。

すべてのドメインを etv の降順 に並べ替えます。トラフィックが最も多いドメインをランク1とします。 次の値を特定します:

  • competitive_rank = TARGET_DOMAIN の順位(1 = 1位)
  • total_domains = 表内の全ドメイン数
  • domain_above = TARGET_DOMAIN の1つ上の順位のドメイン(該当する場合)
  • domain_below = TARGET_DOMAIN の1つ下の順位のドメイン(該当する場合)
  • gap_to_next_above = domain_above の etv − current_traffic(TARGET_DOMAIN が1位の場合は0)
  • lead_over_next_below = current_traffic − domain_below の etv(TARGET_DOMAIN が最下位の場合は0)
3b — 競合のトレンドシグナル(過去データ、オプション1)

各競合(ターゲットドメインを除く)について、dataforseo_labs_google_historical_rank_overview を呼び出します:

target:          COMPETITOR_DOMAIN
location_name:   LOCATION
language_code:   en
ignore_synonyms: false

返された月別配列から:

  • START_DATE に最も近いスナップショットを見つけ、comp_baseline_etv を抽出します
  • END_DATE に最も近いスナップショットを見つけ、comp_current_etv を抽出します
  • 次の式で計算します:comp_trend_pct = ((comp_current_etv - comp_baseline_etv) / comp_baseline_etv) * 100

トレンドバッジの割り当てルール(安定とみなすしきい値は±5%):

条件バッジCSS クラス
comp_trend_pct > +5%↑ +X.X%trend-up(緑)
comp_trend_pct < -5%↓ -X.X%trend-down(赤)
-5% ≤ comp_trend_pct ≤ +5%→ Stable (X.X%)trend-stable(灰色)

競合比較表の TARGET_DOMAIN のトレンド も、一貫性を保つため、同じ START_DATE → END_DATE の期間を使用する必要があります。この値には、ステップ1で取得した履歴データがすでに含まれています:

  • target_table_trend_pct = ((end_date_snapshot_etv - baseline_traffic) / baseline_traffic) * 100

ここで、end_date_snapshot_etv は、ステップ1の履歴配列に含まれる END_DATE に最も近いスナップショットの ETV です(ステップ2の current_traffic ではありません。こちらはリアルタイムの値です)。

同じ±5%のしきい値ルールを適用して、ターゲットのトレンドバッジを導出します。

⚠️ ステップ2の traffic_growth_pct(baseline → live)は、タイムラインカード、差分バッジ、エグゼクティブサマリーに使用します。ただし、競合比較表のトレンド列には使用しません。 競合比較表のトレンド列では、ターゲットを含むすべてのドメインに target_table_trend_pct(START_DATE → END_DATE)を使用し、公平に比較できるようにします。

⚠️ この計算を行わずに競合のトレンドを「Stable」としてはいけません。 競合比較表のすべてのトレンドバッジは、実際の過去の ETV データから導出する必要があります。


STEP 4 — 上位コンテンツクラスター

dataforseo_labs_google_relevant_pages を次の内容で呼び出します:

target:          TARGET_DOMAIN
location_name:   LOCATION
language_code:   en
order_by:        ["metrics.organic.etv,desc"]
limit:           3
ignore_synonyms: false

上位3ページそれぞれについて、次の値を抽出します:

  • page_address — 表示 URL を短縮します。https://www. のプレフィックスを削除し、パスは残します
  • metrics.organic.etv → page_etv(カンマ区切りで書式設定し、最も近い整数に丸めます)
  • metrics.organic.count → page_keywords

ホームページへの集中度チェック: page_1_etv / current_traffic > 0.80 の場合、homepage_concentration = true と設定します。 これにより、エグゼクティブサマリーに特定の段落が追加されます。


STEP 5 — レポート目標値の導出(Q2カード)

IF traffic_growth_pct >= 0:
  traffic_goal   = round(current_traffic * (1 + traffic_growth_pct/100))
ELSE:
  traffic_goal   = round(baseline_traffic * 0.9)   ← recovery target

keywords_goal    = max(round(current_keywords * 1.2), round(baseline_keywords * 0.95))
top3_goal        = round(current_top3 * 1.3)

IF competitive_rank == 1:
  target_badge = "Maintain #1"
ELSE:
  target_badge = "Challenge #" + str(competitive_rank - 1)

traffic_goal は、例:62,000+ の形式にします。見やすく表示するため、最も近い千の単位に丸めます。

STEP 6 — 戦略的優先事項カードを作成する

必ずカードをちょうど 6 枚作成します。説明にはすべて、実際のデータ値を使用し、一般的なテキストは使わないでください。 該当する場合は、ステップ 3b の競合他社のトレンドデータを参照して、カードの説明を充実させてください。

#カードタイトルの形式内容のルール
1"Close Gap to #[rank_above]"domain_above を挙げ、gap_to_next_above を ETV として示し、そのトレンドバッジ(増加/減少)を記載します。減少している場合は、機会の窓が狭まっていると表現します。
2"Defend vs. / Watch [domain_below or fastest_growing_competitor]"順位が下の競合他社が急成長(>+20%)している場合は、新たな脅威として警告します。それ以外の場合は domain_below を挙げ、lead_over_next_below を示します。
3トラフィック回復、または拡大減少している場合:「[X]%の減少を反転」とし、パイプラインとして pos_4_10 の件数を記載します。増加している場合:「[X]%の成長軌道を維持」とし、市場の状況(例:ほとんどの競合他社が減少しているかどうか)を記載します。
4"Scale Top Content Clusters"page_1 の URL と ETV を記載し、該当する場合はホームページへの集中を警告します。
5"Recover/Expand Keyword Coverage"回復または拡大の具体的な数値として keywords_change を使用します。
6"Convert Pos 4–10 to Top 3"現在の current_pos_4_10 件数を使用し、その 20% を転換するとトップ 3 のランキングが約 N 件増えることを記載します。

STEP 7 — エグゼクティブサマリーを作成する(4 段落)

自然な文章で記述し、段落内に箇条書きを入れないでください。すべての数値に実際の API 値を使用します。

  • 段落 1: 全体の結果。traffic_growth_pct と total_domains における competitive_rank を記載します。競合他社のトレンド分布(ステップ 3b から算出した増加、横ばい、減少の件数)と、対象が最も成長しているかどうかを示します。直上・直下の順位にあるドメイン名と、それぞれの ETV およびトレンドの方向を記載します。

  • 段落 2: homepage_concentration = true の場合:トラフィックの X% が 1 ページから来ていることを指摘し、リスクであると同時に多様化の機会でもあると説明します。 それ以外の場合:競合他社とのキーワード数の比較を示し、コンテンツの幅広さという優位性を説明します。

  • 段落 3: 上位 3 キーワードのトレンド(top3_growth_pct)を記載します。keywords_change に触れ、マイナスの場合は失った具体的な数を示し、早急に取り戻す必要があることを述べます。プラスの場合は勢いがあると表現します。

  • 段落 4: 第 2 四半期の戦略。埋めるべき具体的な差(gap_to_next_above)と、追い上げる競合他社(domain_above)、その増減の方向を記載します。domain_above が減少している場合は、機会の窓が狭まっていると表現します。データに基づき、最も効果の大きい回復または拡大施策を記載します。

最も成長しているかどうかの判定 — target_table_trend_pct を、ステップ 3b のすべての競合他社の comp_trend_pct 値と比較します。TARGET_DOMAIN のトレンド率が全体で最も高い場合は、is_fastest_growing = true に設定します。段落 1 とサマリーバッジでこの値を使用します。

サマリーバッジの形式: Rank #[competitive_rank] | [current_traffic_K]K Traffic | [traffic_growth_pct]% Growth | [current_top3] Top-3 Keywords | [Fastest Growing / Declining / Stable]

最後のラベルは次のとおりです。

  • is_fastest_growing = true の場合は Fastest Growing
  • 最も成長しているわけではなく、traffic_growth_pct > 5% の場合は Growing
  • 最も成長しているわけではなく、traffic_growth_pct < -5% の場合は Declining
  • 最も成長しているわけではなく、-5% <= traffic_growth_pct <= +5% の場合は Stable

STEP 8 — HTML レポートを生成する

HTML の構造、CSS、変数マップの全容については、references/html-template.md を読みます。

テンプレートでは、Infrasity ブランドデザインシステムのみを使用します。

  • 背景:#0D0A1A(黒みがかったバイオレット)。白や、その他の暗い色は使用しないでください。
  • メインのアクセントカラー:#8157F2。唯一のアクセントカラーです。青や緑に置き換えないでください。
  • フォント:すべての見出し/KPI 値/セクション番号には Instrument Sans、すべての本文/ラベル/UI テキストには DM Sans、パス/コード/データ値には DM Mono
  • ステータスカラー:#5DCEA6(プラスの変化)、#F07070(マイナスの変化)

他のカラーパレットやフォントスタックを変更、上書き、混在させないでください。 すべての {{VARIABLE}} に実際のデータを入力します。ファイルを次の場所に出力します。

/mnt/user-data/outputs/{TARGET_DOMAIN}_seo_report.html

続いて present_files を呼び出して、ユーザーにファイルを渡します。

エラー処理

状況対応
bulk_traffic_estimation からドメインのデータが返されないそのドメインを競合比較表から省き、脚注を追加します
START_DATE または END_DATE の月の履歴スナップショットがない最も近い月を使用し、レポートのフッターに実際に使用した日付を記載します
baseline_traffic が 0(ゼロ除算)traffic_growth_pct を「N/A」に設定し、それに依存するすべての差分バッジを省略します。さらに、START_DATE のベースラインデータを利用できなかったことをレポートのフッターに記載します
baseline_top3 が 0(ゼロ除算)top3_growth_pct を「N/A」に設定し、差分バッジを省略します
comp_baseline_etv が 0(競合のトレンドにおけるゼロ除算)トレンド列で、その競合を「N/A」と表示します
backlinks_bulk_ranks の 40204 エラーこのエンドポイントは呼び出さないでください。別途サブスクリプションが必要です。完全に省略します。
ai_opt_llm_ment_agg_metrics の 40204 エラーAI 引用セクションを含めないでください。このスキルでは対象外です。

含めないもの

  • ❌ AI/LLM 引用セクションなし — 設計上対象外です(DataForSEO の有料アドオンが必要です)
  • ❌ DFS Rank(0–1000)列なし — 設計上対象外です(別途サブスクリプションが必要です)
  • ❌ ignore_synonyms: true なし — 常に false とし、例外はありません
  • ❌ プレースホルダーテキストなし — HTML 内のすべての数値は、実際の API レスポンスに基づく必要があります
  • ❌ 入力を一つずつ尋ねない — 不足している入力はすべて、1 回のメッセージでまとめて収集します
  • ❌ 競合のトレンドをデフォルトで「Stable」にしない — 常に過去の ETV 比較からトレンドを導き出します

参照ファイル

  • references/html-template.md — CSS デザインシステム、各セクションのマークアップ、競合比較表の行パターン、変数の完全な置換マップを含む、Infrasity ブランドの完全な HTML テンプレートです。 HTML を作成する前に、必ずこのファイルを読んでください。Infrasity のデザインのみが許可される出力デザインです。他の配色、フォントスタック、レイアウトは使用しないでください。

コメント