Metrickle

See where people click in frustration, and what they clicked

The Metrickle script tag notices the moments your interface lets people down: rage clicks, dead clicks, clicks that throw an error, quick u-turns, form errors and abandoned forms. The friction report ranks them by element and page, so you know what to fix first.

Friction reportacme.com · last 30 days
Sessions41,260
With friction5,902
Friction rate14.3%▲ 2.1 pts
Top friction hotspots by element and page, with sessions affected
Element and signalPageSessions
button "Apply coupon" Dead click/cart1,412
input#postcode Form error/checkout986
button "Pay now" Rage click/checkout/pay511
/delivery-info U-turn/checkout344
a "Track order" Error click/account207

“Apply coupon” looks like a button and does nothing until a code is typed. One in three cart sessions with friction starts there.

Captured automatically, with nothing to tag

Add the script tag and friction is recorded from the first page view. Each signal carries the element's selector and visible label, so the report can point at the exact button or field.

Rage clicks

Three or more clicks within a second on the same spot. Usually something slow, or something that looks like it should respond and doesn't.

Dead clicks

A click on something that looks clickable, followed by nothing: no page change, no DOM change, no focus move and no scroll within a second.

Error clicks

A click followed by a JavaScript error within a second. The error is tied to the click that caused it, not to whatever was clicked last.

U-turns

Someone goes from page A to page B and comes straight back within seven seconds. Page B wasn't what the link promised.

Form errors

A field failed the browser's own validation or was marked aria-invalid. The field is recorded; what was typed is not.

Form abandonment

Someone started filling in a form and left the page without submitting it.

A friction rate for every page

Counting clicks overstates the problem on busy pages and hides it on quiet ones. The friction report counts sessions instead: how many sessions hit a signal, and what share of each page's sessions that is.

Hotspots list the element, the page and the signal, sorted by sessions affected.

  • Sessions affected, not raw click counts, so one frustrated visitor doesn't top the list.
  • Friction rate per page, to compare a busy page fairly with a quiet one.
  • Filter like anything else: by device, browser, campaign, app version or survey answer.
Friction rate by pageacme.com · last 30 days
Sessions on each page, and the share of them that hit any friction signal
PageChartSessionsFriction rate
/checkout6,48031%
/cart9,11524%
/account/settings2,73012%
/pricing12,9046%
/blog/*18,3322%

Rank pages by rate, not volume. The blog has the most sessions and almost no friction. Checkout has a third as many and the highest rate.

See who your interface breaks for

Every event carries the accessibility settings seen on the device: keyboard navigation, zoom, large text, high contrast, forced colours and reduced motion. The friction report shows friction rate and conversion rate for each, next to people using none.

A dead click that a mouse user shrugs off can be a wall for someone on a keyboard. This is where that shows up.

Friction by accessibility settingacme.com · last 30 days
Friction rate and conversion rate for each accessibility setting, compared with people using none
SettingVisitorsFriction rateConversion
None33,87012%4.1%
Reduced motion2,14013%3.9%
Zoomed1,20822%2.6%
Large text1,65519%2.8%
Keyboard91238%1.4%

Keyboard users hit friction three times as often and convert at about a third of the rate. Their top hotspot is the same dead “Apply coupon” button.

Browsers hide whether a screen reader is running, so on the web Metrickle reports sustained keyboard navigation instead. The mobile SDKs report the device's screen reader setting.

From hotspot to fix

  1. Find the hotspot

    Sort by sessions affected, or open the page with the highest friction rate.

  2. Check who it hits

    Split by device and accessibility setting, or filter to sessions that didn't convert or tasks that were abandoned.

  3. See it happen

    Open consented, masked replays of sessions that hit the signal, and read what people said in surveys on that page.

  4. Confirm the fix

    After you ship, compare the page's friction rate for the weeks before and after the release.

Friction without reading what people type

The script tag never reads the values of form fields. A form error records which field failed and why the browser rejected it, never the value. Selectors and short visible labels are kept so hotspots are recognisable.

  • data-mk-mask keeps an element's text out of every event, for labels that include names or account details.
  • Works in cookieless mode: friction is captured with nothing stored on the device.
  • Web and mobile: the iOS, Android and Flutter SDKs detect rage taps, u-turns and form errors, and the React Native SDK detects u-turns.
<!-- Field values are never read. -->
<!-- For text that must never be captured, -->
<!-- such as a name on a button, add: -->
<button data-mk-mask>
  Pay as Jane Doe
</button>

Common questions

What counts as a rage click?

Three or more clicks within one second, all within about 30 pixels of each other. It's recorded with the element's selector and visible label, and the page it happened on.

How is a dead click different from a rage click?

A dead click is a single click on something that looks clickable, like a button or link, after which nothing happens within a second: no navigation, no change to the page, no focus move and no scroll. It often catches broken or disabled controls that people only click once.

Do I need to tag elements or add code for friction tracking?

No. The script tag captures all six signals on its own. You can switch rage-click capture off in the npm package options if you need to.

Does Metrickle record what people type into forms?

No. Field values are never read. Form errors record the field and the kind of validation failure. Add data-mk-mask to any element whose visible text must stay out too.

Does the friction report work in mobile apps?

Yes, in part. The iOS, Android and Flutter SDKs detect rage taps, u-turns between screens and form errors (through a formError() helper). The React Native SDK detects u-turns. Dead and error clicks come from the web script tag for now.

See where your apps break, and who they break for

Free to start. One script tag on the web, one SDK on mobile, and no cookie banner in cookieless mode.

Start tracking for free