Exit-Intent Popups Done Right (Without Annoying Everyone)

  • CRO
  • Conversion
A glass browser window frame with a small glowing coral popup card appearing over it, representing an exit-intent popup

Exit-intent popups are widely hated because most are done badly. Here is how detection actually works, when a popup is justified, and the design and copy rules that recover visitors instead of driving them away.

CRO

I have a confession that will not endear me to half the marketing industry: I do not hate exit-intent popups. I hate bad ones, which is almost all of them, and that distinction is the whole point of this piece. An exit-intent popup is the overlay that appears at the moment a visitor looks about to leave your page, and most people experience it as a slap in the face on the way out the door. But the underlying idea is sound. Someone came to your site, did not convert, and is about to disappear forever. If you have something genuinely useful to offer them in that final second, offering it is not rude. The problem is that most teams treat that moment as a chance to grab an email address by any means necessary, and the visitor can feel the difference. In this post I want to lay out how we at Identiti think about exit intent, what separates a pattern that recovers lost visitors from one that just trains people to hate your brand, and why respect for the user is not a soft nicety but the actual mechanism that makes these things work.

What exit intent actually detects, and why it is a guess

Let me start with the technical reality, because a lot of the bad behaviour comes from people not understanding what exit intent can and cannot see. On desktop, the classic detection is simple: the browser watches the mouse cursor, and when the cursor moves up and out of the top edge of the viewport, the code assumes the person is reaching for the back button, the address bar, or the tab they want to close. That upward exit toward the browser chrome is the strongest available signal that attention is leaving. But you should be honest about what it is: a guess. The cursor leaving the top of the window does not mean the person has decided to abandon you. They might be grabbing a bookmark, checking another tab, or just moving the mouse aside while they keep reading. Every exit-intent trigger carries a false-positive rate baked in, and the more aggressively you tune it, the more you interrupt people who were never actually leaving.

The bigger technical truth is that this whole model falls apart on mobile, and pretending otherwise is where a lot of implementations go wrong. On a phone there is no cursor, no persistent pointer you can watch drift toward the edge. The finger only exists on the screen at the instant of a tap or a swipe, so the single cleanest desktop signal simply does not exist. Some libraries fake it by listening for a fast upward scroll, the scroll position hitting the bottom, or the page becoming hidden as the person switches apps. None of these are the same thing as intent to leave, and some fire far too late to matter or far too early to be welcome. So the first rule I give clients is this: do not ship the same popup logic to desktop and mobile and assume it works. They are two different problems that happen to share a name.

Because mobile cannot see a cursor, you are forced to lean on weaker proxy signals, and the honest response is to be far more conservative about what you show and when. A rapid upward flick after someone has read most of an article is a mild suggestion they might be done. Reaching the end of the content is a stronger one, because a person who has consumed everything you wrote has earned a next step rather than being interrupted mid-thought. Time-based triggers are the crudest of the lot, because time on page correlates poorly with intent: a slow reader and a person who wandered off to make tea look identical to a timer, so if you use timing at all, combine it with scroll depth. My stronger recommendation is to question whether an interruptive overlay is the right form factor for a phone at all. Screens are small, thumbs are imprecise, and a full-screen takeover feels far more hostile than the same offer on a wide monitor. A slide-up bar anchored to the bottom of the screen, or an inline block at the natural end of the content, often does the same job with a fraction of the resentment. Mobile is where most exit-intent implementations should get quieter, not louder.

When a popup is justified, and when it is pure interruption

Here is the question I make every client sit with before we write a line of code: what are you actually offering, and would the visitor thank you for it? If the honest answer is that you are offering nothing of value and simply want their email before they escape, then you do not have an exit-intent strategy, you have a toll booth, and people resent toll booths. A popup is justified when it closes a genuine gap between what the visitor came for and what they were about to leave without. Someone reading a detailed guide might genuinely want it as a PDF to read later. Someone abandoning a cart might genuinely benefit from a reminder of what is in it plus an answer to the objection that stopped them. In both cases the overlay is doing the visitor a favour. That is the bar. Not “can we capture them” but “are we helping them”.

The flip side is the interruption test. If the popup would appear on a page where the visitor is mid-task, mid-purchase, or clearly making progress toward the thing you want, do not fire it. You are not recovering a lost visitor there, you are throwing a hurdle in front of a converting one. The most self-defeating implementations I see fire the same generic overlay on every page, so a person actively filling in a checkout form gets blasted with a “wait, do not go” modal the instant their cursor drifts toward a saved-payment tab. That is not recovery, that is sabotage. Before you deploy exit intent anywhere, run a proper conversion-friction audit of the journey so you know which pages actually leak and why. The popup should only appear where there is a real leak and a real answer to why the person was leaving. Everywhere else it is noise, and noise costs you trust you cannot easily buy back.

What makes a good offer, and why the generic discount is lazy

The single most common exit-intent offer is a percentage off, and it is usually the wrong one. It is popular because it is easy to set up, easy to measure in the short term, and some people will always take free money. But a blanket discount at the exit does three quietly damaging things. It trains your most loyal, ready-to-buy customers to fake an exit so they can pocket a code they never needed, which means you are paying margin to people who were going to buy anyway. It cheapens the brand by implying your price is soft and negotiable to anyone who threatens to leave. And it does nothing at all for the large share of visitors whose reason for leaving had nothing to do with price. A discount answers exactly one objection, and rarely the one that actually stopped the person in front of you.

A good offer is relevant to the specific page and the specific reason someone might bail from it. On a content page, the offer might be to send the piece by email, or to hand over the deeper resource the article summarised. On a product page, it might be a size guide, a comparison, an answer to the delivery question quietly killing the sale, or genuine reassurance about returns. On a pricing page, the most useful thing is often not a discount but a way to talk to a human, or a clear breakdown that removes the uncertainty that froze the visitor. The test is simple: strip the discount out and ask whether the offer still earns its place. If the only thing making your popup worth showing is money off, you have not solved the visitor’s problem, you have just bribed them past it, and bribes get more expensive every time. When you do decide the ask, the language matters as much as the substance, and it is worth borrowing the discipline of good call-to-action copy formulas so the offer reads as a clear benefit rather than a demand.

Design and copy rules that keep the thing honest

The design of an exit-intent popup should follow one governing principle: one clear ask, presented honestly, with an obvious way out. That means a single job per overlay, not an email capture plus a discount plus a newsletter tick box plus a survey all fighting for attention in a box the visitor did not ask to see. Every extra choice you cram in makes the whole thing slower to parse and easier to dismiss out of frustration, which is exactly the logic behind Hicks law and fewer choices converting better. If you cannot describe the popup’s purpose in a single sentence, it is trying to do too much and will do all of it badly.

The close experience is where good intentions live or die, and it is the part teams most love to sabotage. The close button must be obvious, large enough to hit, and where the eye expects it. I have lost count of the overlays that hide the X in low-contrast grey, shrink it to a few pixels, or replace it with a shaming decline link that reads something like “No thanks, I hate saving money”. That last pattern, the guilt-trip decline, is one I will not let ship. It is called confirmshaming and it does real damage, because it tells the visitor exactly how you see them: as a mark to be manipulated rather than a person to be helped. The copy on the close should be neutral and truthful. And the overlay must never trap the person. Clicking outside the box should dismiss it, the escape key should dismiss it, and nothing should feel like a maze you have to solve to get back to the content you came for. A trapped user does not convert; they leave and do not come back.

Frequency, memory, and not punishing people twice

Even a well-designed, genuinely useful popup becomes an irritant if it appears every single time. The most basic courtesy in this whole discipline is memory: if a person has seen your overlay and dismissed it, you do not show it to them again on the next page load, or the next visit, or the one after that. Respecting a dismissal is the clearest signal you can send that you treat “no” as a real answer. The mechanics are simple: set a flag when the popup is dismissed, persist it across the session and ideally across visits, and check it before firing again. What is remarkable is how many implementations skip this and re-show the same overlay on every navigation, so a person browsing five pages gets punched five times. By the fifth, you have not built a relationship, you have built an enemy.

Frequency capping goes a step further than remembering a single dismissal. You decide how often a person who has not engaged is even eligible to see the popup, and you leave a real gap between exposures rather than resetting the clock at every opportunity. Someone who took the offer should never see it again, so the state you store has to distinguish “converted” from “dismissed” from “never shown”. And whole categories of visitor should be excluded from the start: logged-in customers, people already on your list, people mid-checkout. The guiding question is always the same. Am I about to interrupt someone for whom this offer is irrelevant or insulting? If yes, the correct number of times to show it is zero. This is unglamorous plumbing, but it is the difference between a mechanism that feels considerate and one that feels like it is stalking the visitor around the site.

Measuring whether it actually helps, not just whether it harvests

This is the part where I get most stubborn with clients. The typical dashboard shows how many emails the popup captured, celebrates the number, and stops there. But email captures are not the goal. Net conversions and net revenue are the goal, and a popup can inflate the first while quietly damaging the second. You have to ask whether the overlay is genuinely recovering visitors who would otherwise have been lost, or whether it is intercepting people who were going to convert anyway, adding friction, and skimming a discount off transactions that never needed one. The only way to know is to test it properly, holding out a control group who never see the popup, and comparing total conversions and revenue per visitor across the whole cohort, not the self-selected slice who happened to interact.

The metric I care about is incremental lift, and it is a harder, less flattering number than raw capture volume. Split the entire population that hits the exit condition, show the popup to some and not others, and measure the downstream outcome for both groups through to the action that actually matters to the business. If the group that saw the popup converts meaningfully better in total, keep it. If it does not, no amount of collected addresses justifies the interruption. Alongside the headline test, watch your micro-conversions as leading indicators, because they will tell you sooner whether the overlay is helping or hurting the flow before the revenue numbers gather enough weight to be conclusive. And keep an eye on the costs that never show up in the capture count: increased bounce, shorter sessions, unsubscribes from people who only handed over an email to make the box go away. A popup that harvests thousands of addresses and lifts net conversions by nothing is not a success. It is a liability wearing a success costume.

The accessibility basics nobody should skip

An overlay that seizes the screen is, by definition, a modal, and modals have a well-understood set of accessibility obligations that exit-intent popups routinely ignore. The most important is focus handling. When the popup opens, keyboard focus should move into it, and while it is open, focus should be trapped inside so that tabbing cycles through the popup’s own controls rather than wandering off into the page behind. When it closes, focus should return to a sensible place in the underlying content. Without this, a keyboard or screen-reader user can be left stranded, tabbing through elements they cannot see because they are hidden behind an overlay that never announced itself. The escape key must close the popup, both because that is the universal expectation for a modal and because it is the fastest exit for anyone who does not want the offer.

Beyond focus, the overlay needs to announce itself to assistive technology with the right role and an accessible name, so a screen reader tells the user that a dialogue has appeared and what it is for. The close control needs a proper label, not just a visual glyph that reads as nothing. Contrast has to be sufficient, hit targets large enough for people with motor impairments, and any animation should respect a reduced-motion preference rather than lurching onto the screen. I will make the harder claim plainly: accessibility here is not a separate compliance chore bolted on at the end. It is the same principle that runs through this entire post, which is respect for the person on the other side of the screen. A popup that traps a sighted mouse user is rude; one that traps a screen-reader user is exclusion. Both come from the same failure to imagine the human you are interrupting, and both are fixable with a few hours of care that most teams never spend.

A concrete example from the kind of work we do

Let me make this concrete with a pattern we see again and again, described without naming anyone. A retailer came to us frustrated because their exit-intent popup was, on paper, working: it collected a healthy stream of email addresses every week and the marketing team was proud of the number. But total sales were flat and the support inbox had a slow trickle of people annoyed that the discount code shown at the exit did not stack with an offer already running. When we looked at the setup, the overlay was firing site-wide, including on the checkout, offering a flat percentage off to everyone who twitched their cursor toward the top of the screen. It had no memory, so returning visitors saw it every session, and on mobile it fired on a fast scroll, so people got a full-screen takeover simply for reading quickly. It was, in short, harvesting emails and margin from people already going to buy, while doing nothing for the visitors actually leaking away.

We rebuilt it around the principles in this post. We killed the popup on checkout and on any page where the visitor was mid-task. We split desktop and mobile: desktop kept a cursor-based trigger, mobile switched to a quiet slide-up bar that only appeared at the end of the content. We swapped the blanket discount for page-relevant offers, so the product pages answered the delivery and returns questions the audit had flagged as the real hesitation, and only the genuinely price-sensitive category kept an incentive. We added dismissal memory and a proper frequency cap, made the close button obvious and the decline copy neutral, and fixed the focus trapping and escape handling so it behaved like a real dialogue. Then we ran it as a held-out test measured on net revenue per visitor, not captures. The email numbers went down, which briefly alarmed the marketing team, and net conversions went up, which is the number that pays the bills. Fewer addresses and more actual sales is exactly the trade a respectful popup is supposed to make. One more change surprised the client: we moved the reassurance the popup had been carrying into the page itself where possible, following what we know about social proof placement on a landing page, so that fewer people reached the exit needing rescuing in the first place. The best exit-intent popup is often the one that fires less because the page did its job.

A short checklist before you ship

Before any exit-intent popup goes live, I want honest answers to a short list of questions, in prose rather than a form, because reciting them forces the thinking that a tick box lets you skip. First, is the offer genuinely useful and relevant to this specific page, and would you still show it if you stripped the discount out. Second, does it make a single clear ask with one obvious action, rather than a cluttered box trying to do four jobs at once. Third, is the close obvious, honestly labelled, and free of any guilt-tripping decline, and can the person escape by clicking outside, pressing escape, or hitting a real button without feeling trapped. Fourth, does it remember dismissals and conversions, respect a sensible frequency cap, and stay away entirely from logged-in customers, existing subscribers, and anyone mid-checkout.

The rest of the list is about the two things teams most often skip. Fifth, on mobile, have you replaced cursor logic with scroll or engagement signals and considered whether a quieter form than a full takeover would do the job with less resentment. Sixth, does it meet the accessibility basics: focus moves in and is trapped while open, focus returns on close, escape dismisses it, and the dialogue announces itself to assistive technology. And seventh, the one that matters most, are you measuring net conversions and revenue against a proper held-out control rather than congratulating yourself on captured emails. If you can answer all seven honestly and well, you have earned the right to interrupt someone on their way out. If you cannot, you are not recovering lost visitors, you are just annoying everyone, and the whole industry’s reputation for hating these things is being kept alive one more time on your watch. Do them with respect and they work. Do them without it and you deserve the resentment they earn.