Skip to content

Promo popup

A centred modal with an optional image, a kicker, a heading, a line of copy and either an email sign-up form or a single button. It appears after a delay you set, and it never appears again for someone who has already dismissed it — until you tell it to.

It is off by default. Switch it on only when you have something worth interrupting for.

This section is rendered from the theme layout rather than from a template, so it is available on every page of the store — a promo a shopper never reaches is no promo. In the theme editor you will find it near the bottom of the section list, on whichever page you happen to be editing.

SettingTypeDefaultWhat it does
EnabledCheckboxfalseMaster switch. Nothing renders until this is on.
Show afterRange, 0–30 s, step 18How long after page load the popup opens.
VersionText1Change this to show the popup again to everyone who already dismissed it. See below.
ImageImage—An image above the copy, at 16:9. Optional.
KickerTextThe listAccent label above the heading.
HeadingInline rich textThirty minutes' head startThe heading. The popup does not render at all if this is empty, even with enabled on.
TextTextThe list sees the lookbook on Wednesday and gets the drop before anyone else on Friday.Supporting copy, capped at a 42-character measure.
Show sign-up formCheckboxtrueShow the email sign-up form. Turn it off to use a plain button instead.
Customer tagTextpopupThe tag applied to customers who sign up here. Give it something distinct so you can measure the popup separately.
PlaceholderTextEmail addressPlaceholder in the email field.
Result buttonTextJoin the listThe submit button’s text, or the link button’s text when the form is off.
Button linkURL—Used only when the sign-up form is off. Where the button goes.
Success messageTextYou're on the list.Shown after a successful sign-up.
Dismiss labelTextNo thanksThe small underlined decline link under the action.

No blocks. One preset, Promo popup.

Show sign-up formWhat the popup does
On (default)Captures an email through Shopify’s own customer form, tagging the subscriber with your tag. The customer appears under Customers in admin.
OffShows a single button pointing at button_link — for sending people to a collection, a lookbook page or a dated drop. Clicking it also counts as dismissal, so the popup does not reappear.

There is exactly one rule: once per version, per browser.

  • When the popup closes — by the X, by the “No thanks” link, by clicking the backdrop, by pressing Escape, or by clicking the action button — that dismissal is written to the visitor’s browser storage against a key built from the section and the Version string.
  • On every later page view, if that key is present, the popup does not open. It is not re-shown after a week, or on a different page, or on a second visit.
  • Changing Version changes the key, so everybody — including the people who dismissed the last one — becomes eligible again. Bump it from 1 to 2 when you launch a new promo; leave it alone and your returning customers are never bothered twice.

Because the record lives in the browser, it is per device and per browser: the same person gets the popup once on their phone and once on their laptop. Nothing is stored on your server and nothing is attached to a customer record.

It is a real modal dialog. Focus trapping, the Escape key and the stacking above everything else come from the browser rather than from theme code, which is why keyboard and screen-reader behaviour is correct by default. Page scrolling is locked while it is open.

The delay is deliberate. It waits so it cannot interrupt the first paint or collide with the loading screen. Zero is allowed but means the popup lands over an unfinished page.

It always shows in the theme editor, dismissal record or not — otherwise you could never preview it.

It degrades to nothing. In a browser with no dialog support, or with storage unreachable (a locked-down private window), the popup simply does not appear. Nothing on the page depends on it.

  1. Write the heading and copy first — the popup will not render without a heading.
  2. Decide the mode: sign-up form, or a button pointing somewhere.
  3. Set a distinct tag so you can measure it.
  4. Set the delay. Eight to twelve seconds is long enough that a reader has chosen to stay.
  5. Switch enabled on and preview it.
  6. Next campaign: change version, and the people who dismissed the last one will see the new one.