Last updated: June 2026.
Popups carry a bad reputation for a reason: most of them are lazy. Appear on load, cover the screen, demand an email before the visitor has seen a single product. That popup gets closed in half a second and leaves a bad taste. But the same surface, fired at the right moment with a real offer, is one of the few on-site tools that reliably moves email signups and rescues carts that were already leaving. The difference is never the popup technology, it's the strategy behind when it fires, who sees it, and how hard it is to dismiss.
This guide is about the strategy and the PrestaShop setup: the trigger types and when each one earns its interruption, where popups actually attach to PrestaShop's page lifecycle, the GDPR and mobile-interstitial rules that quietly tank stores that ignore them, and how to measure whether a popup is helping or just annoying people into bouncing. For the specific case of the first-visit welcome offer, the most common and most over-used popup of all, that deserves its own treatment, covered in welcome popups done right.
PrestaShop has no popup engine, so where do popups live?
PrestaShop ships nothing for popups out of the box. There is no "Popups" tab in the back office, no native trigger system. Every popup on a PrestaShop store is injected by a module, and how it's injected matters for both performance and reliability.
The clean way a module adds a popup is by hooking the bottom of the page rather than rewriting your theme. PrestaShop 1.7+ exposes displayBeforeBodyClosingTag, a hook that fires just before the closing </body> tag. Which is exactly where a popup's markup and script belong: after your content has rendered, so the popup never blocks the page from painting. (Our mprwelcomepopup module uses this hook precisely for that reason.) Older 1.6 themes lean on displayFooter or a global hook instead. The practical takeaway for you: a popup module that loads its JavaScript late and hooks the body close won't drag down your PageSpeed score the way an early-loading, render-blocking script will. When you evaluate a module, that injection point is worth asking about, it's the difference between a popup that stays out of your Core Web Vitals (no render-blocking, minimal layout shift) and one that costs you on every page.
Because the trigger logic runs client-side (the browser decides when to show the popup based on mouse movement, scroll, or a timer), the display logic itself doesn't touch your server load or your cart logic. A well-built display-only popup should not alter your order or checkout logic, it's a presentation layer sitting on top. Even so, an overlay can still get in the way of someone paying, so disable it on checkout regardless.
Trigger strategy: when the popup fires decides everything
The single biggest lever on popup performance isn't the offer or the design, it's timing. The same "10% off" message converts at a fraction of a percent when it fires on page load and several percent when it fires on exit. Here's how the main triggers compare and when each one earns its interruption.
| Trigger | Fires when… | Best for | Watch out for |
|---|---|---|---|
| Exit intent | The cursor moves toward the browser's close/back control | Last-chance discount, email capture, cart rescue, you only interrupt people already leaving | No mouse on mobile, so it simply doesn't fire there. You need a mobile fallback |
| Time delay | The visitor has been on the page N seconds | Newsletter signup, store announcements | Never under ~10s. Interrupting someone still orienting is the classic mistake |
| Scroll depth | The visitor scrolls past a set % of the page | Long category pages, content/blog pages where scroll signals genuine reading | Too shallow catches accidental scrolls; too deep misses people who already found what they wanted |
| Click / tap | The visitor clicks a specific element | "Reveal your code", size guides, quick-view, highest acceptance because the user asked for it | Technically a modal, not an interruption. Which is exactly why it converts cleanest |
So what does this mean in practice? Exit intent is the safest aggressive trigger because it interrupts nobody who wasn't already leaving, there's nothing to lose. Time and scroll triggers are gentler but interrupt engaged visitors, so they have to clear a higher bar of relevance. And the click trigger barely counts as a popup at all, which is why it almost never annoys anyone. A serious popup setup uses different triggers for different goals on different page types, not one rule across the whole store.
Match the popup to the PrestaShop page it appears on
A popup that ignores context is a popup that annoys. PrestaShop already tells you exactly what kind of page the visitor is on through the controller name (index, category, product, cart, order), so a competent popup module can target by page type. Use that:
- Homepage (index): a first-impression offer or announcement, but give browsers a few seconds before you interrupt. Homepage is also where the welcome popup belongs; see welcome popups done right for that specific play.
- Category pages: a scroll-depth trigger fits a long product list better than a timer. If your category pages aren't holding attention in the first place, the popup is treating a symptom. The structural fix is in category pages that convert.
- Product pages: reserve popups for genuine value, a size guide, a "customers also bought" suggestion on add-to-cart, a stock or shipping nudge. A bare email-capture popup over a product the visitor is studying is pure friction.
- Cart page: a high-value moment for a cross-sell or a "complete your order" nudge. The visitor has shown clear intent.
- Checkout (order controller): show nothing. Do not interrupt someone who is already paying. A popup here is the most expensive mistake on this list.
Layer visitor targeting on top of page targeting: new versus returning (a returning customer doesn't need a "first order" discount), cart value, and device. The cookie or sessionStorage flag that records "this visitor already saw the welcome popup" is what stops you re-showing the same offer to someone who dismissed it yesterday.
Popup types worth running on a PrestaShop store
- Email capture / welcome offer. The first-visit "get 10% off" play. Effective but easy to get wrong, full strategy, including how often to show it and to whom, in welcome popups done right.
- Exit-intent rescue. A time-limited offer shown only as the visitor leaves. The cleanest popup there is, because it interrupts nobody who was staying.
- Cart-recovery nudge. Same exit trigger, but it references the specific cart ("Don't leave your items behind"). Pairs with, and never replaces, a proper abandoned-cart email sequence for the visitors who leave anyway.
- Upsell / cross-sell on add-to-cart. "Add a matching case for 5 € more", fired the moment a product enters the cart. This raises average order value without sending the customer to another page.
- Social-proof notification. A small, non-blocking toast in the corner ("someone in Berlin just ordered this") that builds trust through live activity rather than asking for anything. This is a fundamentally different surface from a centre-screen modal, it doesn't interrupt, it reassures. Our mprsalespopup module drives these from real recent orders so the proof is genuine, not invented.
- Seasonal / promotional. A sale announcement, often with a countdown. Targets best when restricted to relevant pages and a sensible date window.
Design and dismissal: the part that decides "effective" vs "annoying"
The visual rules are short and non-negotiable:
- Lead with the value, not the ask. "Get 10% off" before "enter your email", never the reverse. "Subscribe to our newsletter" is not a value proposition.
- One clearly visible close button, top-right, minimum 44×44px so it's tappable on a phone. Hiding or delaying the close control to buy a few more seconds of attention is the fastest way to burn trust, and, as covered below, it directly risks a Google penalty.
- No guilt-trip dismiss text. "No thanks, I'll pay full price" is manipulative; a plain "Maybe later" or a clean X respects the visitor.
- Match your store's brand, colours, fonts, a relevant product image. A popup that looks like it came from another website reads as a scam overlay.
- Keep it to 3–5 lines. If you need more words, the offer isn't clear enough yet.
The mobile rule that quietly costs stores rankings
This is where most popup setups silently lose. Google treats an intrusive interstitial that covers the main content immediately after a visitor arrives from search as a ranking signal against the page on mobile. Cookie consent, age gates and login dialogs are exempt; a "10% off" overlay slammed onto a phone on page load is not, and it can drag down the rankings of the very pages you're trying to monetise.
What stays safe on mobile: popups triggered by user action (a tap), popups that fire only after meaningful engagement (time or scroll, not on arrival), and small banners that use a reasonable share of the screen rather than the whole viewport. Because exit intent has no mouse to read on a phone, the mobile-safe fallbacks are scroll-up detection, a generous time delay, or a tab-switch trigger. Treat mobile as the default case, not an afterthought, for most stores a large and growing share of traffic and checkouts now starts on a phone, a shift covered in mobile commerce.
GDPR: the compliance layer EU stores cannot skip
If you sell into the EU, a popup that captures emails is a data-collection event and the rules are specific:
- Explicit consent. A pre-ticked checkbox is not valid consent. State plainly what the visitor is signing up for ("weekly deals and new-product announcements") and link your privacy policy next to the input.
- Double opt-in. After submission, send a confirmation email the visitor must click. This is legally required in some EU countries (Germany notably) and is best practice everywhere. It also keeps your list clean.
- Cookie ordering. If the popup sets a non-essential cookie to remember it's been shown, that cookie is gated by consent. Some modules sidestep this by using sessionStorage instead of a tracking cookie. Either way, never fire a promotional popup at the same moment as your cookie-consent banner. Stacking two interruptions means the visitor can properly evaluate neither.
One popup per visit, the frequency rule that protects the whole strategy
The fastest way to undo good popup work is to stack popups. A visitor who meets your welcome popup should not also get an exit popup, a newsletter popup and three social-proof toasts in the same session. Pick the single most relevant surface for their behaviour and suppress the rest. Record what each visitor has seen and dismissed (cookie or sessionStorage) and wait, at least a week, before re-showing a dismissed offer, or show a different one entirely. Frequency control is precisely the feature that separates a popup module you can run on a real store from one that drives customers away.
How to measure whether a popup is helping or hurting
Popup conversion rate on its own is a vanity metric. A popup can post a healthy signup rate while quietly lowering revenue if it's annoying engaged visitors into bouncing. Track four numbers and weigh them together:
- Popup conversion rate. Share of views that take the action (email, code claim).
- Immediate close rate, how fast people dismiss it; a high instant-close rate means wrong timing or an irrelevant offer.
- Downstream conversion. Do the people who interacted with the popup actually buy? A signup that never purchases is noise.
- Revenue per visitor, with the popup on vs off, the deciding metric. If signups rise but RPV falls, the popup is a net loss and should be pulled or retuned.
Test one variable at a time, offer amount, trigger timing, design format, CTA copy, and give each variant enough traffic to clear week-to-week noise before you call a winner. The published e-commerce figures for well-executed popups (low-single-digit to high-single-digit capture rates, and cart-recovery rates in the tens of percent on exit offers) are directional, not promises: the real numbers depend on your traffic, your offer and your margins, so measure on your own store rather than trusting a benchmark.
Setting popups up in PrestaShop

Since the platform gives you nothing native, the job comes down to choosing the right module and configuring it with the strategy above. When you evaluate a popup module for PrestaShop, the checklist that actually matters:
- Multiple trigger types (exit, timer, scroll, click), not just on-load
- Page targeting by controller (homepage / category / product / cart) and visitor targeting (new vs returning, device, cart value)
- Frequency and suppression controls, including a display delay
- Mobile-specific behaviour, so you stay clear of Google's interstitial penalty
- GDPR features, consent text, privacy-policy link, double opt-in
- Late script injection (the displayBeforeBodyClosingTag hook) to reduce the risk of render-blocking, still audit the script payload, layout shift (CLS) and any third-party requests it pulls in
- Per-popup analytics: views, conversions, close rate
Our two popup modules at mypresta.rocks split this cleanly by job. mprwelcomepopup handles entry offers and email capture, it hooks the body close so it never blocks rendering, and it carries a configurable display delay so you control the timing rather than firing on arrival. mprsalespopup handles the social-proof side: small corner notifications built from real recent orders, so the proof you show is genuine. Both install and configure from the back office, no theme editing, no developer invoice, and both stay out of the way of your checkout. The point of either isn't "add a popup"; it's to run the right surface at the right moment for the right visitor, which is the only version of popups that converts instead of annoying.
Where popups sit in the bigger UX picture
A popup is a tactic, not a strategy. It earns its keep by nudging a decision the rest of your store has already set up well. Clear navigation, category pages that hold attention, a homepage that orients the visitor in seconds. If a popup is doing heavy lifting because the underlying experience is weak, fix the experience first: start with homepage design and category pages that convert. Get those right, and the popup becomes what it should be, a small, well-timed assist at the moment a visitor is ready to act.
Frequently asked questions
Where does a popup actually attach in PrestaShop?
PrestaShop ships no popup engine, so every popup is injected by a module. The clean way is the displayBeforeBodyClosingTag hook (PrestaShop 1.7+), which fires just before the closing </body>, after your content has rendered, so the popup never blocks the page from painting. Older 1.6 themes lean on displayFooter instead. When you evaluate a module, that injection point matters: a popup that hooks the body close and loads its script late stays out of your Core Web Vitals, while an early, render-blocking script costs you on every page.
Which trigger converts best?
Exit intent is the safest aggressive trigger because it only interrupts people already leaving, there's nothing to lose. Time and scroll triggers are gentler but interrupt engaged visitors, so they have to clear a higher bar of relevance (never fire a timer under about 10 seconds). A click/tap trigger barely counts as a popup because the user asked for it, which is why it almost never annoys anyone. The right answer isn't one trigger everywhere, it's different triggers for different goals on different page types.
Will a popup hurt my mobile rankings?
It can. Google treats an intrusive interstitial that covers the main content immediately after a visitor arrives from search as a ranking signal against the page on mobile. Cookie consent, age gates and login dialogs are exempt; a "10% off" overlay slammed onto a phone on page load is not. What stays safe: popups triggered by a tap, popups that fire only after real engagement (time or scroll, not on arrival), and small banners that use a reasonable share of the screen. Since exit intent has no mouse to read on a phone, use scroll-up detection, a generous time delay, or a tab-switch trigger as the mobile fallback.
What are the GDPR rules for an email-capture popup?
If you sell into the EU and the popup captures emails, it's a data-collection event: no pre-ticked consent boxes, state plainly what the visitor is signing up for, and link your privacy policy next to the input. Double opt-in (a confirmation email the visitor must click) is legally required in some EU countries. Germany notably, and is best practice everywhere. If the popup sets a non-essential cookie to remember it's been shown, that cookie is gated by consent; some modules sidestep this with sessionStorage. And never fire a promotional popup at the same moment as your cookie-consent banner. Stacking two interruptions means the visitor can evaluate neither.
How do I know whether a popup is helping or hurting?
Popup conversion rate alone is a vanity metric. A popup can post a healthy signup rate while quietly lowering revenue by annoying engaged visitors into bouncing. Track four numbers together: popup conversion rate, immediate close rate (high = wrong timing or irrelevant offer), downstream conversion (do interactors actually buy?), and the deciding one, revenue per visitor with the popup on versus off. If signups rise but RPV falls, the popup is a net loss; pull it or retune. Test one variable at a time and give each variant enough traffic to clear week-to-week noise.
Should I run more than one popup per visit?
No. Stacking popups is the fastest way to undo good popup work, a visitor who meets your welcome popup shouldn't also get an exit popup, a newsletter popup and three social-proof toasts in the same session. Pick the single most relevant surface for their behaviour and suppress the rest, record what each visitor has seen and dismissed (cookie or sessionStorage), and wait at least a week before re-showing a dismissed offer or show a different one. Frequency control is precisely what separates a popup module you can run on a real store from one that drives customers away.