Rage click
Three or more clicks within a second, close together.
- Usual cause: something slow, or something that looks like it should respond and doesn’t.
- Check first: how long the thing clicked takes to respond.
Funnels tell you where people leave. Friction signals tell you what happened just before: the button that did nothing, the field that kept rejecting them, the page they bounced straight back from. This guide defines each signal, shows how to rank them so the list means something, and covers the false positives that waste a sprint.
| Element and signal | Sessions |
|---|---|
input#postcode Form error | 862 |
button "Find address" Rage click | 377 |
/delivery-info U-turn | 214 |
41% of the people who left Delivery hit friction first, against 9% of those who went on to pay. The postcode field rejects spaces.
Each signal is a small, observable moment of failure. None needs a survey or a recording to detect, so they can be counted on every session, including cookieless ones.
Three or more clicks within a second, close together.
A click on something that looks clickable, then no change within a second.
A click followed by a JavaScript error within a second.
Page A to page B and straight back, within seven seconds.
A field fails validation or is marked aria-invalid.
A form started and left without submitting.
Raw counts mislead in two ways. One frustrated person clicking twenty times outweighs nineteen people who gave up after one try. And busy pages always have the most of everything, so the list just repeats your traffic report.
Count sessions affected instead, and divide by the page’s sessions to get a friction rate. Now a quiet page where a third of visitors struggle ranks above a busy page where almost nobody does.
| Page | Rage clicks | Sessions | Friction rate |
|---|---|---|---|
/products/* | 9,420 | 61,300 | 3% |
/checkout | 2,180 | 6,480 | 29% |
/account | 310 | 2,730 | 8% |
Product pages have four times the rage clicks and one tenth of the rate: it’s an image carousel. Checkout is the real problem.
Every friction report has noise in it. These are the patterns worth recognising before you file a ticket.
Clicking “+” five times to order five, or “next” through a gallery, looks like rage. If the page converts normally and the element is a stepper, it’s working as designed.
Rage clicks on a button that does eventually work are still friction, just a different fix. Look at response time, not the handler. A loading state often solves it.
Browser extensions and third-party scripts throw errors too. An error click is only yours if the error comes from your code. Group by error message before you look.
Opening a size guide and coming straight back is the point of a size guide. A u-turn is a problem when the page was the next step, not a reference.
The quickest filter: compare converting and non-converting sessions. Friction that shows up equally in both is usually noise or a minor annoyance. Friction that shows up mainly in sessions that left is what to fix.
The same interface creates different friction for different people. Large text pushes a button under a sticky banner, and people rage-click the banner. Zoomed-in users lose the navigation and u-turn more.
Keyboard users are the subtle case. A clickable div with no focus can’t be clicked from a keyboard at all, so it never shows up as a dead click from them. It shows up as abandonment. Split friction by accessibility setting, and look at which signal changes, not just how much there is.
| Setting | Friction | Top signal |
|---|---|---|
| None | 11% | Form error |
| Large text | 22% | Rage click |
| Zoomed | 19% | U-turn |
| Keyboard | 37% | Form abandonment |
Keyboard users don’t rage-click the coupon button. They can’t reach it. Their friction shows up as abandoned forms instead.
Sort hotspots by sessions affected, filtered to sessions that didn’t convert.
Split by device, browser, app version and accessibility setting. A hotspot that hits one group hard is a different bug from one that hits everyone a little.
Watch a few consented replays of sessions that hit it, and read what people said in surveys or feedback on that page.
Ship the fix, then compare the share of sessions hitting that element before and after. If the rate doesn’t fall, the fix didn’t work, whatever the ticket says.
Taps don’t carry CSS selectors, and screens aren’t pages, but most of the signals translate.
Friction analytics doesn’t need form values. A form error records the field and the kind of failure, never what was typed. Metrickle never reads field values, keeps only selectors and short visible labels, and drops an element’s text entirely when it carries data-mk-mask.
Detecting and counting small moments where an interface fails people, such as clicks that do nothing, repeated clicks, errors, quick back-and-forth navigation and rejected form fields, then ranking them by how many sessions they affect.
A rage click is several fast clicks in one spot, usually because something is slow or unresponsive. A dead click is a single click on something that looks clickable, after which nothing changes. Dead clicks often find broken controls people only try once.
There’s no universal benchmark: it depends on the page and how signals are defined. Compare pages within your own product, compare converting with non-converting sessions, and compare before and after a release.
No. Signals are detected in the browser or app and sent as events, so they work without recordings and in cookieless mode. Replay helps you see a hotspot happen, but it needs consent and isn’t required.
Heatmaps show where people click in aggregate, which is useful for layout. They don’t say whether a click worked. Friction signals do, and they can be tied to funnels, conversions and accessibility settings.
Six signals captured automatically from one script tag, ranked by sessions affected. Free to start.
Start free