email-marketing について
email-marketingは、メールマーケティングの戦略と実行を支援するスキルです。セグメント分け、自動化、到達率、テストを扱い、キャンペーンを運用するチーム向けです。
主な機能
- 01購読者リストの構築と分類
- 02カレンダーとライフサイクルの計画
- 03自動メールシーケンスの設計
- 04SPF、DKIM、DMARCの設定
- 05A/Bテストと指標分析
活用シーン
- 01ウェルカムやナーチャリングのメールを計画
- 02行動に基づくオーディエンス分類
- 03到達率とリストの衛生状態を改善
- 04件名やメール内容をテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dengineproblem/ agents-monorepo --skill email-marketingインストール後、Claude Code で/email-marketingを入力して読み込まれたか確認します。
詳細
メールマーケティングのエキスパート
メールマーケティングの戦略立案と実行に関する包括的な専門知識です。
中核となる能力
戦略
- リスト構築とセグメンテーション
- メール配信カレンダーの計画
- ライフサイクルマーケティング
- パーソナライゼーション戦略
- A/B テストのフレームワーク
自動化
- ウェルカムシーケンス
- ナーチャリングキャンペーン
- トリガーベースのメール
- 再エンゲージメントのワークフロー
- 呼び戻しシーケンス
配信到達性
- 送信者レピュテーションの管理
- 認証(SPF、DKIM、DMARC)
- リストの衛生管理
- スパムトラップの回避
- ISP との関係管理
メールの種類
マーケティングメール
- ニュースレター
- プロモーションキャンペーン
- 製品のお知らせ
- イベントへの招待
- コンテンツの配信
自動配信シーケンス
- ウェルカムシリーズ
- オンボーディングシーケンス
- リードナーチャリング
- カート放棄
- 再エンゲージメント
- 呼び戻し
トランザクションメール
- 注文確認
- 配送状況の更新
- パスワードのリセット
- アカウント通知
メール認証の設定
# SPF Record
v=spf1 include:_spf.google.com include:sendgrid.net ~all
# DKIM Record
selector._domainkey.example.com IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3..."
# DMARC Record
_dmarc.example.com IN TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
主な指標
| 指標 | ベンチマーク | 説明 |
|---|---|---|
| 開封率 | 20-25% | ユニーク開封数 / 配信数 |
| クリック率 | 2-5% | ユニーククリック数 / 配信数 |
| クリック開封率 | 10-15% | クリック数 / 開封数 |
| 配信停止率 | <0.5% | 配信停止数 / 配信数 |
| バウンス率 | <2% | バウンス数 / 送信数 |
| スパム報告率 | <0.1% | 報告数 / 配信数 |
| コンバージョン率 | 変動 | コンバージョン数 / クリック数 |
セグメンテーション戦略
Behavioral Segmentation:
- Purchase history
- Email engagement
- Website activity
- Product preferences
- Cart abandonment
Demographic Segmentation:
- Location/timezone
- Job title/industry
- Company size
- Age/gender
Lifecycle Stages:
- New subscribers
- Active customers
- At-risk (declining engagement)
- Churned (re-activation target)
- VIP/high-value
自動化ワークフロー
ウェルカムシーケンス
Day 0 - Welcome Email:
trigger: subscription_confirmed
content: Brand introduction, expectations
cta: Complete profile
Day 2 - Value Email:
trigger: previous_opened OR time_delay
content: Top content, quick wins
cta: Explore resources
Day 5 - Social Proof:
trigger: time_delay
content: Customer stories, testimonials
cta: See case studies
Day 7 - Soft CTA:
trigger: time_delay
content: Product introduction
cta: Start free trial
カート放棄のワークフロー
Hour 1 - Reminder:
trigger: cart_abandoned
content: Items in cart reminder
cta: Complete purchase
Hour 24 - Urgency:
trigger: no_purchase
content: Items may sell out
cta: Secure your items
Hour 72 - Incentive:
trigger: no_purchase
content: Special discount offer
cta: Get 10% off
A/B テストのフレームワーク
テストする要素
Subject Lines:
- Length (short vs long)
- Personalization
- Emojis
- Questions vs statements
- Urgency words
Content:
- Layout (single vs multi-column)
- Image count and placement
- CTA button color/text
- Copy length
- Personalization depth
Timing:
- Send day
- Send time
- Timezone optimization
統計的有意性
import scipy.stats as stats
def calculate_significance(control_opens, control_sent,
variant_opens, variant_sent,
confidence=0.95):
"""Calculate if A/B test result is significant."""
control_rate = control_opens / control_sent
variant_rate = variant_opens / variant_sent
# Pooled proportion
pooled = (control_opens + variant_opens) / (control_sent + variant_sent)
# Standard error
se = (pooled * (1 - pooled) * (1/control_sent + 1/variant_sent)) ** 0.5
# Z-score
z = (variant_rate - control_rate) / se
# P-value
p_value = 2 * (1 - stats.norm.cdf(abs(z)))
return {
'control_rate': control_rate,
'variant_rate': variant_rate,
'lift': (variant_rate - control_rate) / control_rate * 100,
'p_value': p_value,
'significant': p_value < (1 - confidence)
}
ベストプラクティス
件名
- 50 文字未満にする
- 好奇心や緊急性を喚起する
- 適切な場合はパーソナライズする
- 継続的に A/B テストを行う
- スパムの引き金となる語句を避ける
メール本文
- 明確な価値提案
- 主要な CTA は 1 つにする
- モバイルに最適化したレイアウト
- 見出しを使って読みやすくする
- パーソナライズ用トークン
- 画像の代替テキスト
配信到達性
- 定期的にリストを整理する(バウンスしたアドレスやエンゲージメントのない宛先を削除)
- ドメインを認証する(SPF、DKIM、DMARC)
- 一貫した送信量を維持する
- 送信者レピュテーションを監視する
- ダブルオプトインを使用する
- 配信停止の要求に直ちに対応する
送信時間の最適化
def optimize_send_time(subscriber_data):
"""Analyze historical engagement to find optimal send times."""
engagement_by_hour = {}
for subscriber in subscriber_data:
local_time = convert_to_local(subscriber['open_time'],
subscriber['timezone'])
hour = local_time.hour
if hour not in engagement_by_hour:
engagement_by_hour[hour] = {'opens': 0, 'total': 0}
engagement_by_hour[hour]['opens'] += 1
engagement_by_hour[hour]['total'] += 1
# Calculate open rates by hour
for hour, data in engagement_by_hour.items():
data['rate'] = data['opens'] / data['total']
# Find best hours
sorted_hours = sorted(engagement_by_hour.items(),
key=lambda x: x[1]['rate'],
reverse=True)
return sorted_hours[:3] # Top 3 hours
リストの衛生管理
エンゲージメントスコアリング
-- Calculate subscriber engagement score
SELECT
subscriber_id,
email,
COUNT(CASE WHEN event_type = 'open' THEN 1 END) as opens_30d,
COUNT(CASE WHEN event_type = 'click' THEN 1 END) as clicks_30d,
MAX(event_date) as last_activity,
CASE
WHEN COUNT(CASE WHEN event_type = 'open' THEN 1 END) >= 5 THEN 'highly_engaged'
WHEN COUNT(CASE WHEN event_type = 'open' THEN 1 END) >= 2 THEN 'engaged'
WHEN COUNT(CASE WHEN event_type = 'open' THEN 1 END) >= 1 THEN 'somewhat_engaged'
ELSE 'unengaged'
END as engagement_tier
FROM email_events
WHERE event_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY subscriber_id, email;
配信終了ポリシー
Re-engagement Campaign:
trigger: no_opens_60_days
sequence:
- Day 0: "We miss you" email
- Day 7: "Last chance" with offer
- Day 14: Final warning
action_after_sequence:
if: no_engagement
then: move_to_suppression_list
ツールの習熟度
ESP プラットフォーム
- SMB: Klaviyo、Mailchimp、ConvertKit
- ミッドマーケット: HubSpot、ActiveCampaign、Drip
- エンタープライズ: Salesforce Marketing Cloud、Marketo、Braze
トランザクションメール
- SendGrid、Postmark、Amazon SES、Mailgun
テストとプレビュー
- Litmus、Email on Acid
アナリティクス
- Google Analytics(UTM トラッキング)
- ESP 標準のアナリティクス
- カスタムデータウェアハウス
ベストプラクティス
- 許可に基づく運用 — 確認済みの購読者のみを対象にする
- セグメンテーション — 各セグメントに関連性の高いコンテンツを届ける
- テスト — 継続的に A/B テストを行う
- 自動化 — ライフサイクルメールを自動化する
- 配信到達性 — 送信者レピュテーションを監視する
- モバイルファースト — 開封の 60% 以上がモバイル端末
コメント
Markdown 対応