Behavior: heatmaps and attention
Where people click, what they hover, how far they read — aggregated by construction, never an individual.
Behavior measurement shows how a page is used — where people click, what they hover, how far they scroll, which blocks they actually read — without ever recording an individual. It is off by default and switched on per site, under Settings, with a visitor sample rate.
What is measured
The tag describes a page by its elements — links, buttons, fields, headings, text blocks and media — and counts, for each page view, how long every element was visible, whether it was clicked or hovered, and how much text it holds. Click positions are additionally bucketed on a coarse grid for the heat layer, and the page keeps a time budget per 5 % of its depth. The whole page view is aggregated locally and sent as one beacon when the visitor leaves.
- Seen: the element was at least half visible while the tab was in front and the visitor active.
- Clicked: a pointer or keyboard activation on the element or inside it.
- Hovered: the pointer rested on it for 300 ms or more — mouse transit does not count, and touch screens have no hover at all.
- Read: a text block stayed visible at least as long as its word count needs at 230 words per minute.
- Dead click: a click whose target has nothing interactive above it. Rage: three clicks or more on the same element within 700 ms.
Three attributes for your markup
Nothing is required: the tag picks elements up on its own. Three attributes make the result more stable and more precise.
| Attribute | Effect |
|---|---|
| data-causalit-id="hero-cta" | A stable identity for an element that matters. Without it, the key is derived from type, label and region, and changes when the wording does. |
| data-causalit-block="pricing-table" | Tracks any custom component as one block — a carousel, a widget, a card — under the name you give it. |
| data-causalit-ignore | Makes the element and everything inside it invisible to the tag. Use it on anything that could carry personal text. |
<a href="/signup" data-causalit-id="hero-cta">Start free</a>
<section data-causalit-block="pricing-table">…</section>
<div data-causalit-ignore>Hello, {firstName}</div>Reading the map
- Each box is an element at the median position recorded across the selected views; filter by device for an exact layout, since a responsive page moves things around.
- Colour is one hue at five intensities: the hottest element in the current mode is always the darkest. Clicks mode adds the click spots underneath; Hover colours by hover; Attention colours the depth bands by time in view.
- A bolt marks rage bursts, a cross marks a content element that collects clicks. The dashed line is the fold — the bottom of the median first screen.
- Click a box to find its row in the table, or a row to scroll the map to its box. Every rate in the table carries its raw sample and a confidence band.
What is never collected
- No visitor id, session id, country, source or IP-derived field: the stored rows cannot be replayed, whatever the query.
- No mouse trails, no DOM snapshots, no screenshots, no session replay.
- No form values, ever. Labels come from interactive elements and headings only, capped at 80 characters; paragraphs are identified by their heading and ordinal, never their text.
- Nothing on sites that have not opted in, and nothing from visitors outside the sample.