pre-send-qa について
Pre-Send QAは、送信前にメールキャンペーンや貼り付けたメール内容を確認するスキルです。パーソナライズ、リンク、スパム要因、コンプライアンス、表示、アクセシビリティを点検し、MCP接続時は送信状況も確認します。キャンペーンを自動編集することはありません。
主な機能
- 01マージタグとフォールバックの確認
- 02リンクとUTMの整合性検証
- 03配信停止とコンプライアンス要素の点検
- 04スパム要因と表示上のリスクの指摘
- 05MCPモードでの宛先と送信時刻の確認
活用シーン
- 01配信予約前のESPキャンペーン確認
- 02ESP未接続での貼り付けHTMLの検査
- 03送信前のリンク切れや配信停止情報の確認
MCP 対応
Cogny MCPとESPを接続すると、キャンペーンや下書きを取得し、受信者数、セグメント、送信時刻、重複送信を確認します。貼り付けモードはMCPなしで使えますが、送信状況の確認は行いません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cognyai/ claude-code-marketing-skills --skill pre-send-qaインストール後、Claude Code で/pre-send-qaを入力して読み込まれたか確認します。
詳細
送信前 QA
リストに配信する前に、恥ずかしいミスを見つけましょう。メールを事前に徹底チェックします。差し込みタグのフォールバック、リンク切れ、スパム判定につながる表現、CAN-SPAM/GDPR のフッター、モバイルでの表示、サイズ制限、アクセシビリティを確認します。
必要条件: キャンペーン ID モードには Cogny MCP が必要です。HTML 貼り付けモードは MCP なしでも動作します(ただし、送信コンテキストのチェックは行いません)。
使い方
/pre-send-qa <campaign-or-draft-id> — ESP 内の特定のキャンペーン(または Get a Newsletter の場合は下書き)を QA します
/pre-send-qa — 続けて、求められたらメールの HTML/MJML/テキストを貼り付けます
手順
1. メールを読み込む
モード A — キャンペーン ID(MCP)。 接続されている ESP を検出し(mcp__cogny__<svc>__* と mcp__<svc>__* の両方の名前空間を確認)、適切なツールを使用します。
| ESP | 取得ツール | ID が指すもの |
|---|---|---|
| Klaviyo | get_campaign | キャンペーンオブジェクト |
| Mailchimp | tool_get_campaign | キャンペーンオブジェクト |
| Rule | tool_get_campaign | キャンペーンオブジェクト |
| Get a Newsletter — 送信前 | tool_get_draft | まだ送信されていない下書き |
| Get a Newsletter — 送信後のフォレンジック調査 | tool_get_sent + tool_get_report | 送信済みアイテム |
すべての ESP から、件名、プリヘッダー、差出人名、差出人メールアドレス、返信先、HTML 本文、テキスト本文、対象セグメント/リスト、送信予定時刻を取得します。また、Section 2.8 で受信者数を確認できるよう、関連するリスト/オーディエンスの規模も取得します。
Get a Newsletter には単一の「キャンペーン」オブジェクトがありません。 ユーザーから ID を受け取った場合は、まず tool_get_draft を試し(送信前 QA で使われることが多いため)、404 が返されたら tool_get_sent にフォールバックします。予約済みの配信を QA したい場合は、tool_list_scheduled を使って探します。
モード B — 貼り付け:
- 件名、プリヘッダー、差出人名/メールアドレス、本文の HTML を尋ねます。複数行の貼り付けを受け付けます。
- 貼り付けモードでは Section 2.8(送信コンテキスト)をスキップします。受信者数、セグメント、スケジュールは確認できません。
2. チェックリストを実行する
各カテゴリをすべて確認します。項目ごとに [PASS]、[WARN]、[FAIL] を付け、問題のある具体的な内容を記載します。
2.1 ヘッダーとルーティング
- 件名が入力されている — 空欄ではない
- 件名の長さが 55 文字以下(モバイルで省略されるしきい値)
- プリヘッダーが入力されている — 空欄ではなく、件名と重複していない
- プリヘッダーの長さが 85~100 文字(短すぎるとスペースの無駄になり、長すぎると省略されます)
- 差出人名がブランドを示している — 「noreply」や「info」ではない
- 差出人メールアドレスに送信用サブドメインを使用している —
@gmail.com/@outlook.comの差出人アドレスは警告します(一括配信の到達率を大きく損ないます) - 返信先が監視されている — noreply@ の場合は警告します
2.2 差し込みタグ/パーソナライズ
本文、件名、プリヘッダーをスキャンして、次を確認します。
{{ ... }}、{% ... %}、*|...|*、[[...]]、%%...%%、{...}— ESP の構文によって異なります- すべての差し込みタグの形式が正しい — 括弧の対応が取れており、ブロックが閉じられている
- すべての差し込みタグにフォールバックがある — 例:
{{ first_name|default:"there" }}(Klaviyo)、*|IFNOT:FNAME|*there*|ELSE:*|FNAME|**|END:IF|*(Mailchimp)。フォールバックのないトークンはすべて FAIL として警告します。 - 「Hi ,」または「Hello ,」のアンチパターン — 挨拶の後に句読点だけが続く箇所を部分文字列検索します。差し込みタグの失敗で最も恥ずかしい事態につながるパターンです。
- 動的コンテンツブロックが閉じられている — 開いた
{% if %}には{% endif %}が必要です。ループも同様です。 - 件名に未処理のトークンがない — 例:件名に「Hi {{ first_name }}」とそのまま表示されている
2.3 リンク
HTML からすべての <a href="..."> を抽出します。それぞれについて:
- URL が絶対 URL である — ドメインのない
href="/path"は不可。意図的なアンカーでない限り、href="#"も不可 - URL が解決できる — 重複を除いた各 URL を HEAD リクエストで確認します(リクエスト上限は 30 件)。200 以外のステータスを報告します。
-
localhost/127.0.0.1/.localが含まれていない — 開発環境の情報漏えいです - ステージング/開発用ドメインが含まれていない —
*.staging.*、*.dev.*、stage.、preprod.を報告します - すべての外部リンクに UTM パラメーターがある —
utm_source/utm_medium/utm_campaignがないリンクに警告します - UTM パラメーターに一貫性がある — すべてのリンクで
utm_campaignを統一する必要があります。不一致を報告します - リンク数 — 合計を報告します。20 件を超える場合(過剰なリンク)に警告します。1 件未満の場合(CTA なし)にも警告します。
- CTA のリンク先に一貫性がある — 「Shop now」と表示された複数のボタンは、通常、同じ URL を指す必要があります
2.4 画像
- すべての
<img>にaltテキストがある — 空でなく、内容を説明していること - 画像だけのメールではない — テキストと画像の比率がテキスト 40% 未満の場合に報告します。ヒーロー画像だけのメールはスパムフィルターに検出されます。
- 画像の URL が絶対 URL で、HTTPS を使用している
- 問題のあるホストから画像をホットリンクしていない — ブランドの CDN ではなく、
imgur、cloudinary demoなどに画像がある場合に報告します
2.5 コンプライアンス
- 配信停止リンクがある —
unsubscribe、preferences、opt outを正規表現で検索します - 配信停止リンクが見える —
display:noneやfont-size:1pxになっていないこと - フッターに郵便住所がある — CAN-SPAM の要件です。住所/市区町村のパターンを正規表現で検索し、見つからない場合は報告します。
- List-Unsubscribe ヘッダーがある — ESP で設定可能なのに未設定の場合に報告します(Gmail/Yahoo は一括送信者にワンクリック配信停止を義務付けています)
- プリファレンスセンターへのリンクがある — あると望ましい項目です。配信停止リンクしかない場合は警告します
2.6 スパムの引き金
件名、プリヘッダー、本文をスキャンし、典型的な引き金を報告します。
- 単語レベル: free、winner、congratulations、guaranteed、risk-free、act now、click here、limited time、no obligation、viagra(苦笑)、make money、earn extra、$$$
- 句読点: 件名に
!が 2 つ以上、!!!、??? - 大文字・小文字: 件名に 3 文字を超える ALL CAPS の単語
- 記号:
$$$、★、過剰な絵文字(3 個超) - HTML: 隠しテキスト(背景色と同じ色)、小さすぎるフォント、埋め込み JavaScript、
<body>の背景画像
各該当箇所を、前後の文脈とともに出力します。
🔴 Subject contains "!!!"
🟡 Body has 4 instances of ALL CAPS words: "LIMITED", "TODAY", "ACT NOW", "DON'T"
2.7 レンダリングとサイズ
- HTML のサイズが 102 KB 未満 — Gmail は 102 KB でメールを切り詰めます。実際のサイズを報告します。
- 単一のルート
<table>レイアウトを使用する(デスクトップメールの標準)、または MJML を使用する — flex/grid は到達率のリスクとして報告します - インライン CSS を使用する —
<style>ブロックではなく、style 属性を使用します。多くのクライアントは<head>のスタイルを削除します。 - モバイル viewport の meta タグがある —
<meta name="viewport" content="width=device-width"> - フォントスタックにフォールバックがある — Web セーフなフォールバックなしで
font-family: "Custom Font";を指定しないこと -
<script>、<form>、JavaScript 経由で読み込む外部フォントがない — これらはほとんどのクライアントで削除されます
2.8 送信コンテキスト(MCP モードのみ)
- 対象セグメントに受信者がいる — 受信者数が 0 より多いこと
- 販促メールの送信対象がリスト全体ではない — セグメントを指定できるのに「All Subscribers」を指定している場合に報告します
- 受信者の現地時間で午前 3 時に予約されていない — 不自然な送信時刻を報告します
- 重複送信ではない — 過去 30 日間に、同じ件名で同じセグメントに送信されたキャンペーンがないか確認します
3. レポート
Pre-send QA: <campaign name | "pasted email">
Recipient count: <N> Send ETA: <time or "not scheduled">
Overall: <READY TO SEND | FIX BEFORE SEND | CRITICAL ISSUES>
🔴 Critical (will break or embarrass)
— <specific issue with offending text / URL / line>
— ...
🟡 Warnings (fix if you have time)
— ...
🟢 Passed
— <count> checks passed
──
Recommended fix order:
1. ...
2. ...
Merge-tag fallback cheatsheet for <ESP>:
[ESP-specific syntax examples]
4. 指摘事項(任意)
重大な問題が見つかり、キャンペーンがまもなく送信予定の場合は、指摘事項を作成します。
{
"title": "Campaign '<name>' has critical QA issues — blocked send",
"body": "<enumerated issues>",
"action_type": "pre_send_fix",
"priority": "high"
}
5. 自動修正しない
キャンペーンを自動で変更してはいけません。必ず差分を提示し、各修正についてユーザーの承認を得てください。
メモ
- ESP 固有のマージタグ構文:
- Klaviyo:
{{ first_name|default:"there" }} - Mailchimp:
*|FNAME|*と*|IFNOT:FNAME|*there*|ELSE:*|FNAME|**|END:IF|* - Rule / Get a Newsletter:
[Firstname]とプラットフォーム固有のフォールバック構文
- Klaviyo:
- スパム判定のトリガーリストは経験則です。最新のスパムフィルターは機械学習とレピュテーションを利用しています。警告は「少し注意して、レピュテーションを確認する」という意味で捉え、「即座にスパム扱いされる」という意味ではありません。