CategoryResearch and method

Funnel analysis: what GA4 and heatmaps show, and hide

9 min read

A funnel measures how many users complete a sequence of steps you defined, and where the rest stop. It reports counts per step, not reasons. Google Analytics 4 builds this as an exploration funnel, and a session recording explains one click rather than the count. Read the report as a question generator, not as a verdict.

What a funnel measures and what it doesn’t

A funnel answers one question: of the users who entered, how many reached each step I named, in order. Everything else is a different question using the same data.

What a funnel answers well:

  • How many users reach each step of a named sequence.
  • Where the largest drop sits between two steps.
  • Whether a change moved users further down the same sequence.

What a funnel doesn’t answer:

  • Why users stopped. The report counts the stop and not the cause.
  • What happened to users who took a different path. The funnel only knows the order you gave it.
  • Whether the drop is friction or disinterest. Both look identical in a count.
  • Whether the step you named is the step that decides. Naming is your assumption.
  • Anything about a step you didn’t add to the funnel.

Define the steps before you look at the data

The funnel is only as good as the sequence you typed into it. Define the steps first, from the product, and then open the report.

  • Write each step as an action a user takes, not as a page you own. “Completed checkout” beats “visited /checkout”.
  • Name the entry condition. Who counts as having entered, and when the clock starts.
  • Keep the sequence short. Google Analytics 4 accepts up to 10 steps in an exploration funnel, and a short funnel is easier to explain.
  • Write down what you expect each step to show before you run it. The expectation is what turns a number into a finding.

How GA4 builds the exploration funnel and what the settings hide

The GA4 exploration funnel accepts up to 10 steps and up to 4 segments (GA4 funnels), and you can open or close it. Those two settings change the number on screen, and they change it silently.

A user is counted only in the steps completed in sequence. That user enters the funnel once, and the report shows the first sequence.

The open and closed setting is where most misreadings start (GA4 funnels). In an open funnel, a user who begins at step B of a funnel A, B, C appears in B and in C. In a closed funnel, that same user appears in no step at all. A user who completes A and C appears in A under both settings. The setting decides who is in the denominator, and the label on the report doesn’t say so.

Two more behaviors hide inside the report.

  • Breakdown attribution goes to the first occurrence of the value, not the last.
  • The next actions card shows the entry “(no next action)” when the dimension is a page title (GA4 funnels). The entry means that no next action was recorded for that dimension, and it doesn’t imply that the user left.

Two definitions travel with the funnel and change what you count.

  • An engaged session lasts more than 10 seconds, or has a key event, or has 2 or more page or screen views (engaged sessions).
  • Data thresholds are set by the system and can’t be adjusted (data thresholds). When a threshold applies, the report withholds rows, and you can’t lift it from the interface.

Sampling, aggregation thresholds and high cardinality

A funnel is an aggregate, and every aggregate has a lower limit. Two mechanisms cut the data before you read it.

The first is high cardinality. A dimension with more than 500 unique values in a day spills into a row labeled “(other)” (reporting data expectations). Page paths, query strings and user properties reach that line quickly. When “(other)” grows, the visible steps lose users that are still real.

The second is thresholds. Google sets the data threshold, and the setting isn’t yours to change. A step that looks small may be small only in the rows the report was allowed to show.

The practical rule: check the cardinality of every dimension in the breakdown before you trust a step count. A dimension with hundreds of values per day is reporting a summary of a summary.

What session recording and heatmaps show

A recording and a heatmap answer a different question from the funnel. The funnel says where users stopped. A recording shows the click, the pause and the path that the count can’t.

Hotjar describes the recording as a reconstruction (how recordings work). It captures the initial HTML plus the DOM tree, and it observes clicks, mouse movement, scroll and typing. The session ends after 30 minutes of inactivity.

Heatmaps come in several types (heatmap types), and each one reads a different layer: click, move, scroll, engagement zones and rage clicks. A rage click is five clicks on the same element within 500 milliseconds. Hotjar itself warns that a carousel can produce a false positive, because a user waiting for a slide can click the same control five times without frustration.

A Hotjar funnel is measured by session, with up to 10 steps of a page view, an element click or an event fired (Hotjar funnels). It supports session filters and up to 5 comparisons.

Where recordings and heatmaps mislead

Both tools document their limits, and that is exactly where teams read too much into them. The list is long, and it comes from the vendors.

  • A page with scroll locked, or one that uses parallax, is captured cut or distorted (heatmap limits).
  • An iframe appears as a black box, with no click data (heatmap limits).
  • There is a 10 MB limit on HTML and a 50,000-pixel limit on capture height (heatmap limits).
  • Canvas and WebGL aren’t tracked (heatmap limits).
  • overflow-x hidden on html and body breaks scroll detection (heatmap limits).
  • A custom font and a hover menu also interfere with the capture (troubleshooting).
  • A heatmap depends on recording being active on those pages. No recording, no heat.
  • On mobile, only clicks and scroll are tracked, and horizontal swipe isn’t (heatmap types).
  • There is no click data when the id or the class is dynamic (troubleshooting).
  • There is no click data when the code calls stopPropagation (troubleshooting).
  • There is no click data when the URL target doesn’t match (troubleshooting).

A black box in a heatmap is a gap in the tool. Treat it as unknown and not as zero.

Friction against disinterest

A drop in the funnel has two possible readings, and they call for opposite fixes.

Friction is a user who wanted the step and couldn’t finish it. A recording shows the repeated click, the backtrack and the field they abandoned. The rage click signal exists for this case, with the carousel caveat above.

Disinterest is a user who read the step and left on purpose. No amount of interface repair moves that user, and the recording will look calm.

The funnel can’t separate the two. A short recording review can. Watch five sessions that dropped at the same step and look for repeated clicks, scroll-back and pauses (why five users are enough). If the sessions look calm, you have a message problem and not a layout problem.

Where the NN/g articles disagree

Two articles from the same publisher don’t agree on when a wait needs a progress indicator.

Response times: the 3 important limits sets a floor. For an operation that takes 2 to 10 seconds, it says a percent-done indicator may be overkill, and that showing one can violate the user’s sense of screen inertia. An indicator is reserved for waits longer than 10 seconds.

Progress indicators reaches a different rule. It reports that users are more satisfied and wait longer when the indicator is dynamic, and it states no lower bound on the wait.

The disagreement sits in the 2-to-10-second band, which is where most page transitions and form submissions land. Read the two texts as arguments about cost and about satisfaction, not as a single rule (NN/g, response times, NN/g, progress indicators).

From finding to testable hypothesis

A finding is a sentence that could turn out to be wrong. Write it that way before you touch the page.

  • State the observation with its number: “38% of users who reached step 3 left before step 4”.
  • State the cause you believe, as a claim: “the shipping cost appears only at step 4, and users leave when they see it”.
  • State the change and the metric: “showing the shipping estimate at step 3 should raise step 4 completion”.
  • State the step you expect to move, and by how much. A prediction you can miss is a hypothesis.
  • Keep the funnel settings fixed for the test. An open funnel and a closed funnel won’t compare.

Then run the test on one change, and read the same funnel again with the same settings.

Both tools touch personal data, and both publish their position.

Hotjar states that it is the processor and that the client owns the data (privacy questions). Typing is suppressed in all fields on the client side, so a recording shows the field and not the text. Hotjar hasn’t collected IP addresses since 2014. Hotjar doesn’t block personal data that the client sends. The identification API, added in November 2019, lets the client attach an identifier to a session, and that is the feature which ties a recording to a known user. Hotjar respects the Don’t Track header.

On the GA4 side, the data thresholds exist to protect identity (data thresholds), and that is also why they can’t be adjusted. Consent state decides whether a session is measured at all. An unconsented user is missing from the funnel rather than counted as a drop.

Two habits keep this clean.

  • Read the vendor’s own documentation on retention and identity before you enable recordings on a page with forms.
  • Document what you suppress, and check that the suppression covers the fields you think it covers.

The funnel, the recording and the heatmap are three readings of the same visit, and none of them is the visit. Use the funnel to find the step, the recording to see the click, and a written hypothesis to decide what to change.

A related note sits in the A/B test sample size post, which covers how to fix the sample before you start.

Sources

More articles

See all articles