Guide
What rage clicks are and how to fix them
A rage click is a burst of clicks on the same element in quick succession. People click like that when they expected something to happen and nothing did, or when it happened too slowly to notice. Rage clicks rarely throw an exception, so an error tracker never hears about them.
How many clicks count as a rage click?
There is no standard threshold. Probie counts three or more clicks on the same element, each within about a second of the last, as a rage click. The rule is the same on the web and in Expo and React Native apps, where it applies to taps. A slower cadence usually means a person deliberately trying again, which is a different signal.
Probie records the event as rage_click with the click count and the element. Input values are never read and element labels are hashed. The full list of captured events is in the docs.
What causes rage clicks
Almost every rage click has one of five causes. Each needs a different fix, so the cause matters more than the count.
- The control does nothing
- The handler was never wired up, the button is behind an invisible overlay, or the click lands on a wrapper element instead of the button.
- The control works but says nothing
- The request started, but the button shows no pending state, so the person clicks again. On a checkout or signup form that can send the same order or account twice.
- It only looks clickable
- A card, an icon, a table header, or underlined text looks interactive and is not. Hover styles and a pointer cursor on a plain
divcause this. - The response is slow
- The first click registered, but nothing changed on screen for several seconds.
- The target moved
- Content loaded above the button and pushed it down between the moment the person aimed and the moment they clicked.
Is every rage click a problem?
No. Quantity steppers, carousel arrows, and games invite fast repeated clicks by design. The count alone cannot separate those from a dead button. What separates them is the rest of the session: whether the page changed after the clicks, whether a request failed, and whether the person gave up afterwards.
Probie keeps that context. A session with a rage click is flagged, then a model reads the session trace and decides whether it shows a real problem. Sessions it judges to be noise open no issue.
How to find them
Session replay and product analytics tools surface rage clicks for a person to watch. That works when someone has time to review replays. Probie takes the next steps as well:
- The SDK records
rage_clickevents from real sessions on web, Expo, and Swift. - Sessions that hit the same problem are grouped into one issue with the evidence attached.
- For projects connected through the GitHub App, Probie opens a pull request with a regression test. A person on your team reviews and merges it.
- A behavior baseline per route flags the route if the friction returns after the merge.
The fix for each cause
- The control does nothing
- Wire the handler, or remove the element that intercepts the click. The regression test clicks the control and asserts the expected effect: a navigation, a request, or a change on screen.
- The control works but says nothing
- Disable the control while the request is in flight and show that it is working. The test clicks twice and asserts that only one request was sent.
- It only looks clickable
- Either make the element do what it suggests or remove the cues: the pointer cursor, the hover state, the underline.
- The response is slow
- Acknowledge the click at once with a pending state, then make the slow step faster.
- The target moved
- Reserve space for content that loads late, such as images, banners, and embeds, so the layout does not shift under the pointer.
Check your project for the causes
A free Probie inspection finds most of these causes before a real user runs into them. It drives a browser through your public pages and reports controls that do nothing, elements that only look clickable, clicks with no visible response, slow first responses, and layout shifts. It needs no account and no install.
Questions
What is the difference between a rage click and a dead click?
A dead click is a single click with no effect: no page change, no request, no navigation. A rage click is several clicks in a row on the same element. A dead click often turns into a rage click when the person tries again. Probie records both, as dead_click and rage_click.
Do error trackers catch rage clicks?
An error tracker records exceptions. A click on a button with no handler throws nothing, so it appears only in a tool that records clicks, such as session replay or behavior analytics. Probie records the clicks and can also take Sentry issues as input.
What does Probie collect to detect rage clicks?
Behavior events such as clicks, rage and dead clicks, page views, and form submits. Input values are never read, element labels are hashed, query strings are dropped except campaign tags, and no cookies are set.