Use ABlyftAudiences & delivery

Pages & URL targeting

Define on which URLs an experiment runs, when ABlyft checks them and how a page is deactivated again.

A page tells ABlyft where an experiment should run. It consists of URL rules and, if needed, a piece of JavaScript. You create a page once and attach it to as many experiments as you like.

An experiment only runs on a visitor's current page if at least one of its attached pages matches. Without a page, an experiment cannot be started.

Create a page

There are two ways:

  • From an experiment: in the card Pages ("WHERE should it run?"), click +. The new page is attached to the experiment automatically.
  • From the navigation: go to Targeting & Goals → Pages and create a new page. Later, attach it to an experiment with the selection button in the Pages card (the window is titled "Attach pages to experiment").

The page form has these sections:

SectionPurpose
GeneralName (clear and descriptive, unique in the project) and an optional Description.
TargetingThe URL rules, and under Advanced Targeting the JavaScript rules.
TriggerWhen ABlyft checks the targeting.

URL rules

In Targeting, add one rule per row with Add new URL. Each rule has three parts:

ColumnDescription
TypeInclude or Exclude.
URLThe address or text to check.
MatchHow the URL is compared, see below.

How rules are combined

  • The page matches if at least one Include rule matches the current URL.
  • If any Exclude rule matches, the page does not match, no matter what the Include rules say.

You need at least one Include rule

Exclude rules only remove URLs from the ones you included. A page with only Exclude rules never matches.

Match types

MatchThe rule applies if …
Simple (URL must match)the address matches. Protocol, query string, hash and a trailing slash are ignored.
Exact (URL + query must match)the complete address matches, including the query string and the hash. A trailing slash is ignored.
Substring (URL contains)the current URL contains your text anywhere.
Regex (pattern match)the current URL matches your regular expression.

For Simple and Exact, enter a full URL such as https://example.com/product. The host is compared as written, so www.example.com and example.com are different.

Examples:

MatchURL in the ruleMatchesDoes not match
Simplehttps://example.comhttps://example.com/, https://example.com/?a=bhttps://example.com/home
Exacthttps://example.com/?a=bhttps://example.com/?a=bhttps://example.com/, https://example.com/?a=b&c=d
Substring/product//product/shirt, /product/a/b/products/overview
Regex/news/(vips|styles|dresses).*/news/vips, /news/styles/latest/news/dinners

Several domains or languages

Simple and Exact include the host. If the same experiment should run on several domains, use Substring or Regex with the path only (for example /product/). Combine this with environments to control on which site the experiment runs.

Target URL parameters

To target a page by its query parameters, use Exact, or Substring and Regex with the parameter in the text, for example utm_source=newsletter. For more flexible conditions, use advanced targeting and read the parameter with ablyftTools.getUrlParameter():

return ablyftTools.getUrlParameter('utm_source') === 'newsletter';

getUrlParameter() returns null if the parameter is missing. See the tools reference. If you only want to limit who sees an experiment and not where it runs, an audience with the criterion URL parameter is easier.

Advanced targeting: JavaScript rules

Open the section Advanced Targeting ("Is more to consider than URLs?") if the URL alone is not enough, for example if the page must also contain a certain element.

In the code field Rules, write JavaScript that returns true if the page is valid. The URL rules and the JavaScript rule must both be fulfilled.

// Valid only if the page shows a product with a "sale" label
return document.querySelector('.product .label-sale') !== null;

The code can use ablyftTools and Tools (see tools) and User. If your code throws an error, the rule counts as not fulfilled.

OptionDescription
Poll on rulesChecks the JavaScript rule repeatedly for up to about 2 seconds instead of only once. Turn it on if the content you check appears shortly after the page has loaded.
Always embed in snippetIncludes the page in the snippet even if no running experiment uses it. This is usually not needed. Only enable it if your setup requires it.

Trigger: when ABlyft checks the page

The trigger decides when the targeting is checked. For most websites, leave the default. The default for new pages is set in Project → Settings under Project Activations Settings → Default Page Trigger.

TriggerABlyft checks the page …
Direct (immediately when ABlyft runs)once, as soon as the snippet runs. Right for classic websites.
URL Change (check for url changes using the history API)at the start and whenever the URL changes through history.pushState, history.replaceState or back/forward navigation. Preferred for most single-page apps.
URL Change (check for url changes using polling)at the start and whenever the URL changes, detected by comparing the URL every 10 ms. Use it if your app changes the URL in a way the history API does not report.
DOM Change (when something on the page is changing)at the start and whenever elements are added, removed or changed. See Dynamic content.
Callback (when the callback function is called)when your own code calls activate().
API (manual activation by an API / JavaScript call)only when your website activates the page with a JavaScript call.

The URL and DOM change triggers are meant for dynamic websites and single-page apps, see SPA navigation.

Callback trigger

When you choose Callback, a code field appears with the default activate();. Your code decides when to call activate(). Calling activate(false) deactivates the page again.

// Activate the page as soon as the website announces the event
document.addEventListener('video-finished', function () {
  activate();
});

API trigger

When you choose API, the field API trigger code shows the code to copy. Run it on your website at the moment the page should be activated:

<script>
window['ablyft'] = window['ablyft'] || [];
window['ablyft'].push({
    eventType: 'activatePage',
    pageApiName: 'checkout-step-2'
});
</script>

pageApiName is the API Name of the page. It is set in the section Advanced Settings of the page and is filled in from the page name. The API name must be unique in the project. For all options, see activatePage in the JavaScript API.

Deactivation mode

A page can be checked several times, for example after each URL change. The Deactivation mode (section Advanced Settings of the page) defines what happens when a page that was active is checked again and no longer fits.

ModeBehavior
Reset (default)The page is deactivated when the trigger fires but the targeting is no longer valid, and the reset code of its experiments runs.
DeactivateLike Reset, but the reset code does not run.
Force-resetThe page is deactivated and reset every time the trigger fires, and activated again if the targeting is valid. Use it to rebuild the variation on each check.
PersistentThe page is never deactivated. It stays active.

Calling deactivatePage from your code follows the same modes.

Reset code is the optional Reset JS code of an experiment or variation. It runs only if Use SPA features is turned on in Project → Settings (Project Activations Settings). On classic websites with the Direct trigger, the deactivation mode usually has little effect, because the page is checked only once.

Check your page

Open the experiment in preview and visit the URLs that should and should not match. If an experiment does not show, see Experiment not showing.

Changes to the URL rules, the trigger, the JavaScript rules and the other page settings are published automatically. Visitors receive them after the publishing delay.

Next steps

On this page