Browse Analytics
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 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.
Used on dashboards
Charts on these dashboards are built on the Friction explore:
- Product and app usage: Friction
Dimensions
The Friction explore has 131 dimensions.
The signal
| 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
| 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 <n>, <url>, <id> and '<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
| 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
| 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, 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.
| 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.