---
title: How visitors are assigned to variations
slug: visitor-assignment
description: How Personizely assigns visitors to A/B test variations: when it happens, how long it lasts, even vs weighted split, allocation, and mid-test changes.
docTags: 
createdAt: 2026-10-16T19:37:34.173Z
---

Personizely assigns each visitor to control or a variation the first time a campaign applies to them, and they keep that assignment on later pages and later visits. The assignment is made in the visitor's browser and stored there, so it lasts per browser and device, and per domain. This page explains when assignment happens, what can change it, and what editing a running campaign does to visitors who are already in it.

**Available on:** all platforms.

## When a visitor is assigned

A visitor is assigned on the **first page view where the campaign applies to them**. That's the first page where all of these are true:

1. The campaign is running (or deployed), and its schedule has started and not ended.
2. The page matches the campaign: its pages for content and URL split campaigns, the template for template campaigns, a campaign product for price campaigns.
3. The visitor matches the campaign's target, if there is one. In a personalization, they match at least one variation's target.
4. The visitor falls within the campaign's **traffic allocation**.

At that moment the visitor is placed in control or a variation, and a view is recorded. Visitors who never reach a page like this are never assigned and never counted. That keeps results focused on visitors who actually had a chance to see the change.

For a content campaign with the **Manual** trigger, assignment happens when your code or a widget automation runs the campaign. For a full-stack campaign, it happens on the first `ply.runCampaign(id)` call. For a shipping campaign, the view is counted when the visitor reaches the shipping step of checkout.

## How long it lasts

- **Across pages and visits.** The visitor keeps the same variation for the rest of the campaign, including on visits days or weeks later.
- **Per browser and device.** The assignment lives in the visitor's browser. A visitor who switches from phone to laptop, uses a private window, or clears their site data is a new visitor to the campaign and is assigned again. Logging in or [Identifying visitors](docId\:Q2m71k4qe54obA5WmAvBT) doesn't carry assignments across devices.
- **Per domain.** Assignments are kept separately for each domain and subdomain. If your site spans `example.com` and `shop.example.com`, a visitor can be assigned separately on each. Shopify checkout isn't affected: the visitor's variation travels with the cart. For URL split tests that send visitors to another domain, see [Split URL testing (redirect tests)](docId\:R06oXC0hOujmKKrYWv2U2).
- **Independent per campaign.** Each campaign assigns visitors on its own. Being in control of one test says nothing about another test, unless the campaigns are in a [Campaign groups (mutually exclusive tests)](docId\:JEgTJFxHqdFdq5ZVidb3q).

## How the split works

| Setting                              | What happens                                                                                           | Notes                                                                                                        |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| **Even split** on (default)          | Control and every variation get an equal share                                                         | Works for any number of arms, including 3, 6 or 7, which percentages can't divide exactly                    |
| **Even split** off                   | Each arm gets the share you set for it                                                                 | Shares total 100%. Use it to give a risky variation less traffic                                             |
| **Traffic allocation**               | Only this share of eligible visitors enters the campaign. The rest see the original and aren't counted | Applied before the split. 50% allocation with a 50/50 split means 25% of eligible visitors see the variation |
| **Control group** (personalizations) | This share of matched visitors sees the original and is counted as control                             | Decided once per campaign, not per variation                                                                 |

Each visitor's assignment is random and independent of who they are, where they came from or when they arrived. Over enough visitors, the arms match the configured split. Small differences in reach are normal; a large and persistent imbalance means something is filtering one arm (see [Troubleshooting](docId\:sAtUYHXtt2H5eBGuGVFDv)).

Visitors left out by traffic allocation stay left out as long as you don't change the allocation. They aren't re-drawn on every page.

## Targeting mode: Live vs Permanent

| Mode               | What it does                                                                                                                                                                                                                           | When to use it                                                                                                                                                                              |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Live** (default) | The target is checked on every page. On pages where the visitor doesn't match, they see the original. In an experiment they keep their arm and see it again when they match. In a personalization they may match a different variation | Targets based on stable attributes (country, device, traffic source), or when the change only makes sense while the condition holds                                                         |
| **Permanent**      | Once a visitor has been assigned (to a variation or control), the target isn't checked again for them in this campaign                                                                                                                 | Targets based on things that change during the visit, such as cart value, pages viewed or time on site. Price campaigns always use Permanent, so a shopper never sees the price change back |

**Traffic allocation still applies in Permanent mode.** Permanent skips the target check, not the allocation check.

## Changing a running campaign

| Change                                    | Visitors already assigned                                                                                             | New visitors                                                                                                                 |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| Change the split or switch **Even split** | Keep their arm                                                                                                        | Assigned with the new split. Over time, earlier and later visitors are mixed differently across arms                         |
| Add a variation                           | Keep their arm                                                                                                        | Can be assigned to the new variation. It starts behind the others (not possible after 1,000 views for most experiment types) |
| **Delete a variation**                    | Visitors who were in it are assigned again among the remaining arms, including control. Everyone else keeps their arm | Assigned among the remaining arms                                                                                            |
| **Lower traffic allocation**              | Some visitors who were in the campaign drop out and see the original from then on                                     | Fewer enter                                                                                                                  |
| **Raise traffic allocation**              | Keep their arm                                                                                                        | More enter, including some who were left out before                                                                          |
| Change the target (Live mode)             | Keep their arm, but only see it on pages where they match the new target                                              | Must match the new target                                                                                                    |
| Change the target (Permanent mode)        | Keep their arm and keep seeing it                                                                                     | Must match the new target                                                                                                    |
| Pause, then resume                        | Keep their arm. Nothing is shown or recorded while paused                                                             | Assigned as usual after resuming                                                                                             |
| Edit a variation's content                | Keep their arm and see the edited version                                                                             | Same                                                                                                                         |
| Delete another campaign                   | Not affected                                                                                                          | Not affected                                                                                                                 |

:::hint{type="warning"}
Changing the split, allocation or variations mid-test makes early and late visitors differ in more than just the variation they saw, which can bias results. If you need to change the design of a test, clone the campaign and start a fresh one, or reset its statistics. See [Report filters, outliers and resetting stats](docId\:lTocNv-A4qdZG05vt1x51).
:::

## Who is never assigned

- Known bots and crawlers.
- Visitors excluded by your [Traffic filtering and bots](docId\:MWdeRj4GbBA4xc9hEv_mn) rules.
- Anyone viewing a page with `ply_disable` in the URL.
- Anyone using a [Preview and QA campaigns](docId\:Sotf7nxCNqIQJUdVasvOz). Previews show a chosen variation without assigning or recording anything.
- All visitors while your account is paused because the [Plans, visitor quota and pausing](docId\:PcWtmn677CfNmjPJ58llM) is used up.

## Behavior details and limitations

- **Assignment is made in the browser.** Personizely doesn't wait for a server round trip to decide a visitor's variation. It also means the same person on two devices can be in two different arms. For most ecommerce tests this has a small effect, because each device is treated consistently.
- **Deployed campaigns don't assign.** Once a variation is [Scheduling, stopping and deploying winners](docId:_Lhq3atO5XiqkgwNPL25b), every matching visitor sees it and nothing is recorded.
- **Campaign groups pick first.** In a [Campaign groups (mutually exclusive tests)](docId\:JEgTJFxHqdFdq5ZVidb3q), the visitor is first given one campaign from the group, and then assigned inside that campaign as usual.
- **Checkout sees the same arm.** For price and shipping tests, the visitor's variation is passed to the Shopify cart, so checkout charges the price or offers the rates they were assigned. See [Price testing (Shopify)](docId\:k09ScNP8hbEGghopBunro) and [Shipping rate testing (Shopify)](docId\:Al3S-vh-b2RViqzyQCLIt).
- **Storage and consent.** Assignments are kept in the browser's storage for your site. See [Cookies and consent](docId:-HA6dgPmpYmb7x6UZQ_t2) for what Personizely stores and how it behaves with consent banners.

## Troubleshooting

- **I always see the same version** → you're assigned. Open a private window to be assigned again, or use a [Preview and QA campaigns](docId\:Sotf7nxCNqIQJUdVasvOz) to see a specific variation.
- **Reach is very uneven between arms** → check for redirects that some visitors abandon (URL split and template tests: turn on **Reload the page for the control group**), a target that depends on the variation's own content, or a mid-test change to the split or allocation.
- **Visitors see a variation on some pages and not others** → the target is in **Live** mode and matches only on some pages. Switch to **Permanent** if that's not what you want.
- **A visitor's variation changed** → the variation was deleted, the visitor cleared their browser data, or they're on a different device, browser or domain.

## Related

- [A/B tests (experiments)](docId\:xwgt5LvcikawVgdtMS6h-)
- [Personalizations](docId\:IEMreg0HgryEu6cNJiJcP)
- [Campaign groups (mutually exclusive tests)](docId\:JEgTJFxHqdFdq5ZVidb3q)
- [How targeting works](docId\:pUBcmS1M98xB8Mg8L99D_)
- [Visitor identity, sessions and storage](docId\:pQ7hXClMZqGdoDSHsUCZ5)
- [Statistics methodology](docId\:Jl7imbqyTMR8uy4RyPYQL)
