Take your A/B tests out of the browser.

Mtrix picks each shopper's variant on the server, in about 15ms, and sends the page already built. The original never flashes, no testing script slows the page down, and ad-blockers can't hide a single event.

A page-load comparison of lumière.co's Aurora Candle product page on a phone, played at half speed. With a testing script in the browser, the page is blank until 0.40 seconds, shows the original studio photo, then at 0.90 seconds swaps in the lifestyle photo and the Add to cart button jumps 28 pixels; it settles at 1.10 seconds. With Mtrix on the server, the variant is chosen in 14.8 milliseconds, and the lifestyle photo is the first thing on screen at 0.40 seconds, with nothing left to change.

The variant is chosen
before the page is built.

When a shopper asks for a page, your store checks with Mtrix first. Mtrix picks a variant in about 15ms, and the HTML that leaves your server is already that version. The browser just shows it.

  • No testing script in the page. Nothing extra to download or run, so Largest Contentful Paint and layout shift stay where they were.
  • Search engines get finished pages. Split-URL and mask-URL tests serve real HTML, so crawlers never meet a half-swapped page and your rankings hold.
  • A shopper keeps their version. Once assigned, they see the same variant on every visit, on their phone and on their laptop.

A request trace for lumiere.co. Five shoppers request pages; for each, Mtrix chooses a variant in 11 to 17 milliseconds, before the store renders the page. For a new iPhone shopper from an Instagram ad, Mtrix chooses Lifestyle photo in 14.8 milliseconds, the store renders the page in 151 milliseconds and sends the HTML in 32, 201 milliseconds in total. The HTML already contains the lifestyle photo, and the page carries no testing scripts. A returning shopper on a MacBook, first seen on an iPhone two days earlier, keeps Lifestyle photo.

The shoppers your test
never counted.

Ad-blockers, Safari's tracking prevention and privacy settings stop browser scripts from reporting. Those shoppers still browse and buy; a browser-based test just never hears about it. Mtrix records each event on the server, in the request that serves the page, so there's nothing on the page to block.

Shoppers counted
1,000of 1,000
Orders counted
27of 27
Orders the test never saw
0

Worked example with the first 1,000 shoppers to see the Lifestyle photo version. Counted by a browser script, 720 shoppers and 19 orders are reported; 280 shoppers never report, and 8 of their orders are never seen by the test. Counted by Mtrix on the server, all 1,000 shoppers and all 27 orders are recorded.

Each square is one of the first 1,000 shoppers to see Lifestyle photo. Solid squares placed an order.

Worked example. How many shoppers a browser script misses depends on your audience; 28% is used here.

No third-party pixel and no tracking cookie: events stay first-party, on your own domain, with consent honoured.

Count everyone, and the winner
shows up six days sooner.

A test is ready to call once it has measured enough shoppers to be sure. Miss 28% of them in the browser and the same test has to run longer to get there. lumière's photo test was ready on day 16. Counted through a browser script, it would have kept splitting traffic until day 22.

Timeline of lumière's test "Lifestyle photo on the PDP" from 31 August to 25 September 2026, drawn twice. Counted by Mtrix, the interval for Lifestyle photo's lift over Control narrows until its lower edge clears zero on day 16, 15 September: We have a winner, roll out Lifestyle photo, which then runs for everyone. Counted by a browser script that misses 28% of shoppers, the interval narrows more slowly and clears zero on day 22, 21 September, after six more days of splitting traffic three ways.

Day 26 · 25 Sep

6 days

About 15,700 more shoppers sent to a version that sells less while the browser-counted test keeps running.

Worked example: 62,820 visitors in 16 days across three variants, 28% of them missed in the browser.

Prices are too important
to swap in the browser.

In the browser, a price test shows the old price first and then rewrites it. On the server, the price, the free-shipping threshold and the checkout are decided before anything renders, and they match on every page the shopper sees.

Four tests on lumière.co, each shown as the page a shopper receives. Price point, an A/B test on the Aurora Candle product page: Control at $44, the variant at $39, with the same price in the cart drawer. Free shipping bar threshold, an A/B test: Control offers free shipping over $75, so a $64 cart is $11 away; the variant's threshold is $60, so the same cart ships free. Checkout trust badges, a multivariate test on the checkout: the variant adds secure-payment badges and a customer review. Collection grid density, a split-URL test: /collections/candles shows four products per row, /collections/candles-3up shows three.

lumiere.co/products/aurora-candle

The product page, the cart and checkout show $39 from the first frame.

Your first test,
live this afternoon.

It runs on the store you already have, Shopify or custom, and leaves your checkout and payments exactly as they are.

An afternoon with Mtrix: at 1:00 pm connect your store, at 1:20 pm build the variant in the editor, at 1:45 pm choose the pages and the traffic split, and at 2:00 pm the test is live, with every new shopper given a version before the page renders.

Moving from another testing tool? Talk to us. →
Build with Mtrix