{"id":"copy","name":"google-ads-copy","summary":"Google広告のコピーを生成し、A/Bテストを行います。広告コピー、見出し、説明、広告バリアントの作成、広告メッセージのテスト、CTRの向上、RSA(レスポンシブ検索広告)コンポーネントの生成などを依頼された際に活用してください。","body":"# Ad Copy Generator + A/B Tester\n\nWrite Google Ads RSA copy and run structured tests to find winning messaging.\n\n## Setup\n\nRead and follow `../shared/preamble.md` (MCP detection, account selection) and `../shared/analysis-principles.md` (evidence requirement, guardrails). Both apply throughout.\n\n## Reference\n\nRead on demand:\n\n- `references/rsa-best-practices.md` — character limits, headline formulas, pinning, A/B mechanics, common mistakes. The source of truth for what to write.\n- `references/rsa-testing-lab.md` — how to choose RSA test metrics, diagnose ad-group intent bloat, decide pinning, and avoid chasing Ad Strength over business outcomes.\n- `../manage/references/industry-benchmarks.md` — industry CTR/CVR benchmarks for sanity-checking targets.\n- `../manage/references/quality-score-framework.md` — only when QS improvement is the explicit goal.\n\n## Business context — non-negotiable input\n\nEvery copy decision is grounded in business context. Read `{data_dir}/business-context.json` and `{data_dir}/personas/{accountId}.json` first.\n\n- If either file is missing or empty, recommend `/google-ads-audit` before writing — generic copy that ignores positioning is wasted ad inventory. The full intake procedure (website crawl, schema, bootstrapping) lives in `../audit/references/business-context.md`.\n- If the user volunteers new info (new service, changed positioning, seasonal update), merge it in.\n\nHow context shapes copy: services map to headline categories; locations earn local-specific headlines (with QS upside); brand voice sets tone and forbidden words; differentiators ARE the value-prop headlines; competitors sharpen positioning (without naming them); seasonality decides urgency vs. evergreen framing; offers feed time-sensitive variants; landing-page content must match (or conversions drop). Personas drive language: their own search-term phrasing in headlines, their pain points in descriptions, their decision-trigger as the CTA angle.\n\n## Ad-strength vs. real performance\n\nAd strength optimizes for Google's diversity goals, not your conversion rate. The hierarchy: **conversion rate > CTR > CPA > ad strength.** Don't break a high-CTR ad to chase \"Excellent\". Do treat low ad strength as a useful diversity signal — eight distinct headlines, one per category, no repeats in description bank.\n\n## Pulling what to write from\n\nCopy must be grounded in what already converts. One `runScript` with `ads.gaqlParallel` covers almost any copy job — fan out:\n\n- `ad_group_ad` — current headlines, descriptions, ad-strength, per-ad clicks/CTR/conversions (the baseline to beat)\n- `keyword_view` — what's converting and which QS components are weak\n- `search_term_view` — the actual phrases customers are typing (the single best language source)\n- `campaign` — the CTR/CVR benchmark each variant has to clear\n\nFor brand-wide rewrites, correlate everything in one pass. For a single ad group, scope each query with `WHERE ad_group.id = …`. Layer in seasonality and keyword-landscape context from `business-context.json`.\n\nIf the user has a CRM or lead-outcome database with the language customers actually use, mine that — customer language beats marketing language every time.\n\n## Copy output contract\n\nEvery proposal needs a small decision record, not just a block of headlines:\n\n- A **concept ID** and one-sentence hypothesis: `persona × motivation × angle`.\n- A **claim ledger** for every proof, offer, rating, guarantee, price, or superlative: exact source (account data, business context, approved landing page, or user-provided evidence) and whether it is approved for ad use.\n- Complete RSA assets with character counts and pin positions, plus a distinct challenger concept when testing.\n\nDo not turn a vague request into fabricated proof. If a claim is attractive but unsupported, label it `needs_substantiation` and write a claim-free alternative. A citation to a competitor, an unverified review site, or general industry knowledge is not approval to use a claim in an ad.\n\n## Competitive copy rules\n\n- **Never** name a competitor in ad copy (policy risk + you do their brand awareness for free).\n- **Never** use \"best\" / \"#1\" without verifiable substantiation. Google requires it; the Trademark team enforces it.\n- **Do** use specific features competitors lack (\"Same-Day Service\" beats \"Better Service\"), trust signals (\"4.9★ Google · 500+ Reviews\"), guarantees, transparent pricing, and location specificity. Verifiable specificity outperforms superlatives.\n\n## RSA mechanics\n\nGoogle RSA: up to **15 headlines (30 chars max)** and **4 descriptions (90 chars max)**. A single character over = rejected. Always count.\n\n`references/rsa-best-practices.md` is the source of truth for headline formulas, description ordering, and pinning strategy. The compact rule of thumb: pin one Service+Location headline to position 1, one CTA to position 3, leave position 2 unpinned for Google to test value-prop / trust / differentiator headlines, and never pin more than 3 total.\n\n## A/B testing — use the experiments framework\n\nWhen the user wants to test, use the MCP server's experiment tooling rather than the old \"deploy two paused ads side by side\" pattern:\n\n- **Ad-copy A/B** — `createAdVariationExperiment` is the dedicated tool for variation testing at the ad level. It manages the split, the lift comparison, and the read-back.\n- **Larger creative shifts** (different angle, different persona target, different LP destination) — `createExperiment` + `addExperimentArms` + `scheduleExperiment`. Monitor with `listActiveExperiments` and `listExperimentAsyncErrors`. Decide endgame with `endExperiment`, `graduateExperiment`, or `promoteExperiment`.\n- **Single ad-group, two variants, no traffic split** — paused-then-enabled twin ads in the same ad group is still acceptable for low-stakes copy iteration, but it has no statistical engine behind it. Prefer the experiment path when the decision matters.\n\nEach variant must test a **meaningfully different angle** — not word swaps. \"Trust & Expertise\" vs. \"Speed & Convenience\" vs. \"Price & Value\" is a real test; \"Call Today\" vs. \"Call Now\" is noise.\n\nBefore writing variants, read `references/rsa-testing-lab.md` when the request mentions testing, pinning, Ad Strength, low CTR/CVR, or mixed-intent ad groups. It encodes the generalized pattern that many RSA problems are really ad-group/query-theme problems.\n\nBefore launch, record one primary metric, any guardrail metric (for example CPA or qualified-lead rate), the planned minimum exposure or duration, and the decision rule. Do not peek and declare a winner from an early gap: less than ~100 clicks per variant is usually too early, and even a 2× CVR gap still needs enough conversions and a check for recent changes. The experiment framework's own significance signals are the cleanest input — defer to them when present.\n\nAfter a winner: pause the loser, then iterate against the winner. Never stop testing.\n\n## Operating principles\n\n1. **Business context is non-negotiable.** No `business-context.json` / `personas` → recommend `/google-ads-audit` before writing.\n2. **Confirm before deploying.** Show the exact copy, character counts per asset, and pin positions. Get a yes, then push.\n3. **Every write is undoable for 7 days** via `undoChange` (assuming the entity hasn't been modified since).\n4. **Differentiate, don't imitate.** Generic copy that could belong to any competitor is a wasted ad slot.\n5. **Defer to `/google-ads`** for bid / budget / keyword work — this skill writes copy and runs creative experiments only.","author":"@nowork-studio","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/nowork-studio/notfair-plugin/tree/main/google-ads/copy","license":"MIT","category":"writing","lang":"en","tokens":1652,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"evals/evals.json","size":3588,"sha256":"3994579c11c843669dab7f7d4c4363b69d2f37924cc5cc36d0f5f9c965e9df92"},{"path":"references/rsa-best-practices.md","size":14292,"sha256":"78857febba9b0b3aa79e29f1c83e725ccf4c52b46e5cc4496dfac996e582acfc"},{"path":"references/rsa-testing-lab.md","size":4643,"sha256":"42a9ca58a505d82c026c459c347c28a9b339fb0496f2c84043dac2c9a6d0e319"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}