# Ad Copy From Review Stats

> Google広告の検索キャンペーンで「どの訴求が刺さるか」を担当者の勘でなく実購入者レビューの統計で決める。Google Ads MCP で CTR・コンバージョンの低い広告グループ（検索語）を絞り、TrendViewer MCP でそのカテゴリのレビューから購買動機になっている観点を選び、その言葉を使った見出し案を各5本作る。ユーザーが「広告の訴求軸を決めたい」「広告文の見出し案が欲しい」「CTRの低い広告グループを直したい」「レビューをもとに広告コピーを作りたい」「レスポンシブ検索広告の見出しを増やしたい」と言ったとき、また Google Ads と TrendViewer が接続された状態で広告の改善を頼まれたときは、「レビュー」という語が無くてもこのスキルを使うこと。

- Skill: `haldata-net/ad-copy-from-review-stats` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add haldata-net/ad-copy-from-review-stats`
- Raw SKILL.md: https://api.skillmd.com/api/skills/haldata-net/ad-copy-from-review-stats/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: haldata-net (https://skillmd.com/u/haldata-net)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/haldata-net/ad-copy-from-review-stats

---


# 広告の訴求軸をレビュー統計で決める

haldata.net/mcp-dir/ の組み合わせレシピ「広告の訴求軸をレビュー統計で決める」の実行版。
流れは3段。**事実で絞る（Google Ads）→ 理由を読む（TrendViewer）→ 行動に落とす（見出し案）**。

なぜこの順か。広告文の訴求は「美味しい」「高品質」のような常套句になりがちで、それが本当に買う理由かは誰も確かめていない。レビュー統計には「買った人が何を理由に選び、何に満足し、何に不満を持ったか」が件数と率で出ている。CTR の低い広告グループにだけ、その根拠のある言葉を当てるのがこのスキル。

## 前提

| 必要なもの | 用途 | 無いとき |
|---|---|---|
| Google Ads MCP（Google公式 `google-ads-mcp`＝GAQL、または同等の読み取りMCP） | 広告グループ・検索語の成果、既存の見出し | 進められない |
| TrendViewer MCP | 観点別の言及数・肯定率・否定率・購買動機率 | 進められない |
| Google Ads の書き込み（任意） | 見出し案を広告として登録 | 省略可。案の提示で終える |

所要時間の目安：TrendViewer に対象カテゴリの分析があれば **データ取得5分＋見出し作成とレポート5分**（HALDATA の検証は8.5分）。無ければ新規作成に約2時間の待ち。

このスキルは EC の商品広告を前提にしている。自社サービスなど商品でない広告に使うときは、観点をどう読み替えたかの表をレポートの注意欄に入れる。
ツールの正確な引数は `references/tools.md`。Google Ads MCP は公式（GAQL）と HALDATA 自作版で取れる粒度が違うので必ず参照する。

## Step 0. 入力を確定する

1. Google Ads の `customer_id`（ハイフン無し10桁）と、対象キャンペーン（名前または ID）
2. 広告が売っている商品のカテゴリ名と、分かれば JAN／ASIN
3. 見出し案を Google Ads に登録するか（既定：**しない**。案の提示まで）

期間は既定で **直近30日、終了日は前日**（Google Ads は当日分が未確定）。

**書き込み先の確認**：`customer_id` は必ずユーザーに明示させ、`list_accessible_customers`（公式）または `list_campaigns`（自作版）で返るキャンペーン名がユーザーの想定と一致するか突き合わせてから進む。MCP の既定アカウントに任せない（別アカウントに書いてしまう事故が実際に起きている）。

## Step 1. 事実で絞る（Google Ads）

### 1-a. 成果の取得

公式 MCP なら GAQL を1本（`references/tools.md` に全文）。`ad_group` 単位で `impressions, clicks, ctr, conversions, cost_micros` を直近30日で取る。検索語まで見るなら `search_term_view` を同じ期間で取る。
自作版なら `list_ad_groups` → `get_campaign_performance`（キャンペーン単位）で代用し、レポートに「広告グループ単位の CTR は取れないためキャンペーン単位」と書く。

### 1-b. 低CTR の絞り込み

| 条件 | 既定 | 理由 |
|---|---|---|
| 表示回数の下限 | 500 | 500未満は CTR が1クリックで動く |
| 低CTR の閾値 | 1.0% 未満 | 検索広告の平均は 3〜5%。1% 未満は「検索意図と訴求が合っていない」 |
| 採用件数 | 上位3広告グループ（表示回数の多い順） | 一度に直せる量 |

1% 未満が無ければ、CTR の低い順に3件とし「閾値未達のため下位3件」と書く。コンバージョンが取れていれば「CTR は普通だがCVが0」も第2軸で拾う。

**広告グループ単位の CTR が取れない MCP（自作版）のとき**：キャンペーンの CTR で判定し、そのキャンペーンの広告グループを最大3つ（登録キーワード数の多い順）まとめて対象にする。レポートには「キャンペーン単位で判定」と書く。

### 1-c. 既存の訴求を控える

公式 MCP なら `ad_group_ad` の `responsive_search_ad.headlines` で見出しを取る。取れない MCP のときは、ユーザーに管理画面の見出しを貼ってもらう。貼れなければ「既存訴求との照合は省略」と書いて Step 3 で新規案だけ作る。
検索語が取れない MCP のときは、`list_keywords` の登録キーワード（`quality_score > 0` のもの）を「主な検索語」の代わりに使い、そう書く。

## Step 2. 理由を読む（TrendViewer）

`list_analyses(state="complete")` で対象カテゴリの分析を探す。無ければ `submit_analysis`（`category={name, detail}`、`products` か `search_queries`、`mode="manual"`）で作り、約2時間待つ（ユーザーに伝えていったん止める。枠が無いエラーが出たら何を消すかはユーザーの判断）。

1. `get_analysis_data(wldh_slug, include_per_sku=false, include_sub_viewpoints=false)` → 観点表（`id, name, mention_count, positive_rate, negative_rate`）。言及数は以後この `mention_count` で統一。任意の 3-e（文を読む）をやるなら `include_per_sku=true` にして `per_sku[].product_id` も控える
2. `get_review_insights(dataset_slug, dimension="motivation", group_by="viewpoint", min_count=30)` → `pm_rate` と `meta.baseline_pm_rate`
3. `get_review_insights(dataset_slug, dimension="context_3w", limit=8)` → 誰が・どこで・いつ。軸（who / where / when）ごとに、上位1語の `count` が3未満ならその軸は使わない

観点を3種に分ける（既定値。ユーザーが変えられる）：

| 種類 | 条件 | 広告での扱い |
|---|---|---|
| 訴求軸（使う） | `pm_rate >= baseline × 1.2` かつ `mention_count >= 30`、または `positive_rate >= 0.80` かつ `mention_count >= 100` | 見出しの主語にする。動機率が高い順に上位3つ |
| 平凡（使わない） | 肯定率 60〜80% | 常套句になりやすい。既存見出しがここに寄っていたら指摘 |
| 地雷（触れない） | `negative_rate >= 0.30` かつ `mention_count >= 30` | 広告で触れると逆効果。商品改善に回す |

判定の優先順位：**地雷 → 訴求軸 → 平凡** の順に当てはめ、最初に当たった種類にする（否定率が高ければ肯定率が高くても地雷。動機率か肯定率で訴求軸に入れば、肯定率が 60〜80% でも平凡にはしない）。

訴求軸の並び順：動機率が基準以上のものを動機率の高い順、その後に肯定率だけで入ったものを肯定率の高い順。上位3つを使い、4つ目以降は「訴求軸だが今回は使わない」と表に残す。3つ未満なら動機率の高い順に3つまで埋め、「基準未達」と印を付ける。

任意：`get_review_sentences(dataset_slug, mall_product_id=<per_sku[].product_id>, viewpoint_id=<viewpoints[].id>, purchase_motivation="only", per_page=20)` で動機の文を読み、言い回しの方向を掴む（`mall_product_id` が必須なので、やるなら 1. で `per_sku` を取っておく）。**原文は写さない。** 見出しはレビューの語彙をなぞらず、集計値を根拠に自分の言葉で書く。

## Step 3. 行動に落とす（見出し案）

### 3-a. ギャップの指摘

既存見出しがあれば、各見出しがどの観点に当たるかを分類し、「訴求軸に当たる見出しが何本／平凡が何本／地雷に触れているものが何本」を表にする。無ければ省略。

### 3-b. 見出し案

低CTR の広告グループごとに、訴求軸3観点 × 5本 = 15本。レスポンシブ検索広告の制限に合わせる：

- 見出しは **半角30文字以内**（全角は1文字を2と数える。全角だけなら15文字）。1本ずつ数えて「（半角換算 28）」のように併記する。数えるときは全角・半角混在で間違えやすいので、スクリプトで機械的に数える
- 説明文も作るなら **半角90文字以内**（全角45文字）、観点ごとに1本
- 各観点の案の末尾に根拠1行：`根拠：観点「後味の良さ」肯定率78.0%・言及11,631件（動機率 x%／基準 y%）`
- 検索語が分かっていれば、検索語の語をどれか1本には含める（検索意図との一致が CTR を作る）
- 数字・比率をそのまま見出しに入れない（「肯定率78%」のような表現は広告審査と誤解の両面で避ける）。数字は根拠欄に置く

### 3-c. Google Ads への登録

- ユーザーが Step 0 で「登録する」と言い、案を見せて明示的に OK をもらってから
- 新しい広告として追加し、既存の広告は止めない・消さない。ステータスは **一時停止で作成**し、有効化はユーザーが管理画面で行う（地域設定・入札を人が確認してから配信する）
- 公式 MCP は読み取り専用なので登録はできない。その旨を書く

## 出力フォーマット

```
# 広告訴求レポート（{開始日}〜{終了日}）
対象：アカウント {customer_id} ／ キャンペーン {name} ／ レビュー統計：{dataset}（言及 {total_mentions} 件）
## 1. 低CTR の広告グループ（Google Ads）
表：広告グループ / 表示回数 / クリック / CTR / CV / 費用 / 主な検索語
## 2. 訴求軸・平凡・地雷（TrendViewer）
表：観点 / 言及数 / 肯定率 / 否定率 / 動機率（基準 x%） / 種類
既存見出しの分類（あれば）
## 3. 見出し案
広告グループごとに：観点A 5本（文字数）／観点B 5本／観点C 5本 → 各根拠
## 4. 反映状況
登録済み（一時停止）／案のみ
## 5. 注意
期間・閾値変更・粒度（キャンペーン単位で代用等）・未接続・地雷観点の扱い
```

## やらないこと

- レビュー原文を見出しやレポートに載せない
- 広告の有効化・既存広告の停止や削除・入札や予算の変更をしない（登録は一時停止まで）
- 集計値を見出しに数字として入れない
- `customer_id` を確認せずに書き込まない

## 参照

- `references/tools.md` — Google Ads（公式 GAQL／自作版）、TrendViewer の正確な呼び方
- `examples/` — HALDATA 自社データでの実行例

