measuremy.site

What Is Bounce Rate and How Is It Calculated?

Person writing math equations on a whiteboard, focusing on integrals and formulas.
Photo by Jeswin Thomas on Pexels

The short definition

A bounce is a session that starts and ends on one page without any further tracked interaction. The visitor lands, maybe reads the page, and then leaves or closes the tab. Bounce rate is the share of sessions that behave this way.

The basic calculation

The site-wide formula is:

bounce_rate = (single_page_sessions / total_sessions) * 100

If 400 of 2,000 sessions have one pageview and no tracked engagement, bounce rate is 20%.

There is also a per-page version:

page_bounce_rate = (bounces_from_that_page / entrances_to_that_page) * 100

The per-page version is useful when you want to know which landing pages lose people immediately. The site-wide version is the one most dashboards show as "bounce rate."

What counts as an interaction matters

The formula is simple, but the definition of "single_page_sessions" depends on your analytics setup. Some tools count only pageviews. In that model, a visitor who reads a long article and leaves is a bounce, even if they spent five minutes on the page. Other tools count events such as scroll depth, video plays, downloads, or custom clicks as engagement.

Before you read a bounce rate, check what your tracker counts as an interaction. If you want a more meaningful number, define the actions that matter for your site and track them.

For example, with measuremy.site you can track a click with a data attribute:

<button data-measuremysite-event="signup_click">Sign up</button>

In an analytics setup that treats custom events as engagement, that click changes a single-page session into a non-bounce. The exact behavior depends on the tool, so check its documentation.

Single-page apps make bounce rate harder

A traditional pageview is a full page load. If your site uses client-side routing, a visitor can move from the homepage to pricing and back without triggering new pageviews. If you only track initial page loads, every session looks like a bounce.

The fix is to send a virtual pageview or a custom event on each route change. The same idea applies to content sites where readers scroll through a full article. If the article is the only page they visit, the question is not whether they bounced, but whether they got what they came for.

Bounce rate is not exit rate

Exit rate is different. Exit rate is the percentage of pageviews of a page that were the last pageview in a session. A page can have a high exit rate but a low bounce rate.

Imagine a pricing page. Most visitors arrive from the homepage. They read the pricing page, then leave. The pricing page's exit rate is high because it is often the last page in the session. Its bounce rate is low because most people did not start there; they arrived from another page. Confusing the two leads to bad decisions.

Session timeout affects the number

A session usually ends after a period of inactivity, often 30 minutes. If a visitor lands on a page, leaves the tab open for 40 minutes, then clicks a link, that click may start a new session. The original session is then a bounce.

This means bounce rate is partly a function of your session timeout. A longer timeout may reduce bounces because more actions fall within the same session. A shorter timeout may increase bounces. Do not compare bounce rates across tools without checking session definitions.

How to calculate it yourself from raw data

If you have access to raw session data, the calculation is straightforward:

sessions = group pageviews by session_id
bounces = count sessions where pageview_count == 1 and event_count == 0
bounce_rate = bounces / total_sessions * 100

This is the same logic as the formula above, just expressed in code. The hard part is not the arithmetic. The hard part is deciding what belongs in event_count. If you count every scroll or mouse move, you will have almost no bounces. If you count only pageviews, you will have many.

Use bounce rate as a question, not a grade

A bounce is not always bad. A support page that answers a question and sends the visitor away has a high bounce rate and a happy visitor. A pricing page that pushes visitors to a signup page has a low bounce rate. The number alone does not tell you which page worked.

Instead of treating bounce rate as a target, use it to find pages that need a closer look. If a landing page has a high bounce rate, ask whether the headline matches the source, whether the page loads quickly, and whether there is a clear next step. If a long article has a high bounce rate, it may simply be doing its job.

Closing

If you run a small site, measuremy.site is a hosted cookieless tracker that records visitors, pages, sources, countries, browsers and systems. You can add custom events and click tracking to define engagement in a way that fits your site. Whatever tool you use, the first step is to know what it counts as a bounce before you act on the number.

See it on your own site

measuremy.site is cookieless analytics your coding agent can read. 30-day free trial, no card. Plans from $9/month.

Start free trial See the live demo

Add measuremy.site analytics to this project: connect the measuremy.site MCP server at https://a.measuremy.site/mcp for all my projects (claude mcp add --scope user; it signs in with OAuth, no key, and one sign-in covers every site), then tell me how to sign in. Details: measuremy.site/llms.txt

Free tools

All free tools

More from the blog