Overview
A/B testing (Campaigns) overview
When a page is not converting as well as you hoped, the everyday question is simple: would a different headline, button, or layout actually help? An A/B test answers that by showing some visitors the current experience and others a changed experience, then comparing results. In CROForge that test lives as a campaign in the product UI. The same object is an experiment in the API, the database, and Smart Code. This page is the map of that object: what it contains, which tabs you use, and when it actually runs on a visitor’s site.
Words used on this page
| Word | Everyday meaning | Meaning in CROForge |
|---|---|---|
| A/B test | A fair comparison of two (or more) versions of something to see which performs better. | A campaign that assigns eligible visitors to a Control or a Variation, then measures linked metrics. |
| Campaign | A named effort you run for a period of time (a marketing campaign, a launch). | The name you see in the UI list, hub, and reports. It is the same record as an experiment. |
| Experiment | A structured test with a hypothesis, a method, and a result. | The API and runtime name for a campaign. Routes, statuses, and Smart Code all use this model. |
| Control | The unchanged original you compare against. | The baseline variation, usually with empty JS and CSS so the live site is left as-is. |
| Variation / Variant | An alternative version of the original. | A named experience with optional jsCode and cssCode, plus a traffic percentage. |
| Traffic | People arriving at a site or page. | Eligible visitors who passed domain, URL, and audience checks and can be assigned a variation. |
| Sticky assignment | Once you are put in a group, you stay in that group. | After a visitor is bucketed into a variation, that choice is stored so they keep seeing the same experience. |
| Configuration | The settings that define how something works. | The first hub tab. Sub-tabs are Pages, Variations, Metrics, and Audience. |
| Review | A last look before you go live. | The hub tab that summarizes the campaign before and after you finish configuration. |
| Report | A results summary after something has been running. | The hub tab with per-campaign charts and tables. It is not a separate global dashboard. |
| Smart Code | A small script you add to a website. | The CROForge snippet that decides whether a running experiment applies, assigns a variation, injects CSS/JS, and sends events. |
| Workspace | A shared place for a team’s work. | The tenant that owns users, sites, campaigns, and Data Vista definitions. The campaign route lives under it. |
Screenshot
Filename: ab-test-list.png (campaigns list with search, filters, and status badges). Place the file under docs/assets/placeholders/. Paste the screenshot into WordPress after you copy this article; do not add an image tag here.
Campaigns in the UI, experiments in the API
Teams talk about “running a campaign.” Engineers talk about “the experiment object.” CROForge uses both on purpose. In the sidebar you open A/B and work with Campaigns. When Smart Code fetches live tests, when statuses are stored, and when URLs include an experiment id, the same record is an experiment.
These docs follow that split: campaign for what you click in the product, experiment when describing data, routes, and runtime. You are never looking at two different things.
What you can do from A/B
Open a workspace, then A/B. That list is the home for every campaign in the workspace.
- Search, filter, and sort campaigns, then start, pause, archive, or delete in bulk (use bulk actions carefully on Running tests).
- Create a new campaign; it opens as Draft so nothing is applied on the live site yet.
- Configure it in order: Pages → Variations → Metrics → Audience.
- Open Review and confirm the summary before you launch.
- Change status along Draft → Running → Paused or Completed, then Archive, Trash, or Clone.
- Open the code editor to write variation JS and CSS.
- Open Report for that campaign’s analytics.
The campaign hub
Each campaign opens on a hub. The route is /workspace/{id}/ab-test/{experimentId}. Optional query params include tab, configTab, and reviewTab.
Top tabs
| Tab | Everyday meaning | What you do here |
|---|---|---|
| Configuration | Set up the test. | Wizard for pages, variations, metrics, and audience. Use Prev, Next, Save, and Discard. |
| Review | Read the plan back to yourself. | Summary of targeting, variations, metrics, and audience before (and after) you go live. |
| Report | See what happened. | Charts and tables for this campaign only. |
Configuration sub-tabs
Work them in this order. Each answers one question.
| Order | Tab | Question it answers |
|---|---|---|
| 1 | Pages | Where can this test run? Include and exclude URL rules. |
| 2 | Variations | What do visitors see, and how is traffic split? |
| 3 | Metrics | How will we decide a winner? Link Data Vista metrics. |
| 4 | Audience | Who is allowed into the test? Attach a Data Vista segment. |
Anatomy of a campaign
Think of the campaign as a folder that holds everything the runtime needs.
Campaign (Experiment)
├── Title & status
├── Pages (URL include / exclude)
├── Variations (Control + variants, JS/CSS, traffic %)
├── Metrics (linked Data Vista metrics)
├── Audience (segment, e.g. All Traffic)
├── Review summary
└── Report
When Smart Code actually applies a campaign
A campaign sitting in the list is not automatically changing your site. Smart Code applies it only when all of the following are true.
- The campaign status is Running (Draft, Paused, Completed, Archived, and Trash are not applied live).
- The current page matches URL targeting (at least one Include matches, and no Exclude matches).
- The visitor matches the attached segment (Audience). All Traffic means “no extra conditions.”
- The visitor is assigned a variation. That assignment is sticky so they do not bounce between Control and a variant on later visits.
Runtime evaluation order is: domain allowlist → URL targeting → segment → variation assignment. If any earlier step fails, Smart Code skips the experiment for that page load.
Changing JS, CSS, URLs, or the segment while a campaign is Running can bias results, because some visitors already saw the old experience. Prefer pause → edit → resume, and note the change.