📌

Shopifyで会員ランクを設定する方法を考察

2024/08/16に公開

はじめに

今回は、Shopify で会員ランクを実装する方法を考察してみました。

メタフィールドを用いて実装する方法や、Webhookを用いて実装する方法を考察しました。

それでは、頑張っていきましょう。

会員ランクの定義

まずは、会員ランクの定義からです。

会員ランクは、顧客をいくつかのグループに分類し、それぞれのグループに応じた特典やサービスを提供するための仕組みです。通常、会員ランクは顧客の購入履歴や総購入額、購買頻度などの指標に基づいて決定されます。これにより、ショップは顧客のロイヤルティを高め、継続的な購買を促進することができます。

具体的に書くと、累計購入金額や累計購入回数に応じて、異なる顧客タグを付与する、等を指します。

Shopifyに会員ランクを導入するメリット

まずは、Shopify に会員ランクを導入するメリットについて解説していきます。

会員ランクを導入するメリットが無いと、考察する意味があまり無いですからね。

Shopifyストアに会員ランクシステムを導入することは、顧客ロイヤルティの向上や売上の増加を図るために非常に効果的な方法です。顧客を特定のランクに分類し、ランクに応じた特典やサービスを提供することで、顧客の購買意欲を刺激し、ビジネス全体の成長を促進します。以下に、Shopifyに会員ランクを導入する主なメリットについて解説します。

1. 顧客ロイヤルティの向上

会員ランクを導入することで、顧客に対して特別な待遇や特典を提供できます。顧客がより高いランクを目指すことで、ストアに対する忠誠心が強まり、リピート購入の確率が高まります。これにより、顧客が他の競合ストアに流れるリスクを減らし、長期的な顧客関係を築くことが可能となります。

2. 売上の増加

会員ランクシステムは、顧客に対して継続的な購入を促す強力なインセンティブを提供します。たとえば、一定の購入金額を達成すると次のランクに昇格し、さらに大きな割引や特典を受けられるといった仕組みです。このように顧客がランクアップを目指すことで、自然と購買頻度が増加し、結果として売上が向上します。

3. パーソナライズされたマーケティングの強化

会員ランクを導入することで、顧客データをより詳細に分析し、各ランクの顧客に対して適切なマーケティング戦略を展開することができます。たとえば、上位ランクの顧客には限定オファーや特別イベントへの招待を送るなど、パーソナライズされたコミュニケーションが可能になります。これにより、顧客一人ひとりに対してより価値ある体験を提供し、エンゲージメントを高めることができます。

4. 競争優位性の確立

多くのオンラインストアが乱立する中で、会員ランクシステムは競争優位性を確立するための重要な要素となります。顧客に対して一貫した特典を提供し続けることで、他のストアとの差別化を図り、顧客が再度訪れる理由を提供できます。これにより、ブランドの認知度を高め、顧客の忠誠度を維持することができます。

5. 顧客のライフタイムバリューの向上

会員ランクシステムを導入することで、顧客のライフタイムバリュー(LTV)を向上させることができます。LTVとは、顧客が生涯を通じてストアにもたらす総利益を指します。高いランクに昇格するためのインセンティブは、顧客がより多くの購入を行う動機付けとなり、結果としてLTVが向上します。これにより、長期的な収益性が改善されます。

それでは次に、会員ランクを導入するデメリットについて解説していきます。

Shopifyに会員ランクを導入するデメリット

Shopify に会員ランクを導入するデメリットについて解説します。

Shopifyのストアに会員ランクシステムを導入することには多くのメリットがありますが、同時にいくつかのデメリットや課題も存在します。これらのデメリットを理解し、適切に対策を講じることが重要です。以下に、Shopifyに会員ランクを導入する際の主なデメリットについて解説します。

1. 運用と管理の負担増加

会員ランクシステムを導入すると、顧客のランクを正確に管理するための追加の作業が発生します。各顧客の購入履歴や活動状況を追跡し、ランクを適切に更新するためのリソースが必要です。また、ランクごとの特典や割引を適用する際には、システムが正しく機能しているかを常に監視する必要があります。これにより、ストア運営者にとって管理の負担が増加する可能性があります。

2. 顧客間の不公平感

会員ランクシステムは、特定の顧客に対して優遇措置を提供するため、一部の顧客に不公平感を抱かせるリスクがあります。特に、低ランクの顧客が高ランクの特典を目にすると、自分が疎外されていると感じることがあります。このような不満が広がると、ストア全体のイメージに悪影響を及ぼす可能性があります。

3. システムの複雑化

会員ランクシステムを導入すると、ストアのシステム全体が複雑化することがあります。特に、ランクに応じた異なる価格設定や割引の適用、顧客ごとの特典のカスタマイズなどが必要になるため、ストアの構成が複雑になります。これにより、システムエラーが発生しやすくなり、顧客体験が損なわれるリスクが増加します。

4. コストの増加

会員ランクシステムの導入には、開発や維持管理にかかるコストが発生します。特に、サードパーティのアプリを利用する場合、その利用料金が発生することが一般的です。また、特典として提供する割引や無料ギフトのコストも考慮する必要があります。これにより、ストアの運営コストが増加し、利益率に影響を与える可能性があります。

5. 顧客期待の過度な高まり

会員ランクシステムによって、顧客の期待値が過度に高まるリスクがあります。特に上位ランクの顧客は、より一層の特別待遇を期待することがあり、その期待に応えられない場合、顧客満足度が低下する可能性があります。さらに、顧客がランクアップを目指して意図的に購入を控えるなどの行動をとることも考えられます。

それでは次に、会員ランクを導入する方法について考察していきましょう。

会員ランクの実装方法

それではここから、会員ランクの実装方法について考察していきます。

今回の会員ランクの機能としては、顧客の累計購入金額や累計購入回数に応じて、自動的に顧客にタグをつける、というものになります。

こちらの顧客への自動タグ付けは、webhookを用いて行うことができそうですね。

会員ランクを実装するためのWebhook の実装

それでは、Shopify で会員ランクを実装するための webhook を実装していきましょう。

以下の Shopify の公式ドキュメントから、該当のwebhookのトピックを探しましょう。

https://shopify.dev/docs/api/admin-graphql/2024-07/enums/WebhookSubscriptionTopic

こちらのwebhookのトピックの内、ORDERS_CREATEのトピックを使用できそうです。

累計購入金額や累計購入回数が変化するのは、顧客が注文を行ったときだけですからね。

metaobjects/create イベント用の webhook トピック。メタオブジェクトが作成されたときに発生します。read_metaobjects スコープが必要です。

それでは、webhook のトピックが分かったので、以下のドキュメントから webhook のリクエストボディを確認しましょう。

https://shopify.dev/docs/api/admin-rest/2024-07/resources/webhook#event-topics

以下の、orders/createwebhookが利用できそうですね。

リクエストボディは、以下のような形式になります。

非常に長いので、途中で省略しています。

{
  "id": 820982911946154508,
  "admin_graphql_api_id": "gid://shopify/Order/820982911946154508",
  "app_id": null,
  "browser_ip": null,
  "buyer_accepts_marketing": true,
  "cancel_reason": "customer",
  "cancelled_at": "2021-12-31T19:00:00-05:00",
  "cart_token": null,
  "checkout_id": null,
  "checkout_token": null,
  "client_details": null,
  "closed_at": null,
  "confirmation_number": null,
  "confirmed": false,
  "contact_email": "jon@example.com",
  "created_at": "2021-12-31T19:00:00-05:00",
  "currency": "USD",
  "current_subtotal_price": "398.00",
  "current_subtotal_price_set": {
    "shop_money": {
      "amount": "398.00",
      "currency_code": "USD"
    },
    "presentment_money": {
      "amount": "398.00",
      "currency_code": "USD"
    }
  },
  "current_total_additional_fees_set": null,
  "current_total_discounts": "0.00",
  "current_total_discounts_set": {
    "shop_money": {
      "amount": "0.00",
      "currency_code": "USD"
    },
    "presentment_money": {
      "amount": "0.00",
      "currency_code": "USD"
    }
  },
  "current_total_duties_set": null,
  "current_total_price": "398.00",
  "current_total_price_set": {
    "shop_money": {
      "amount": "398.00",
      "currency_code": "USD"
    },
    "presentment_money": {
      "amount": "398.00",
      "currency_code": "USD"
    }
  },
  "current_total_tax": "0.00",
  "current_total_tax_set": {
    "shop_money": {
      "amount": "0.00",
      "currency_code": "USD"
    },
    "presentment_money": {
      "amount": "0.00",
      "currency_code": "USD"
    }
  },
  "customer_locale": "en",
  "device_id": null,
  "discount_codes": [

  ],
  "email": "jon@example.com",
  "estimated_taxes": false,
  "financial_status": "voided",
  "fulfillment_status": "pending",
  "landing_site": null,
  "landing_site_ref": null,
  "location_id": null,
  "merchant_of_record_app_id": null,
  "name": "#9999",
  "note": null,
  "note_attributes": [

  ],
  "number": 234,
  "order_number": 1234,
  "order_status_url": "https://jsmith.myshopify.com/548380009/orders/123456abcd/authenticate?key=abcdefg",
  "original_total_additional_fees_set": null,
  "original_total_duties_set": null,
  "payment_gateway_names": [
    "visa",
    "bogus"
  ],
  "phone": null,
  "po_number": null,
  "presentment_currency": "USD",
  "processed_at": "2021-12-31T19:00:00-05:00",
  "reference": null,
  "referring_site": null,
  "source_identifier": null,
  "source_name": "web",
  "source_url": null,
  "subtotal_price": "388.00",
  "subtotal_price_set": {
    "shop_money": {
      "amount": "388.00",
      "currency_code": "USD"
    },
    "presentment_money": {
      "amount": "388.00",
      "currency_code": "USD"
    }
  },
  "tags": "tag1, tag2",
  "tax_exempt": false,
  "tax_lines": [

  ],
...
}

こちらの情報を利用すれば、注文を行った顧客に対して自動でタグ付けを行うことができそうですね。

顧客へのタグ付けを行う際には、以下のtagsAddのGraphQL API を実行すれば、Shopify で会員ランクを実現できそうです。

https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/tagsadd

サンプルコードはこちらになります。

mutation addTags($id: ID!, $tags: [String!]!) {
  tagsAdd(id: $id, tags: $tags) {
    node {
      id
    }
    userErrors {
      message
    }
  }
}

これで、該当の顧客に自動タグ付けを行う部分は実装できそうですね。

今度は、どの条件でどのタグを付与するのかを設定するためのデータを格納していきましょう。

そのような場合は、shopのメタフィールドに値を格納していくことになります。

Shop オブジェクトにどの条件でどのタグを付与するのかのデータを設定

shop オブジェクトは、以下のドキュメントに記載されています。

https://shopify.dev/docs/api/admin-graphql/2024-07/objects/Shop

こちらから、shop オブジェクトのメタフィールドに値を設定していきましょう。

以下が、設定するメタフィールドのサンプルになります。

{
    "conditions": [
      {
        "min": number,
        "max": number | null,
        "tag": string,
      }
    ]
}

上記のデータを shop のメタフィールドに格納しましょう。

こちらの shop のメタフィールドは、webhookの中で取得できます。

orders/createwebhookのリクエストボディと、こちらの shop のメタフィールドの情報を使用すれば、顧客にどのタグをつけるべきかどうかを判定することができますね。

shopのメタフィールドは Shopify の管理画面から操作することができないので、以下のmetafieldSet の GraphQL API を利用することになります。

https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/metafieldsSet

以下が、サンプルコードになります。

mutation MetafieldsSet($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      key
      namespace
      value
      createdAt
      updatedAt
    }
    userErrors {
      field
      message
      code
    }
  }
}
{
  "metafields": [
    {
      "key": "materials",
      "namespace": "my_fields",
      "ownerId": "gid://shopify/Product/20995642",
      "type": "multi_line_text_field",
      "value": "95% Cotton\n5% Spandex"
    },
    {
      "key": "manufactured",
      "namespace": "my_fields",
      "ownerId": "gid://shopify/Product/20995642",
      "type": "single_line_text_field",
      "value": "Made in Canada"
    }
  ]
}

こちらを用いて、shop のメタフィールドを設定していきましょう。

ここまでで、Shopify で会員ランクを実装する方法についての解説は終了です。

後はカスタムアプリを使って Webhook 等を設定していけば、Shopify で会員ランクを設定できるかと思います。

しかし、非エンジニアの方には難しいかと思いますので、Shopify アプリを用いて会員ランクを実装する方法についても紹介します。

Shopify アプリを使って会員ランクを実装する方法

それでは、Shopify アプリを使って会員ランクを実装する方法を紹介します。

今回紹介するのは、シンプル会員ランク|お手軽顧客タグ付けというアプリです。

以下が、Shopify 公式のアプリストアです。

https://apps.shopify.com/shopify-application-396?locale=ja

以下の記事を参考にしています。

https://zenn.dev/natsume_katu/articles/f53f819be99c76

https://unreact.jp/blog/shopify-app-customer-rank-app

https://unreact.jp/shopify-apps/sa-012-ur-customer-rank/guide

https://qiita.com/eijiSaito/items/cbf3be145e01ea9abd59

https://unblog.unreact.jp/blog/ilkvnpf6a

それでは、こちらのアプリの機能について紹介していきます。

シンプル会員ランク|お手軽顧客タグ付けの機能ついて

シンプル会員ランク|お手軽顧客タグ付けは、累計購入金額や累計購入回数に応じて、自動的に顧客タグ付けを行えるアプリです。

累計購入金額による会員ランク、もしくは累計購入回数による会員ランクの設定が可能です。

こちらのアプリは、ランク保存時に条件を満たす顧客に自動でタグ付けを行えます。

恐らく、以下の Customer API を用いて実装されています。

https://shopify.dev/docs/api/admin-rest/2024-01/resources/customer

また、ダッシュボードでランク別の顧客数を確認できます。

非常にシンプルで使いやすい会員ランクアプリなので、カスタムアプリを用いて会員ランク機能を実装するのが難しい場合は選択肢の一つに入ってくるかと思います。

https://apps.shopify.com/shopify-application-396?locale=ja

最後に

今回は、カスタムアプリを作成して会員ランク機能を実装する方法と、Shopify のアプリを用いて会員ランク機能を導入する方法の二つを紹介しました。

お疲れさまでした。

Discussion