Skip to main content
Every ABTestly site ships with two goals already defined and every new experiment automatically has both attached as guardrails. You cannot edit or delete them, and you do not have to configure anything to use them. They are marked System in the goal library.
Goals library with system goals visible

Goals library. The two system goals sit at the top with a lock icon.

Why they exist

The two most common ways an experiment secretly harms your site are:
  1. It kills engagement, the click through, the second page view, the thing that leads to your real conversion.
  2. It causes people to leave without doing anything.
Every experiment worth running should be checked against both, and that should not depend on you remembering to configure it. So ABTestly configures it for you.

Increase Engagement

Key: __abtestly_system_increase_engagement Type: Click on a hyperlink. A visitor “engages” when they click an element that resolves to an <a href>. A <button> that only runs JavaScript, and an <a> with no href, do not count. One capturing listener is installed on document for the whole site, no matter how many experiments carry the goal. The fire is gated on the route at click time, so on a site with SPA support a click after a soft navigation away from a tested page does not count.

Engaged session (system)

Key: __abtestly_system_decrease_bounce_rate Type: Non bounce.
This goal used to be shown as Decrease Bounce Rate. It is now displayed as Engaged session, because visitors convert it by not bouncing and the old name read backwards on the results page. The key is unchanged, so no data or integration breaks. Note that a separate goal type is also called Engaged session; that one is 30 seconds plus a click and is something you configure yourself.
A visitor qualifies when either of these is true, whichever happens first:
  • They view a second page in the same session.
  • They stay ten seconds after the page started loading.
The ten second timer is wall clock and measured from the start of the current page visit. It is not paused when the tab is hidden, so time spent in a background tab counts toward it. The second page condition is counted at the session level, so an experiment first seen on what is already the session’s second page qualifies immediately. Attribution is cross page and is not gated on the route. If the visitor was exposed to your test on page one, then viewed page two, the qualification is credited to that experiment even though the second view happened on a URL the experiment does not target. This goal is the only one that works that way. The snippet coordinates delivery through a small state machine, pending while the ten second timer runs, queued while a navigation is in flight, settled once the event has landed. If the browser closes before it can send, ABTestly retries opportunistically on the next pageview, up to a bounded number of attempts.

How it compares to GA4

ABTestly’s rule is its own. Google Analytics 4 calls a session engaged when it lasts longer than a threshold you can configure, or has two or more pageviews, or has at least one key event. ABTestly has a fixed ten second threshold and no key event condition. The two numbers will therefore not reconcile. Read this goal as “stayed ten seconds or saw a second page”, not as the inverse of GA4 bounce rate.

Both goals as guardrails

By default the two system goals attach as guardrails, not as your primary metric. On the results page they appear in the guardrail list. A variant that wins on your primary metric but significantly lowers either system goal is called out. If you have a specific need to make one of them your primary metric, Increase Engagement on a top of funnel landing page test for example, you can promote it in the experiment editor’s What to measure section. Promoting a goal to primary clears its guardrail flag; a goal is never both at once.

Turning them off

You cannot delete the goals themselves, every site keeps them, but you can detach them from a specific experiment. In the experiment editor, under What to measure, click the row for the system goal and remove it. New experiments still get both attached by default. Two situations where detaching makes sense:
  • A test on an intentionally terminal page. A confirmation page is a dead end by design. Leave the goal on and every test on that page looks like it is failing the guardrail. Detach and rely on your primary goal instead.
  • A single page app where “second page view” does not map cleanly. The ten second condition alone still works, but you may want a custom goal that reflects your app’s own definition of engagement.

What was there before

Sites created before the roll out have the two goals seeded retroactively. No action needed on your part; nothing changes about experiments already running. The next experiment you create shows both goals attached by default.
Last modified on August 28, 2026