Server-Side vs Client-Side Testing: Which One to Use

Server-side testing means your server (or app backend) decides which variant a visitor gets and sends back a page that already contains it, so nothing changes in the browser after load.

Client-side testing does the opposite: the original page loads, then a JavaScript snippet rewrites it in the visitor's browser.

Use client-side for fast visual tests on marketing pages.

Use server-side for prices, shipping rules, checkout logic, onboarding flows, apps and anything where flicker or speed matters.

Both are real A/B tests with the same statistics.

The difference is where the variant is built, and that decides what you can test, who has to build it, and how much the test itself can skew your results.

Client-side testing: how it works and where it fits

In a client-side test, you add a script tag to your site.

When a visitor arrives, the script assigns them to a variant, stores that in a cookie, and applies changes to the page with JavaScript: new headline, moved button, hidden section.

Most visual editors in tools like VWO, Convert and Optimizely Web work this way.

The big advantage is speed of setup. A marketer can change copy or layout in a visual editor without a code deploy, which is why most of the 1,724 results in our test database are page-level changes that were almost certainly run this way.

The flicker problem

Because the browser can paint the original page before the script finishes, visitors may briefly see the control and then watch it change.

Optimizely's own docs define this "flashing" as a page showing the original content for a short time before loading different content, and say that loading the snippet asynchronously "increases the risk of flashing."

Their fix is a synchronous snippet high in the <head>, which blocks rendering until it runs.

So client-side tools make you choose: block the page (slower first paint for everyone) or let it render (risk of flicker, which can tip people off and bias results).

We cover the fixes in detail on the flicker effect page.

Timeouts quietly drop visitors

Asynchronous snippets have a timeout so a slow tool never breaks your site.

VWO (now under the Wingify brand) documents default timeouts of 2,000 ms for settings and 2,500 ms for the library.

When the code times out, the visitor sees the original page and is not enrolled, so their visit and conversions are not tracked.

That is a safe failure, but it means your test sample leans toward visitors on fast devices and connections.

If your buyers skew mobile on weak networks, a client-side test can under-sample exactly the people you care about.

Cookie lifetime limits

Client-side tools usually remember the assignment in a cookie set by JavaScript.

Since Intelligent Tracking Prevention 2.1, Safari caps persistent cookies created through document.cookie at seven days.

A returning Safari visitor after that window can be reassigned and see the other variant, which matters for long tests and slow purchase cycles.

Cookies set by the server in an HTTP response are not covered by that rule.

Script weight is a real cost

Every extra script competes with your own page for load time, and our database has clear examples of the build itself moving revenue.

Oliver Kenyon rebuilt a landing page natively in Shopify and tested it against the identical page in a page builder: same copy, images and offer, +9.9% conversion rate and +20.9% revenue per visitor.

Vasta replaced an app-powered header with the native theme header on Canada Welding Supply and saw +17.02% conversion rate.

Neither was a client-side vs server-side test, but both show that front-end weight is not free.

The scale is backed by large controlled experiments too: Bing ran a slowdown test and found that every 100 msec of speed improved revenue by 0.6% (Kohavi et al., KDD 2013).

Full stack experimentation: testing in the code

"Full stack experimentation" is the vendor term for server-side testing that reaches every layer: backend logic, APIs, mobile apps, email, search ranking and pricing.

Instead of a script that rewrites a page, your developers call an SDK in the code that returns a variant, then build both branches.

It usually sits on top of feature flags, so the same switch that rolls out a feature can split traffic.

How assignment works

Good SDKs assign users deterministically. Optimizely's docs explain that its Feature Experimentation SDKs hash the user ID with the experiment ID using MurmurHash3, so the same user always lands in the same bucket.

Bucketing happens in memory with no network call, which means the same user gets the same variant on web, app and email as long as you pass the same ID.

That cross-device consistency is something cookie-based client-side tools can't promise.

The catch: you need a stable ID. For logged-out visitors you still need a first-party ID, ideally set by the server.

Some tools let you choose where flags are evaluated.

GrowthBook, for example, supports local evaluation in the SDK or remote evaluation on your own server, which keeps targeting rules private but adds a network round trip.

What full stack testing unlocks

The tests that move revenue most often change rules, not pixels. In our database:

You can fake a price change client-side by rewriting the displayed number, but the cart, checkout, tax and order emails will still show the real price.

That mismatch breaks trust and can create legal problems.

Real price tests belong in the backend; our price testing guide covers the setup.

Server-side tests in the database

Several case studies in our archive state outright that they ran server-side.

Whitepages tested side-by-side plans with a billing toggle as a one-week server-side test and got +23% conversion rate and +31% monthly memberships (several changes bundled).

EnergySage tested a real team member's name in a verification email server-side for two weeks: +3.98% approved properties.

Plymouth Rock Assurance ran a server-side test that explained its app at checkout in three steps and saw about +10% progression.

Notice the pattern: pricing, email and a post-purchase checkout step.

None of these are easy to test with a script that only sees the rendered page.

Server-side vs client-side testing: how to choose

Client-sideServer-side / full stack
Where the variant is builtIn the browser, after the page loadsOn the server or in the app, before the response
Who sets up a testMarketers via a visual editor, or light JavaScriptDevelopers in the codebase
FlickerPossible; reduced by blocking snippets or anti-flicker codeNone; the page arrives finished
Speed costExtra script on every pageSmall assignment cost on the server
What you can testCopy, layout, images, page-level UXPrices, shipping, checkout, algorithms, onboarding, apps, email
Assignment memoryJavaScript cookie (7-day cap in Safari)User ID or server-set cookie
Cost to ship a winnerStill needs a developer to hard-code itWinner is already in the code; flip the flag

When client-side is the right choice

Pick client-side when you are testing copy and layout on marketing pages, you have little developer time, and you want to run many quick tests.

Most of the page-level wins in our A/B testing hub fit this profile.

It is the wrong choice for anything that touches money (price, shipping, discounts that must carry into checkout), for single-page apps that re-render after the script runs, and for long tests where Safari reassignment can contaminate groups.

When server-side is the right choice

Pick server-side when the change lives in business logic, when the same user must see one variant across web, app and email, or when your site is already heavy and you can't afford another blocking script.

It is the wrong choice when you have no developer capacity: a test queue that needs a sprint per idea will run far fewer tests, and test volume drives most program results.

A worked example: why server-side tests still need careful reading

Server-side removes flicker, not noise. Take Server Density's test: 20 paid conversions from 1,950 visitors in one arm (1.03%) against 15 from 1,925 in the other (0.78%).

A difference of five sales on a few thousand visitors is very fragile, and the revenue lift came mostly from a higher order value.

The build method can't fix a small sample; check statistical significance and sample ratio mismatch the same way you would for any test.

Server-side tests also have their own bugs. If one branch errors more often, or caches are keyed wrongly so some users see the wrong variant, your split goes off.

QA each variant before launch and add guardrail metrics such as error rate and load time.

The hybrid most teams end up with

Many teams run both: client-side for fast marketing-page tests, server-side for pricing, checkout and product.

Most major platforms now sell both modes; compare them in our experimentation platforms guide, including code-first options like GrowthBook and Optimizely Feature Experimentation.

Shopify stores can also use apps that change prices and shipping rates natively.

Questions

What is server-side testing?

Server-side testing is A/B testing where your server or app backend assigns each user to a variant and returns a response that already contains it.

Nothing changes in the browser after load, so there is no flicker, and you can test prices, shipping rules, checkout logic, algorithms and app flows.

What is client-side testing?

Client-side testing uses a JavaScript snippet that loads the original page and then changes it in the visitor's browser.

It is quick to set up with a visual editor, but it can cause flicker, adds script weight, and usually stores assignment in a JavaScript cookie that Safari caps at seven days.

What is full stack experimentation?

Full stack experimentation is server-side testing across every layer of a product: backend, APIs, mobile apps, email and search.

Developers call an SDK, often tied to feature flags, that returns a variant for a user ID, so the same person sees the same variant on every channel.

Is server-side testing better than client-side testing?

Neither is better in general. Client-side is better for fast copy and layout tests when developer time is scarce.

Server-side is better for anything involving money or logic, such as prices and shipping, and for sites where flicker or page speed is a concern.

Does server-side testing make results more accurate?

It removes flicker and timeout-related sample loss, but it does not fix small samples or bugs.

You still need enough conversions, a check for sample ratio mismatch, and QA of every variant.