# Friction explore

The Friction explore has one row for every friction signal on a property with friction turned on: a JavaScript error, a rage click, a dead click, or a quick back, which is a page view the visitor went back from within ten seconds.
On a store that captures purchases, every alert its Shopify checkout showed and every checkout extension that failed is a row too, from Kontala's Shopify pixel, since the website tag does not run in a checkout.
See [Struggle signals](/docs/data-capture/struggle-signals) for how each one is detected.

## Good to know

- A signal has the dimensions of the page view it happened on, including that page's speed, so you can see which pages friction happens on.
- An error's message is normalised, so one error reads alike wherever it happened, and every URL is scrubbed.
- Rage and dead clicks have no click types.

<!-- GENERATED: everything below is written by scripts/explore-reference.mjs from autocapture 69662e2. Edit the explanation above it, and rerun the script to refresh this part. -->

## Used on dashboards

Charts on these [dashboards](/docs/analytics/dashboards) are built on the Friction explore:

- **Product and app usage**: Friction

## Dimensions

The Friction explore has 131 dimensions.

### The signal

::field-table
| Dimension | Type | Description |
| --- | --- | --- |
| Signal | String | What the visitor met. Error: the page threw an uncaught error or left a promise's rejection unhandled. Error click: such an error within a second of a click. Rage click: three clicks or more within a second of each other, in one spot. Dead click: a click on something that looked clickable that nothing answered within a second. Quick back: a page the visitor went back from within 10 seconds. Checkout alert: a store's checkout showed its buyer an alert, a field to correct or a payment declined. Checkout extension error: an app's checkout extension failed. |
::

### The error

::field-table
| Dimension | Type | Description |
| --- | --- | --- |
| Error kind | String | Uncaught error: code threw and nothing caught it. Unhandled rejection: a promise failed and nothing handled it. |
| Error name | String | The error's constructor, such as TypeError or ReferenceError, where the browser said. |
| Error message | String | What the error said, normalised so one error reads alike wherever it happened: numbers, addresses, ids and quoted text are replaced with &lt;n>, &lt;url>, &lt;id> and '&lt;str>', and only a name such as 'price' is kept. |
| Error | String | The error as its name and message: TypeError: Cannot read properties of undefined (reading 'price'). |
| Error source | String | The script the error was thrown in, without its query string. Empty where the browser did not say, as for an error in another site's script. |
| Script owner | String | This site where the error was thrown in a script on the page's own host or one of its subdomains; Another site where it was a script from elsewhere, such as a tag manager's or a widget's; Unknown where the browser did not say. |
| Error line | Number | The line of the script the error was thrown on. |
| Error column | Number | The column, within that line, the error was thrown at. |
| Error after click (ms) | Number | How long after the click an error click's error came, in milliseconds, under a second. |
::

### The click

::field-table
| Dimension | Type | Description |
| --- | --- | --- |
| Clicks in the burst | Number | How many clicks a rage click was, three or more. |
| Burst length (ms) | Number | From a rage click's first click to its last, in milliseconds. |
| Nothing answered the burst | Boolean | Whether nothing on the page answered any click of the rage click: the clicks of a stepper or a quantity button are answered, and are usually no frustration. |
| Dead click outcome | String | Answered late: the page answered after the first second but within seven. Never answered: nothing within seven seconds. Left first: the visitor left the page or the tab before either. |
| Late answer (ms) | Number | How long a dead click that was answered late waited, in milliseconds. |
::

### The element

::field-table
| Dimension | Type | Description |
| --- | --- | --- |
| Element | String | The element clicked: the link, button or control the click resolved to, else what the pointer was on. |
| Element text | String | A link's or a button's own text, redacted. Empty for anything else, as for a click. |
| Element id | String | The element's id attribute. |
| Element classes | String | The element's class attribute. |
| Element name | String | The element's name attribute, as a form control carries it. |
| Element type | String | The element's type attribute, where it has one, such as a button's. |
| Element role | String | The element's role attribute, such as button or tab. |
| Element label | String | The element's aria-label. |
| Element path | String | Where the element sits in the page, up to eight elements from the nearest: main > form.checkout > button. |
| Element attributes | String | Every attribute kept, as JSON, which a contains filter reads. |
| Clicked on | String | What the pointer was on, where the click resolved to an element around it, such as the icon inside a button. Where nothing actionable was clicked, it is the element itself: something that looked clickable and is not. |
| Element shown as | String | The element as a reader would know it: its text, else its aria-label, else its tag and id, such as button#add. |
::

### From the Page views explore

Every row also has these 104 dimensions of the [Page views explore](/docs/analytics/page-views#dimensions), which mean the same here and are described there:

- **Time**: Event time, Ingest time
- **The visitor**: Visitor type, Days since first visit
- **The visit**: Entrance page, Entrance hostname, Session page views, Single-page session, Session number
- **Scroll depth**: Scroll depth (%), Scroll depth band
- **Page speed**: LCP (ms), LCP rating, INP (ms), INP rating, CLS, CLS rating, FCP (ms), FCP rating, TTFB (ms), TTFB rating, Speed rating, Load or route, LCP element, INP element
- **Friction**: Friction measured
- **Page**: Path, Section, Subsection, Page title, Hostname, Site domain, Query string, Referrer host, Referring domain
- **Attribution**: Campaign source, Campaign medium, Campaign, Campaign term, Campaign content, Click ID source, Has click ID
- **Attribution carried across the visit**: Session campaign source, Session campaign medium, Session campaign, Session click ID source, Session referring domain, Session referrer host, Session campaign term, Session campaign content, Channel
- **First touch**: First-touch channel, First-touch source, First-touch medium, First-touch campaign, First-touch referring domain
- **Geo**: Country, Country name, Continent, Region, City, Geo source
- **Network**: ISP, ASN, Datacenter traffic, Cellular
- **Browser environment**: Language, Language code, Language name, Device class, Screen resolution, Viewport size, Timezone offset (min)
- **The visitor's own clock**: UTC offset, Local hour of day, Local day of week, Local day of week number
- **Browser, operating system and device**: Browser, Browser version, Operating system, Device type, User agent
- **An app**: Platform, Shown in app, App version, App build, OS version, Device model, SDK version
- **Data source and quality**: Tenant, Site, Allowed origin, Origin, Tag, Tag version, Collector version, Delivery mode
- **Signed-in user**: Signed in, Organisation, Company domain, Global Privacy Control, Scrubbed parameters
- **Page type**: Page type, Page type source

## Metrics

The Friction explore has 11 metrics.

::field-table
| Metric | Calculation | Description |
| --- | --- | --- |
| Friction signals | Count | Errors, rage clicks, dead clicks and quick backs on measured pages, and a store's checkout alerts and failed checkout extensions. Bot traffic is left out, and nothing is stored without consent. |
| Errors | Count | JavaScript errors and unhandled rejections, each once a page view however often it was thrown, error clicks included. |
| Error clicks | Count | Errors that came within a second of a click. |
| Rage clicks | Count | Bursts of three clicks or more within a second of each other, in one spot. |
| Dead clicks | Count | Clicks on something that looked clickable that nothing answered within a second. |
| Quick backs | Count | Page views the visitor went back from within 10 seconds. |
| Checkout alerts | Count | Alerts a store's checkout showed its buyers, each once however long it stayed on screen. |
| Checkout extension errors | Count | Times an app's extension failed in a store's checkout. |
| Visits affected | Count distinct | Visits that met at least one of the signals in the rows. |
| Visitors affected | Count distinct | Distinct device cookies among the visits affected. Optimistic on Safari for the reason the page view explore gives. |
| Pages affected | Count distinct | How many different pages the signals in the rows happened on, each hostname and path once. |
::

## Your own fields

When your organisation maps data layer fields in Data Capture, they appear in the Friction explore too: the standard fields under **Standard fields** and your own under **Data layer**.
They are left out of the lists above, because every organisation maps its own.
