Plenty of brands test ads every week and pages almost never. When they do start testing pages, the natural move is to launch new ads pointing at a new page and compare them with the old ads pointing at the old page.
That comparison can't tell you much. If the new combination wins, was it the ad, the page, or the people the new ad happened to reach? You changed three things and measured one number.
The fix isn't to stop testing both at once. It's to decide which variable each test is allowed to change, and to set up your campaigns so nothing else moves.
One test, one variable
Every test should have one thing that differs between groups, with everything else held still. With ads and pages, that gives you two clean setups:
- Page test: the same ads send traffic to two or more pages. Only the page differs.
- Ad test: different ads send traffic to the same page. Only the ad differs.
The thing that differs can still be a big idea. A page variation that changes the headline, layout and proof is fine as long as all of it expresses one hypothesis. What you can't do is change the ad and the page in the same test, then credit the result to one of them.
Page tests: split after the click
The cleanest page test sends the same ad's clicks into a split, so each visitor is randomly assigned to page A or page B after they click. The ad, the audience and the auction are identical for both pages. The only difference is what loads.
You can do this with a page-level split testing tool, a split URL feature in your landing page builder, or a Shopify app that tests page or theme versions. The ad's destination URL stays the same. The tool decides which version each visitor sees, and it should keep returning visitors on the same version.
What not to do: duplicate your ads, point one copy at page A and the other at page B, and run both in the same ad set. Meta optimizes delivery at the ad level, so it will soon favor one copy and show each to different people. You end up comparing two audiences, not two pages.
If you have to split before the click, use Meta's built-in A/B test feature, which divides the audience into separate groups. Even then, each arm optimizes on its own results, so delivery can drift apart. A post-click split is still the cleaner read on the page itself.
Ad tests: hold the page still
For ad tests, keep the destination identical: same URL, same page version, same offer. If a page test is running at the same time, send every ad variation into that same split, so each ad's traffic is spread evenly across the pages.
Meta's A/B test feature gives the cleanest ad comparison. Ads competing inside one ad set work for quicker, directional reads, but remember the algorithm is choosing who sees what.
Judge ads on more than CTR. An ad that wins the click can lose the sale if it attracts curiosity rather than intent, so track each ad's results through the page to purchase. Choosing the metric that decides a test covers which numbers to trust.
When a full matrix makes sense
The tempting setup is a matrix: two ads times two pages, every combination running at once. In theory you learn which ad wins, which page wins, and which pairs work best together.
In practice, matrices are expensive. To compare individual combinations, each cell needs its own full sample. A 2×2 needs about twice the traffic of a simple A/B test to compare cells with the same sensitivity, and a 3×3 needs about four and a half times. Spotting a genuine interaction, where a page works with one ad but not another, takes more traffic still.
A matrix earns its cost when you have the volume and a real reason to expect the ad and page to interact. That usually means they make different promises. A price-led ad pointing at a page that opens on craftsmanship is a genuine mismatch worth measuring. Two hooks for the same promise usually aren't.
For most stores the better option is an angle test. Build each ad and page as a matched pair around one angle, then test pair against pair: ad A goes to page A, ad B to page B. You won't know whether the ad or the page did the work, but you'll know which message wins as a system, with the traffic of an ordinary two-way test. Here, the different people each pair attracts are part of what you're testing, so separate ad sets or Meta's A/B test feature are fine.
This is how we approach new angles at PaidAds.dev: one page per angle, with ads written to match it. It also keeps your message match tight from click to checkout.
Name and tag everything
Clean structure only helps if you can read the results back out later. Two habits make that possible.
UTM parameters on every ad. At a minimum, set source, medium, campaign and content, and put the ad's name or ID in utm_content. Meta supports dynamic URL parameters that fill in the ad name or ID automatically; check Meta's current documentation for the exact syntax. This is what lets you see in GA4 or Shopify how each ad's traffic behaved on each page.
A naming convention that carries the test ID. Give every test an ID and use it in ad names, page names and your test log. For a fictional hiking-sock brand, that might look like:
- Ad:
T014_ad_angle-blisters_static_v2 - Page:
T014_page_bundle-first_B - Campaign:
T014_prospecting_page-test
When the test ends, anyone on the team can filter by T014 and see everything that belonged to it.
Reading interactions without fooling yourself
Even in a simple page test, you'll be tempted to slice the results by ad. Sometimes page B wins overall but loses on traffic from one particular ad. That could be a real interaction or noise in a small slice.
Treat segment results as questions, not conclusions:
- Call the test on the overall result, using the primary metric you chose before launch.
- Look at segments by ad or angle to find patterns worth testing next.
- Act on an interaction only after re-testing it, with that segment as the main traffic and enough sample to read it.
If a pattern keeps showing up, like a short page working for offer-led ads and a long page working for problem-led ads, give it a dedicated test. It may mean you need a page per angle rather than one winner for everything.
The short version
- Change one variable per test: the page with ads held still, or the ad with the page held still.
- Split page tests after the click so the same ads and audience reach every version.
- Full matrices need far more traffic than they seem to. Matched ad-and-page angle tests are usually the better trade.
- Put UTMs and a test ID in every name so you can read results by ad, page and angle.
- Treat segment differences as the next hypothesis, not a result.