Shopify コーディング

【Shopify】アプリ不要!追従クーポンバナーをコードで実装する方法【かご落ち対策】

Shopifyストアの売上を上げるための鉄板施策といえば「クーポン」ですが、こんな悩みはありませんか?

「クーポンを発行したのに、お客様が気づいてくれない」
「告知バーだと見落とされるし、ポップアップアプリは月額費用が高い…」

せっかくのお得なオファーも、決済画面に行くまで気づかれなければ意味がありません。
そこで今回は、アプリを一切使わず、コピペだけで実装できる「追従型クーポンバナー」の作り方を公開します。

このカスタマイズを行えば、スクロールしても常に画面の隅に「クーポン」が表示され、クリックするだけで自動的に割引が適用されるようになります。
カゴ落ち対策や客単価アップに非常に効果的ですので、ぜひ試してみてください。

実装する機能の完成イメージ

今回実装するのは、以下のような仕様の高機能バナーです。

【このカスタマイズのポイント】

  • PC/スマホ完全対応:PCでは大きく目立たせ、スマホでは操作の邪魔にならない位置に最適化。
  • 自動適用リンク:クリックすると「クーポン適用済み」の状態で元の画面に戻ります。
  • しつこくない制御:一度閉じるかクリックすると、ブラウザを閉じるまで再表示されません(嫌われない仕様)。
  • アプリ不要:月額0円。サイトの表示速度もアプリより高速です。

実装手順

手順は大きく分けて以下の3ステップです。

  1. Shopify管理画面でクーポンを作成する(重要)
  2. 新しいスニペットファイルを作成する
  3. コードをコピペしてテーマに読み込ませる

ステップ1:クーポン(ディスカウント)を作成する

まずはバナーをクリックした時に適用される「クーポン」そのものをShopifyで発行します。
ここでの設定を忘れると、バナーを押しても割引が適用されないので注意してください。

  1. Shopify管理画面の [ディスカウント] をクリックします。
  2. [ディスカウントを作成] をクリックし、[無料配送](または注文の割引など)を選択します。
  1. 「ディスカウントコード」 の欄に、お好きなコードを入力します。
    ※ここで決めたコード(例:FREE-SHIPPING202512)を後で使いますので、コピーしておいてください。
  2. 「国(すべての国)」「最低購入金額(なし)」など、条件を自由に設定して [保存] します。

ステップ2:新しいスニペットを作成する

次に、バナーを表示するためのファイルを作成します。

  1. Shopify管理画面から [オンラインストア] > [テーマ] に進みます。
  2. […] > [コードを編集] をクリックします。
  3. 左側のフォルダ一覧から [Snippets] を探し、[新しいスニペットを追加する] をクリックします。
  4. ファイル名に c_coupon-banner と入力して完了します。

ステップ3:コードをコピペする

作成した c_coupon-banner.liquid に、以下のコードを丸ごとコピーして貼り付けてください。

{% comment %}
  ファイル名: c_coupon-banner.liquid
  機能: クーポン風デザイン追従バナー。PC特大・スマホ最適化・セッション制御付き。
{% endcomment %}

<!-- ★設定:ここにステップ1で作ったクーポンコードを入力してください -->
{% assign coupon_code = "FREE-SHIPPING202512" %} 

<style>
  /* --- PC / 基本スタイル --- */
  #sticky-coupon-banner {
    position: fixed;
    bottom: 30px;
    right: 30px;
    z-index: 2147483647; /* 最前面 */

    /* 初期状態は非表示(アニメーション用) */
    opacity: 0;
    visibility: hidden;
    transform: translateY(20px);
    transition: all 0.4s ease;

    /* デザイン:チケット風 */
    background-color: #d32f2f; /* 赤色 */
    color: #fff;
    box-shadow: 0 6px 20px rgba(0,0,0,0.4);
    border-radius: 12px;
    padding: 5px;
    width: 400px;
    max-width: 90vw;
    cursor: pointer;
    text-align: center;
  }

  /* 破線枠のデザイン */
  .coupon-inner {
    border: 2px dashed #fff;
    border-radius: 8px;
    padding: 20px 10px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
  }

  /* 表示時のクラス */
  #sticky-coupon-banner.is-visible {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
  }

  #sticky-coupon-banner:hover {
    background-color: #b71c1c;
    transform: scale(1.02);
  }

  #sticky-coupon-banner a {
    color: inherit;
    text-decoration: none;
    display: block;
    width: 100%;
    height: 100%;
  }

  /* PC用テキストサイズ */
  .coupon-date { font-size: 18px; font-weight: bold; color: #ffeb3b; line-height: 1.2; }
  .coupon-main-text { font-size: 24px; font-weight: 900; line-height: 1.2; }
  .coupon-note { font-size: 11px; opacity: 0.9; margin-top: 5px; line-height: 1.2; }

  /* --- スマホ用の調整 --- */
  @media screen and (max-width: 767px) {
    #sticky-coupon-banner {
      /* 下部メニューを避けて少し上に配置 */
      bottom: 85px; 
      right: 10px;
      left: auto;

      width: auto;
      max-width: 170px; /* 右寄せコンパクト */
      padding: 3px;
      border-radius: 8px;
    }

    .coupon-inner { padding: 10px 5px; border-width: 1px; gap: 4px; }
    .coupon-date { font-size: 10px; }
    .coupon-main-text { font-size: 15px; }
    .coupon-note { font-size: 9px; transform: scale(0.9); }

    #sticky-coupon-banner:hover { transform: translateY(-2px); }
  }
</style>

<div id="sticky-coupon-banner">
  <!-- リンク:クーポン適用後に元のページに戻る -->
  <a href="/discount/{{ coupon_code }}?redirect={{ request.path }}" id="coupon-click-link">
    <div class="coupon-inner">

      <!-- 1. 期間やキャッチ -->
      <div class="coupon-date">
        \期間限定セール/
      </div>

      <!-- 2. メイン文言 -->
      <div class="coupon-main-text">
        🎁 送料無料クーポン
      </div>
      <div class="coupon-main-text">
        👉 クリックして取得
      </div>

      <!-- 3. 注釈 -->
      <div class="coupon-note">
        ※対象外の商品を除く
      </div>

    </div>
  </a>
</div>

<script>

  document.addEventListener("DOMContentLoaded", function() {
    var banner = document.getElementById('sticky-coupon-banner');
    var link = document.getElementById('coupon-click-link');
    var storageKey = 'coupon_used_' + '{{ coupon_code }}'; 

    // ブラウザを閉じるまで非表示を維持(sessionStorage)
    if (sessionStorage.getItem(storageKey) === 'true') {
      banner.style.display = 'none';
      return;
    }

    // 読み込み0.5秒後にフワッと表示
    setTimeout(function() {
      banner.classList.add('is-visible');
    }, 500);

    // クリックしたら消す&使用済みフラグを立てる
    link.addEventListener('click', function() {
      sessionStorage.setItem(storageKey, 'true');
      banner.classList.remove('is-visible');
    });
  });
</script>

ステップ4:theme.liquid で読み込む

最後に、このファイルを全ページで読み込ませます。

Layout フォルダにある theme.liquid を開き、一番下の方にある </body> タグの直前に、以下の1行を追加して保存してください。

{% render 'c_coupon-banner' %}

これで実装は完了です!
サイトをプレビューして、赤いクーポンバナーが表示されるか確認してみてください。

クーポンを押し、商品をカート⇒決済で自動的にディスカウントが効く仕様です。

このコードの優れたポイント

1. クリックするだけでクーポン適用&元の画面へ

通常のクーポンリンクはトップページに飛ばされてしまうことが多いですが、このコードでは ?redirect={{ request.path }} という記述を入れることで、「今見ているページに戻ってくる」動きを実現しています。
商品ページを見ている途中でバナーを押しても、迷子にならずにそのまま買い物を続けられるため、UX(ユーザー体験)を損ないません。

2. スマホでの「メニュー被り」を回避

スマホでは画面下部に「固定フッターメニュー」があるサイトが多いですが、単純な固定バナーだとそれに被ってしまいます。
このコードではCSSで bottom: 85px; と指定し、メニューの上に浮くように調整しています。また、横幅も「右寄せコンパクト」にしているため、大事な商品情報を隠しません。

3. ブラウザを閉じるまでは「再表示しない」

一度「×」を押したりクーポンを取得したお客様に対して、ページ移動のたびにバナーが出るとストレスになります。
今回は sessionStorage という機能使い、「ブラウザ(タブ)を開いている間は、一度消したらもう出さない。でも後日また来た時には出す」という絶妙な制御を入れています。

まとめ

いかがでしたでしょうか。
Shopifyのアプリを使わなくても、少しのコードでこれだけ高機能な販促バナーが作れます。

特に「送料無料」などの強力なオファーがある場合は、お客様に気づいてもらえなければ損です。
ぜひこの追従バナーを実装して、ストアの転換率(CVR)アップに役立ててください!

-Shopify, コーディング
-,

Copyright© ゆるふわなねこ , 2025 All Rights Reserved.