セールを告知しても、お客様が「あとで買えばいいか」とページを閉じてしまえば売上にはつながりません。締め切りがあることを知っていても、商品一覧やカートを見ているうちに忘れてしまうのはよくあることです。そこで効くのが、どのページを見ていても視界に入る「残り時間」の表示です。
この記事では、UnReact が提供する Shopify アプリ「シンプル追従カウントダウンタイマー|お手軽あと何日表示」を、管理画面の画面ごと、テーマエディタの設定項目ごとに 1 つ残らず解説します。どの設定を変えるとストアの見え方がどう変わるのか、画面には書かれていない動きの決まり(バーを閉じたお客様にいつまた表示されるのか、タイマーはどの時計で数えるのか)まで、実装に沿って説明します。
後半では、同じ仕組みを Liquid と JavaScript で自作する場合のコード例も紹介します。アプリを入れるか、自分で作るかを判断する材料にしてください。
シンプル追従カウントダウンタイマーは、ストアの画面の上部または下部にカウントダウンバーを固定表示する Shopify アプリです。バーには「セール終了まで」のような説明テキスト、残り時間のタイマー、セール会場へ案内する CTA ボタン、閉じるボタンが横一列に並びます。お客様がページをスクロールしてもバーは画面の端に付いてくるので、締め切りが常に目に入ります。

アプリの管理画面では、テーマへの追加と管理画面の言語切り替えだけを行います。バーの位置・色・タイマーの種類・文言といった見た目と動きは、すべて Shopify のテーマエディタで設定します。テーマエディタの右側にプレビューが出るので、設定を変えながらその場で仕上がりを確認できます。
アプリは Shopify App Store から入れられます。管理画面の左のメニューでは、英語のアプリ名「UR: Countdown Timer Bar」で表示されます。
このアプリのバーは、テーマの「埋め込みアプリ」(App Embed)として動きます。商品ページやコレクションページに 1 つずつブロックを置く方式ではなく、ストアのすべてのページの body に 1 本のバーが差し込まれます。そのため、一度オンにすればトップページ・商品ページ・コレクション・カート・固定ページのどこにでも同じバーが出ます。

バーは position: fixed で画面の端に固定され、テーマのほかの要素より前面に表示されます。さらに、アプリはバーの高さを測り、その分だけページ全体の余白(body の上か下の padding)を足します。上部に出すとヘッダーがバーの下にずれ、下部に出すとフッターの下にバーの分の余白ができます。バーがヘッダーのロゴやフッターのリンクを隠してしまう事故が起きにくいのはこのためです。
画面幅が変わったときも余白を測り直します。スマートフォンを横に向けたり、ブラウザの幅を変えたりしてバーの高さが変わっても、ずれたまま残ることはありません。

タイマーには 2 種類あります。

エバーグリーンの開始時刻は、お客様のブラウザ(localStorage)に保存されます。ページを移動しても、ブラウザを閉じて翌日にまた来ても、最初に来た時刻から数え続けます。
設置に必要なのは、アプリの画面でテーマを選んでボタンを 1 回押すことと、開いたエディタで保存することの 2 つだけです。Liquid や CSS のファイルには一切手を入れないため、あとでテーマを新しい版に乗り換えても、自分で足したコードが消えて表示が止まる、といった事故が起きません。

自作の固定バーでよく起きるのが、ヘッダーのメニューやカートアイコンがバーの下に隠れてしまう問題です。このアプリはバーの高さに合わせてページ全体を自動でずらすので、上部に出してもヘッダーは押し下げられて見える位置に残ります。下部に出した場合も、ページの最後までスクロールすればフッターのリンクがバーに隠れずに見えます。

エバーグリーンタイマーを使えば、日付の決まったセールがない時期でも「今買う理由」を作れます。たとえば「初回限定クーポンの期限まで」と書いて 24 時間のカウントダウンを出せば、初めて来たお客様それぞれに 24 時間の締め切りが生まれます。期限が過ぎたお客様には、そのブラウザではバーが出なくなります。
バーの文言のうち、説明テキスト・単位ラベル・CTA ボタンテキストは、変更せずにおくとお客様が見ている言語で表示されます。英語のページでは「Sales End In.」「Shop now」、日本語のページでは「セール終了まで」「今すぐ購入」という具合に、言語ごとに用意された訳へ自動で切り替わります。

越境 EC で複数言語を出しているストアでも、翻訳アプリでバーの文言を個別に訳す必要はありません。ただし、文言を自分で書き換えた場合は、書いた文言がどの言語でもそのまま表示されます。多言語のストアでは、初期値の文言で足りるかどうかを先に検討すると手間が減ります。
常に表示されるバーは、人によっては邪魔に感じます。このアプリでは閉じるボタンを出して、閉じたお客様にいつまた見せるかを分単位で決められます。売り込みの強さを、ストアの客層に合わせて調整できるのは運用上の大きな利点です。
バーは埋め込みアプリとして全ページに 1 本だけ出ます。「この商品ページだけ」「このコレクションだけ」のように表示するページを絞る設定はありません。また、同時に出せるバーも 1 本だけなので、商品ごとに違う締め切りを並べる用途には向きません。商品ごとの締め切りを出したい場合は、後半の「使い分け」の章を参考にしてください。
バーの設定は、アプリのサーバーではなくテーマ側に保存されます。テーマを切り替えたり、新しいテーマを公開したりすると、設定は引き継がれません。新しいテーマで改めて埋め込みアプリをオンにし、同じ設定を入れ直す必要があります。テーマを切り替える前に、色や文言をメモしておくと安心です。
固定タイマーの終了日時は、タイムゾーンを持たない「年-月-日-時-分」で入力し、お客様の端末の時計を基準に数えます。日本のストアで日本のお客様が見る分には問題ありませんが、海外のお客様が見ると、その国の現地時刻の 23 時 59 分が締め切りになります。海外販売をしていて、全世界で同じ瞬間にセールを終えたい場合は注意が必要です。
料金は有料プランのみで、7 日間の無料体験の後は課金が必要です。プランが有効でないと、ストアフロントにバーは表示されません。
料金プランは Basic Plan の 1 種類です。
最新の料金は Shopify App Store のアプリページで確認してください。無料体験の 7 日間で、実際のテーマに入れたときの見え方や、エバーグリーンタイマーの動きを確かめてから続けるかどうかを決められます。
まずはアプリを入れるまでの流れです。手順そのものは数クリックで終わります。
Shopify 管理画面の左下にある「設定」を開きます。

設定のメニューで「アプリ」を選び、右上にあるアプリストアを開くボタンを押します。

検索窓に「シンプル追従カウントダウンタイマー」と入れると、アプリが見つかります。

アプリの詳細ページで「インストール」を押します。

権限の確認画面が出ます。このアプリが求める権限は、テーマの一覧を読むためのもの(read_themes)だけです。商品・注文・顧客のデータには触れません。内容を確認して「インストール」を押せば完了です。

インストールが終わると、管理画面の左のメニューの「アプリ」の下に「UR: Countdown Timer Bar」が加わります。開くと「設定」の画面が表示されます。管理画面にあるのは、この設定画面 1 枚です。

設定画面は、上から次の 4 つのカードで構成されています。
バーの見た目や時間を決める項目は、この画面にはありません。管理画面は「テーマに入れる入口」、テーマエディタは「バーを作り込む場所」と役割が分かれています。なお、よくある質問のページも用意されていて、Q&A が登録されていて管理画面が日本語表示のときにだけ、メニューにリンクが出ます。
設定画面のいちばん上のカードです。ここでバーをどのテーマに入れるかを選び、テーマエディタを開きます。


カードの説明にもあるとおり、テーマのバージョンによっては選択欄が空になることがあります。そのときはテーマエディタから手動でオンにします(後述の「テーマへの追加」で手順を説明します)。
テーマ追加のカードのすぐ下に出る黄色いバナーです。「テーマに追加」を押してもアプリブロックが自動で追加されなかった場合に、ご利用ガイドを見て手動で追加するよう案内しています。操作する項目はありません。

このバナーは、管理画面を日本語で表示しているときにだけ出ます。英語など他の言語に切り替えているときは表示されません。手順の詳細は Shopifyで画面に追従するカウントダウンタイマーを表示できるアプリについて徹底解説|ご利用ガイド にまとまっています。
アプリの管理画面を何語で表示するかを選ぶカードです。

ここで変わるのはアプリの管理画面の表示だけです。ストアフロントのバーの言語には影響しません。バーの文言は、前の章で説明したとおりお客様の閲覧言語に合わせて切り替わります。選んだ言語はブラウザに保存されるので、別のパソコンで管理画面を開くと初期の言語に戻ることがあります。
設定画面のいちばん下には、UnReact のほかの Shopify アプリが並びます。カウントダウンと組み合わせやすい離脱防止のポップアップなども紹介されています。右上の「×」で閉じられます。

管理画面の「テーマに追加」を押すと、次のようにテーマエディタが開きます。左側の「埋め込みアプリ」の一覧で、シンプル追従カウントダウンタイマーのスイッチがオンになっています。プレビューにバーが出ていることを確かめて、右上の「保存」を押します。


テーマを切り替えたときや、選択欄が空で自動追加が使えないときは、テーマエディタから手動でオンにします。Shopify 管理画面の「オンラインストア」から、公開中のテーマの「テーマを編集」を開きます。

テーマエディタの左上に並ぶアイコンのうち、「埋め込みアプリ」のアイコンを押します。
![]()
一覧にあるシンプル追従カウントダウンタイマーのスイッチをオンにします。

プレビューの端にバーが出たら「保存」を押します。埋め込みアプリは、オンにして保存しない限りストアに何も表示されません。実装が正しくてもバーが出ないときは、まずここを疑ってください。

埋め込みアプリの一覧でシンプル追従カウントダウンタイマーの名前を押すと、設定が開きます。設定は「レイアウト設定」「タイマー設定」「テキスト設定」「CTA ボタン」「その他の設定」の 5 つのグループに分かれていて、項目は全部で 24 個です。どの項目にもおすすめの初期値が入っているので、最初はタイマーの種類と説明テキストだけ決めれば使い始められます。

この章の画像のうち、テーマエディタの画面は主言語が英語のデモストアで撮っています。そのため、説明テキストなどの欄に英語の初期値が入っています。
バーをどこに出し、どんなデザインにするかを決めるグループです。

表示位置を「下部」にすると、スマートフォンでは次のようにバーが画面の下に固定されます。トップページのメインビジュアルをバーで隠したくないときに選ぶと効果的です。

スタイルとメインカラー・アクセントカラーの組み合わせで、バーの印象は大きく変わります。ここでは 5 つのスタイルを、実際の配色例と一緒に並べます。どれも同じアプリの同じバーで、変えているのはスタイルと 2 つの色だけです。
スタイル 1 は、太字の数字をコロンで区切り、数字の下に単位を置く基本形です。メインカラー #0f1a14、アクセントカラー #7ee2b8 の組み合わせでは、落ち着いた深緑の背景にミントグリーンの文字が乗ります。

スタイル 2 は、細い数字の右下に小さく単位を添える、余白の多いデザインです。白の背景に濃いグレーの文字を合わせると、アパレルやインテリアのような上品なストアに合います。

スタイル 3 は、タイマー全体を一段濃い角丸の枠で囲み、等幅の数字で見せるデザインです。赤の背景に白の文字を合わせると、タイムセールらしい強い印象になります。

スタイル 4 は、細い数字を縦線で区切り、CTA ボタンを枠線だけで表現するデザインです。紺の背景に金色の文字を合わせると、高級感のある見た目になります。

スタイル 5 は、日・時間・分・秒をそれぞれ独立した角丸のタイルに収めるデザインです。数字が 1 つずつ目立つので、残り時間をはっきり印象づけたいときに向いています。青の背景に白の文字で、明るく親しみやすい印象になります。

同じスタイルでも、色を変えるだけで用途が変わります。スタイル 1 に黄色の背景と濃い赤の文字を合わせると、スーパーのチラシのような分かりやすい売り出し感が出ます。

スタイル 3 をダークグレーと白で組むと、赤の場合よりも控えめで、モノトーンのテーマになじみます。

スタイル 5 を紫の背景と黄色の文字で組むと、補色どうしの組み合わせで遠くからでも目に留まります。

8 つの配色を一覧にすると次のとおりです。迷ったら、ストアのロゴやボタンに使っている色をメインカラーにして、文字が読みやすい白か黒をアクセントカラーにするところから始めてください。

締め切りの決め方と、数字の見せ方を決めるグループです。このアプリの中心になる設定です。

2026-12-31-23-59 です。区切りが 5 つそろっていないとカウントが始まらず、数字が 00 のまま表示されるので、入力したらプレビューで数字が動いているかを必ず確かめてください。時刻はお客様の端末の時計を基準に数えます。単位ラベルの初期値にどの言語の値が入るかは、テーマエディタの表示言語では決まりません。主言語が英語のデモストアでは、日本語表示のテーマエディタで開いても英語の初期値が入りました。とはいえ、初期値のまま保存すれば、ストアフロントではお客様の閲覧言語に合わせた単位で表示されます。
表示フォーマットには、画面からは分からない動きがあります。
固定タイマーが終了日時を迎えたとき、エバーグリーンの期間が終わったときは、バーが自動で消えます。消えた後に終了日時を書き換えて保存すると、アプリは「新しいキャンペーンが始まった」と判断して、バーを再び表示します。エバーグリーンの場合は、期間か説明テキストのどちらかを変えると新しいキャンペーン扱いになり、開始時刻も記録し直されます。
この仕組みは、閉じるボタンにも同じように効きます。キャンペーンを切り替えると、以前のキャンペーンでバーを閉じたお客様にもまた表示されます。逆に、エバーグリーンで説明テキストの誤字だけを直した場合も新しいキャンペーン扱いになり、全員の残り時間が最初からになる点は覚えておいてください。
タイマーの横に出る呼びかけの文言を決めるグループです。

説明テキストは、お客様が「何の締め切りか」を理解するための唯一の手がかりです。「残り時間」だけでは何が終わるのか分からないので、「全品 20% OFF 終了まで」のように、得られるものを具体的に書くと反応が変わります。スマートフォンでは横幅が狭いので、15 文字前後に収めると 1 行で読めます。
多言語のストアで説明テキストを書き換えると、どの言語のお客様にも書き換えた文言がそのまま出ます。日本語と英語の両方で販売しているなら、「SALE 終了まで」のように両方の言語のお客様に伝わる言い回しにするか、初期値のまま使うかを検討してください。
バーからセール会場へお客様を連れていくボタンの設定です。

アニメーションの選択肢は次のとおりです。
動きは目を引く反面、多用するとストア全体が騒がしく見えます。セールの最終日だけ「パルス」や「グロー」に切り替え、普段は「なし」にしておく、という使い分けがおすすめです。
カートページにもバーとボタンは出ます。カートに商品を入れたまま迷っているお客様に、締め切りを思い出してもらう最後の一押しになります。

コレクションページでも同じバーが出ます。CTA リンクにセール対象のコレクションを入れておけば、別のコレクションを見ているお客様をセール会場に誘導できます。

設定項目にない調整を、CSS で行うためのグループです。

ここに書いた内容は、バーの外枠(.ur-countdown)に対する指定として読み込まれます。たとえば font-family: serif; letter-spacing: 0.05em; と書けば、バー全体の書体と字間が変わります。外枠の中の要素を個別に変えたいときは、CSS の入れ子の書き方(& .ur-cta { font-weight: 700; } のような形)が使えるブラウザなら指定できます。ストアの他の部分には影響しないので、テーマ側の見た目を壊す心配はありません。
ここまでの設定を、よくある目的ごとに組み合わせると次のようになります。
バーが出ないときは、次の順に確かめます。どれもエラーメッセージが出ないので、知っていないと原因にたどり着けません。
ここからは、同じような追従カウントダウンバーを、アプリを使わずにテーマのコードで作る方法を紹介します。仕組みを知っておくと、アプリの設定項目の意味もつかみやすくなります。
まず、テーマに新しいスニペット snippets/my-sticky-countdown.liquid を作り、バーの HTML を書きます。終了日時はタイムゾーン付きの ISO 形式(+09:00)で持たせています。こうすると、海外のお客様が見ても日本時間の締め切りで数えられます。
{% comment %} snippets/my-sticky-countdown.liquid {% endcomment %}
<div
id="my-countdown"
class="my-countdown"
data-end="2026-12-31T23:59:00+09:00"
hidden
>
<p class="my-countdown__text">年末セール終了まで</p>
<p class="my-countdown__timer" aria-live="polite">--:--:--:--</p>
<a class="my-countdown__cta" href="{{ routes.collections_url }}/sale">今すぐ購入</a>
<button class="my-countdown__close" type="button" aria-label="閉じる">×</button>
</div>
hidden を付けておき、JavaScript で残り時間を計算できたときだけ表示します。終了済みの締め切りが一瞬見えてしまうのを防ぐためです。リンク先の /sale は、セール対象のコレクションのハンドルに置き換えてください。
次に、バーを画面の上部に固定する CSS を書きます。セレクタは必ず .my-countdown の配下に閉じ込め、テーマのほかの要素に影響しないようにします。
.my-countdown {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 9999;
display: flex;
align-items: center;
justify-content: center;
gap: 24px;
padding: 10px 48px;
background: #111;
color: #fff;
}
.my-countdown__timer { font-size: 24px; font-weight: 700; font-variant-numeric: tabular-nums; }
.my-countdown__cta { padding: 8px 20px; border-radius: 4px; background: #fff; color: #111; text-decoration: none; }
.my-countdown__close { position: absolute; right: 12px; background: none; border: 0; color: inherit; font-size: 20px; cursor: pointer; }
@media (max-width: 768px) {
.my-countdown { flex-direction: column; gap: 4px; }
.my-countdown__timer { font-size: 16px; }
}
font-variant-numeric: tabular-nums は、数字の幅をそろえる指定です。これがないと、毎秒数字が変わるたびに文字の幅が変わり、バー全体が小刻みに揺れて見えます。スマートフォン向けには、要素を縦に積んで数字を小さくしています。
最後に、残り時間を数える JavaScript です。閉じたことをブラウザに覚えさせ、バーの高さの分だけページの上に余白を足す処理も入れています。
(() => {
const bar = document.getElementById('my-countdown');
if (!bar) return;
const CLOSED_KEY = 'my_countdown_closed:' + bar.dataset.end;
const end = new Date(bar.dataset.end).getTime();
const timer = bar.querySelector('.my-countdown__timer');
const pad = (n) => String(n).padStart(2, '0');
// 閉じた記録があるか、すでに終了していれば何もしない
if (localStorage.getItem(CLOSED_KEY) || Number.isNaN(end) || end <= Date.now()) return;
// バーの高さの分だけ body の上に余白を足し、ヘッダーが隠れないようにする
const offset = () => { document.body.style.paddingTop = bar.hidden ? '' : bar.offsetHeight + 'px'; };
const tick = () => {
const left = Math.max(0, Math.floor((end - Date.now()) / 1000));
if (left === 0) { bar.hidden = true; offset(); clearInterval(id); return; }
const d = Math.floor(left / 86400);
const h = Math.floor((left % 86400) / 3600);
const m = Math.floor((left % 3600) / 60);
timer.textContent = `${pad(d)}日 ${pad(h)}:${pad(m)}:${pad(left % 60)}`;
};
bar.querySelector('.my-countdown__close').addEventListener('click', () => {
localStorage.setItem(CLOSED_KEY, '1');
bar.hidden = true;
offset();
});
bar.hidden = false;
tick();
const id = setInterval(tick, 1000);
offset();
window.addEventListener('resize', offset);
})();
閉じた記録のキーに終了日時を含めているのがポイントです。次のセールで data-end を変えればキーも変わるので、前のセールでバーを閉じたお客様にも新しいバーが表示されます。アプリの「終了日時を変えると再表示される」動きを、最小限の形で再現したものです。
作ったスニペットは、layout/theme.liquid の </body> の直前で読み込みます。
{% render 'my-sticky-countdown' %}
</body>
theme.liquid に書くことで、すべてのページにバーが出ます。JavaScript はスニペットの末尾に <script> で書くか、assets にファイルを置いて読み込みます。
この自作版には、アプリにある次の機能が入っていません。
これらを足していくと、コードは数百行になります。さらに、テーマを更新すると theme.liquid の編集が上書きされることがあり、セールのたびに誰かがコードを触る運用になります。タイムゾーンを固定したい、ブランドに合わせて完全に作り込みたいといった理由がなければ、アプリでテーマエディタから設定するほうが、日々の運用は楽になります。
Shopify のカウントダウンアプリには、このアプリのような「ストア全体に 1 本の追従バーを出す型」のほかに、「商品ページの価格の近くなどにブロックとして置く型」もあります。2 つは競合というより役割が違うので、組み合わせ方を考えると効果が上がります。
両方を入れる場合は、締め切りを二重に見せて混乱させないことが大切です。次の順で設定すると、お客様にとって分かりやすい組み合わせになります。
どちらを先に入れるか迷ったら、まず追従バーから始めるのがおすすめです。ストア全体のキャンペーンは毎月のように発生し、1 回の設定でどのページにも効果が出るからです。商品ごとの締め切りが必要になった段階で、ブロック型を追加で検討すれば十分です。
シンプル追従カウントダウンタイマーは、締め切りを「ストアのどこにいても見える場所」に置くためのアプリです。管理画面は「テーマに追加」だけのシンプルな作りで、バーの位置・5 種類のスタイル・2 つのカラー・2 種類のタイマー・文言・CTA ボタン・アニメーションまで、24 個の設定をすべてテーマエディタで仕上げられます。
料金は Basic Plan の $4.99/月(年額 $49.99)で、7 日間の無料体験があります。次のセールの告知から試し、バーを出す前と後でセール会場への流入がどう変わるかを見てみてください。
アプリは Shopify App Store からインストールできます。設定手順を画面付きで確認したい場合は、Shopifyで画面に追従するカウントダウンタイマーを表示できるアプリについて徹底解説|ご利用ガイド も参考にしてください。
カウントダウンバーと一緒に使うと、購入の後押しをさらに強められる UnReact のアプリを紹介します。