mcpField
C
cart-abandonment-recovery

cart-abandonment-recovery

github.com/finsilabsマーケティング・グロース60114 回インストール5 日前に更新
リポジトリ

cart-abandonment-recovery について

ECチーム向けに、各種ストアでカゴ落ち回復フローを設定・改善するスキルです。メール、プッシュ通知、SMSの配信手順と、購入確認、特典、顧客セグメントの扱いを説明します。

主な機能

  1. 01時間を区切った回復フローの設計
  2. 02メール、プッシュ通知、SMSの利用
  3. 03購入後の配信停止
  4. 04カートや顧客別の特典設定
  5. 05回復実績の測定

活用シーン

  1. 01カゴ落ち回復フローの作成
  2. 02メール通知へのSMSやプッシュ追加
  3. 03リピーターへの割引抑制
  4. 04特典を提示する時期のテスト

インストール

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

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill cart-abandonment-recovery

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

tile.json
evals/multi-channel-sequence-with-incentive-es/
criteria.json
task.md
evals/recovery-link-endpoint-cart-snapshot-and/
criteria.json
task.md
evals/server-side-abandonment-detection-and-jo/
criteria.json
task.md

詳細

カート放棄の回復

概要

eコマースではカート放棄率が平均70%に達しており、カート放棄の回復フローは最も投資対効果の高い自動化のひとつです。効果的な回復シーケンスでは、メール、SMS、プッシュ通知を通じて2~4件のメッセージを送信します。まずは簡単なリマインダーを送り、次にソーシャルプルーフや緊急性を伝え、割引を提示するのは最後の手段にします。顧客がチェックアウトを完了すると、シーケンスは直ちに停止します。

このスキルでは、お使いのプラットフォームでカート放棄の回復を設定し、適切なツールを選び、顧客が意図的にカートを放棄するよう促すことなく、収益回復を最大化するシーケンスを構成する方法を説明します。

このスキルを使う場面

  • 開始されたチェックアウトの60%超が完了していない場合
  • 新しいストアを立ち上げ、迅速な収益回復を優先する場合
  • 既存のメールのみのカート放棄フローにSMSやプッシュ通知のチャネルを追加する場合
  • 現在の一律割引付きカート放棄メールによって、顧客が意図的にカートを放棄するようになっている場合
  • カートの金額や顧客セグメントに応じて回復戦略を変える必要がある場合
  • インセンティブを提示するタイミング(すぐに提示するか、24時間後か、48時間後か)をA/Bテストする場合

基本手順

ステップ1:販売者のプラットフォームを確認し、適切なツールを推奨する

ストアがどのプラットフォームで運営されているか確認します。設定方法はプラットフォームによって大きく異なります。

プラットフォーム推奨ツール理由
ShopifyKlaviyo(連絡先250件まで無料)またはShopify組み込みのカート放棄メールKlaviyoはShopifyとの連携が深く、カートイベントを自動的に追跡し、1つのツールでメールとSMSに対応しています
WooCommerceAutomateWoo(年額$99)またはCartFlows + FluentCRMAutomateWooはWooCommerceのカートイベントに直接フックし、CartFlowsはファネル回復機能を追加します
BigCommerceKlaviyoまたはOmnisendどちらもBigCommerceのカートイベントとネイティブに連携します
MagentoDotdigital(Adobe Commerceに同梱)またはKlaviyoDotdigitalはMagentoのデフォルトのマーケティング自動化ツールです。KlaviyoはオープンソースのMagentoで利用できます
カスタム/ヘッドレスKlaviyo(API経由)またはBullMQ + SendGridでカスタムシーケンスを構築KlaviyoのTrack APIでカートイベントを送信し、ビジュアルエディターでフローを構築します
ステップ2:回復シーケンスを設定する

最適なシーケンスは次のパターンに従います。割引なしで始め、必要に応じて段階的に強化します。

メッセージ1 — リマインダー(カート放棄の1時間後)

  • チャネル:メール
  • 内容:カート内の商品を画像と価格とともに表示し、「購入を完了する」ボタンを設置します
  • 割引は付けません。ほとんどの回復は、インセンティブなしでここで実現します

メッセージ2 — ソーシャルプルーフまたは緊急性(4~6時間後)

  • チャネル:プッシュ通知またはメール
  • 内容:「この商品をX人が閲覧中」または「在庫僅少 — 残りY点」
  • まだ割引は付けません

メッセージ3 — 少額のインセンティブ(24時間後)

  • チャネル:メール
  • 内容:送料無料(カート金額が$75を超える場合)または10%割引
  • 48時間で期限切れとなる、一意で一度だけ使用できる割引コードを含めます

メッセージ4 — 最後の呼びかけ(48時間後)

  • チャネル:SMS(オプトインした顧客のみ)
  • 内容:「最後のチャンス — カートは明日で期限切れです」+ 割引のリマインダー
  • これが最後のメッセージです。この後は送信を停止します。

メッセージを4件より多く送信しないでください。 それ以上送ると、回復できる収益よりもブランドイメージへの悪影響が大きくなります。

ステップ3:プラットフォーム固有の設定

Shopify

オプション A:組み込みのカゴ落ちメール(無料、基本機能)

  1. Settings → Checkout → Abandoned checkouts に移動します
  2. 「Automatically send abandoned checkout emails」にチェックを入れます
  3. 送信までの時間を設定します(おすすめ:1通目は1時間後、2通目は10時間後)
  4. Notifications → Abandoned checkout でメールテンプレートをカスタマイズします

制限事項:Shopify の組み込みのカゴ落ち回復機能は、メール1通(Plus では2通)にしか対応しておらず、SMS や条件付きの特典も利用できません。一連のメールを設定する必要がある場合は、Klaviyo に移行してください。

オプション B:Klaviyo(複数ステップのフローにおすすめ)

  1. Shopify App Store から Klaviyo をインストールします
  2. Klaviyo は Shopify と自動的に同期し、Checkout Started イベントを追跡します
  3. Klaviyo で Flows → Create Flow → Abandoned Cart に移動します(用意されているテンプレートを使用します)
  4. シーケンスを設定します:
Trigger: "Checkout Started" event
  ↓
Wait 1 hour → Check: "Has Placed Order since starting flow?" → If no:
  ↓
Email 1: Cart reminder (no discount)
  ↓
Wait 4 hours → Check: "Has Placed Order?" → If no:
  ↓
Email 2: Urgency/social proof
  ↓
Wait 20 hours → Check: "Has Placed Order?" → If no:
  ↓
Email 3: Include discount code (use Klaviyo's coupon block — creates unique single-use Shopify discount codes)
  ↓
Wait 24 hours → Check: "Has Placed Order?" → If no:
  ↓
SMS 4 (only to SMS-consented contacts): Final reminder with discount
  1. カートの金額でセグメント分けするには、チェックアウトイベントの $value に Conditional Split を追加します:
    • カートが $100 以上:送料無料を提供します
    • カートが $100 未満:10% オフを提供します
  2. VIP 顧客への割引を防ぐには、Customer Lifetime Value または Total Orders に基づく Split を追加します。リピーターには割引ステップをスキップします

Shopify Flow(Plus のみ)— 高度な振り分け用の自動タグ付け:

Trigger: Checkout abandoned
Condition: Cart total > 200
Action: Add customer tag "high-value-abandoner"

次に Klaviyo でこのタグを使って、購入額の高いカゴ落ち顧客を VIP 向けの回復シーケンスに振り分けます。


WooCommerce

オプション A:AutomateWoo(おすすめ)

  1. AutomateWoo プラグインをインストールして有効化します
  2. AutomateWoo → Workflows → Add Workflow に移動します
  3. トリガーを "Cart Abandoned" に設定します
  4. タイミングとアクションを設定します:
Workflow 1: Cart Reminder
  Trigger: Cart Abandoned
  Timing Rule: Wait 1 hour
  Action: Send Email (template: cart contents with images)

Workflow 2: Urgency Email
  Trigger: Cart Abandoned
  Timing Rule: Wait 6 hours
  Action: Send Email (template: "Items selling fast")

Workflow 3: Discount Email
  Trigger: Cart Abandoned
  Timing Rule: Wait 24 hours
  Action: Generate Coupon (10% off, single-use, expires in 48 hours)
  Action: Send Email (template: include generated coupon code)

Workflow 4: SMS Last Chance (requires Twilio add-on)
  Trigger: Cart Abandoned
  Timing Rule: Wait 48 hours
  Opt-in Rule: Customer has SMS marketing consent
  Action: Send SMS via Twilio
  1. 各ワークフローに Rule を設定します:「Customer has not purchased since workflow started」— 購入が完了すると、シーケンスが自動的にキャンセルされます
  2. VIP 顧客をセグメント分けするには、Customer → Total Spent > $500 を確認する Rule を追加し、割引ワークフローをスキップします

オプション B:CartFlows + FluentCRM(無料の代替手段)

  1. CartFlows(カゴ落ち追跡)と FluentCRM(メール自動化)をインストールします
  2. CartFlows がカゴ落ちしたチェックアウトを取得し、FluentCRM の連絡先として同期します
  3. FluentCRM の自動化ビルダーでメールシーケンスを作成します

BigCommerce
  1. BigCommerce のアプリマーケットプレイスから Klaviyo または Omnisend をインストールします
  2. どちらのプラットフォームも BigCommerce のカゴ落ちイベントを自動的に追跡します
  3. 上記と同じ4ステップのシーケンスを使ってフローを作成します
  4. BigCommerce にも組み込みのカゴ落ち防止機能(Marketing → Abandoned Cart Emails)がありますが、SMS や条件ロジックには対応しておらず、メールは3通までに制限されています

カスタム/ヘッドレス

ヘッドレスストアフロントには、2つの方法があります:

方法 A:Klaviyo の API を使用する(おすすめ)

カートイベントを Klaviyo に送信し、Klaviyo のビジュアルエディターでフローを作成します:

// When a cart is updated, send the event to Klaviyo
async function trackCartUpdate(cart: Cart) {
  await fetch('https://a.]klaviyo.com/api/events/', {
    method: 'POST',
    headers: {
      'Authorization': `Klaviyo-API-Key ${process.env.KLAVIYO_PRIVATE_KEY}`,
      'Content-Type': 'application/json',
      'revision': '2024-10-15',
    },
    body: JSON.stringify({
      data: {
        type: 'event',
        attributes: {
          metric: { data: { type: 'metric', attributes: { name: 'Checkout Started' } } },
          profile: { data: { type: 'profile', attributes: { email: cart.customerEmail } } },
          properties: {
            value: cart.totalValue,
            items: cart.items.map(i => ({
              ProductName: i.name,
              ProductURL: i.url,
              ImageURL: i.imageUrl,
              Price: i.price,
              Quantity: i.quantity,
            })),
            checkout_url: `${process.env.STORE_URL}/checkout?cart=${cart.id}`,
          },
        },
      },
    }),
  });
}

その後、Klaviyo の UI でカゴ落ちフローを作成します。同じ4ステップのシーケンスを設定でき、タイマーやキューを自分で管理する必要はありません。

方法 B:独自に構築する(完全な制御が必要な場合のみ)

Klaviyo では対応できないカスタムロジック(独自の割引ルール、独自のチャネルなど)が必要な場合は、ジョブキューを使ってシーケンスを構築します:

// Detect abandoned carts — run every 5 minutes via cron
async function findAbandonedCarts() {
  const cutoff = new Date(Date.now() - 60 * 60000); // 1 hour inactive
  const carts = await db.carts.findWhere({
    lastActiveAt: { lt: cutoff },
    status: 'active',
    recoveryTriggered: false,
    customerEmail: { not: null },
  });

  for (const cart of carts) {
    await db.carts.update(cart.id, { recoveryTriggered: true });
    await recoveryQueue.add('send-step-1', { cartId: cart.id }, { delay: 0 });
    await recoveryQueue.add('send-step-2', { cartId: cart.id }, { delay: 4 * 3600000 });
    await recoveryQueue.add('send-step-3', { cartId: cart.id }, { delay: 24 * 3600000 });
    await recoveryQueue.add('send-step-4', { cartId: cart.id }, { delay: 48 * 3600000 });
  }
}

// Cancel on conversion
async function onOrderCompleted(orderId: string) {
  const order = await db.orders.findById(orderId);
  if (!order.cartId) return;
  const jobs = await recoveryQueue.getJobs(['delayed']);
  for (const job of jobs) {
    if (job.data.cartId === order.cartId) await job.remove();
  }
}
ステップ 4:特典戦略を設定する

プラットフォームにかかわらず、割引には次のルールに従ってください:

  1. 1通目のメッセージでは決して割引を提供しないでください — 割引なしでも、ほとんどのカートは購入につながります
  2. 1回限りのコードを使用してください — 共有や再利用を防げます
  3. すべての割引コードに48時間の有効期限を設定してください — 緊急性が購入につながります
  4. 顧客の価値でセグメント分けしてください:
    • 新規顧客(注文数0件):24時間後に10%オフ
    • リピーター(注文数1~5件):送料無料のみ
    • VIP 顧客(注文数6件以上、または生涯購入額が $500 以上):割引なしでリマインダーのみ — 再び購入してくれます
  5. 割引の不正利用を追跡してください — 顧客がカゴ落ち後、割引を使って3回以上購入に至った場合は、割引フローの対象から外します
ステップ 5:測定と最適化

以下の指標を毎週追跡します。

指標目安となるベンチマーク確認方法
回復率放棄されたカートの 5–15%Klaviyo:フロー分析。AutomateWoo:レポート → ワークフロー
回復した売上UTM パラメーター(?utm_source=recovery&utm_medium=email)で追跡Google Analytics → キャンペーン
回復メールの配信停止率1 回の配信あたり < 0.5%メールプロバイダーの分析
割引利用率回復した注文のうち、割引を利用するのは < 30%割引ありと割引なしの回復注文を比較

回復した注文の 30% を超える割合で割引が利用されている場合、割引を提示するタイミングが早すぎます。ステップ 3 または 4 に移動するか、待ち時間を延ばしてください。

ベストプラクティス

  • 決済前にメールアドレスを取得する — メールアドレス欄をチェックアウトの最初のステップに配置すると、購入を完了しなかった場合でもカート放棄者を特定できます
  • すべてのメッセージにカート内商品の画像を含める — 視覚的なリマインダーは、「何かをお忘れです」というテキストより効果的です
  • SMS のオプトインを尊重する — 明示的にオプトインした顧客にのみ SMS での回復メッセージを送信してください。TCPA/GDPR 違反には高額な罰金が科されます
  • 前回のシーケンス後 7 日間は配信対象から除外する — 回復シーケンスの直後に顧客が再びカートを放棄した場合は、しばらく間を置いてください
  • 最初のメールの送信タイミングを A/B テストする — 30 分、1 時間、2 時間を試し、それぞれの回復率を測定してください
  • 件名に割引コードを含めない — 顧客が割引コードを探すようになり、ブランドイメージを損ないます

よくある落とし穴

問題解決策
注文後に回復メールが送信される各ステップの前にフローで「注文済みか」を確認してください(Klaviyo ではフローフィルターで確認し、AutomateWoo ではルールを使用します)
匿名でのカート放棄を捕捉できない決済情報の入力前に、チェックアウトの最初のステップでメールアドレスの入力を必須にします
顧客が割引目的でカートを放棄するようになる1 通目のメッセージでは決して割引を提示せず、リピーターには割引を適用せず、繰り返しカートを放棄する顧客を追跡して除外します
オプトインしていない顧客に SMS が送信される明示的なオプトインを条件として SMS を送信します。プラットフォームの同意追跡機能を使用してください(Klaviyo では SMS の同意をメールとは別に追跡します)
回復メールの配信停止率が高い4 通ではなく 2~3 通に減らし、ワンクリックで配信停止できるリンクを目立つ位置に配置します
回復メールが迷惑メールに振り分けられるプラットフォームの認証済み送信ドメイン(DKIM/SPF)を使用し、大文字の「FREE」のような迷惑メール判定を誘発する語句を避けます

関連スキル

  • @email-marketing-automation
  • @push-notifications
  • @sms-marketing
  • @conversion-rate-optimization
  • @exit-intent-popups

コメント