← All posts

How to Rotate Ads in WordPress and Pick the Winner

Rotate ads in one WordPress slot, see how Priority sets each ad's share of views, and learn when a click-through gap is real enough to call a winner.

To rotate ads in WordPress with WB Ad Manager, assign two or more ads to the same placement. Each page view shows one of them, picked at random and weighted by the ad’s Priority (1 to 10, default 5). Then compare their click-through rates in the CTR box on the All Ads screen. That’s the free plugin. A true A/B test with a fixed traffic split and a significance check is in Pro.

The rotation part is easy. The part people get wrong is the second half: deciding which ad actually won. This post covers how Priority turns into a share of views, how to read the CTR box, and why a gap after 40 impressions tells you almost nothing.

Rotation, refresh and A/B testing are different things

These three get lumped together, and they aren’t the same.

Rotation means several ads share one slot and each page view shows one of them. A new visitor, or the same visitor on a new page, can see a different ad.

Refresh means the ad swaps on a timer while the page stays open. WB Ad Manager doesn’t do that, so don’t plan around it.

A/B testing means you deliberately split visitors between versions of one ad, on a fixed ratio, to find out which does better. Rotation shows you a comparison as a side effect. A test is set up to produce an answer.

If you want the basics of putting more than one ad in a placement, placing your first ad zones covers it in Step 5. This post picks up from there.

How Priority turns into a share of views

Under the hood, each ad goes into a pool once per point of Priority, and the plugin draws one entry at random on every page view. So an ad at 10 has ten entries and an ad at 5 has five. The maths is linear: your share is your Priority divided by the total of every live ad’s Priority in that slot.

Every ad starts at 5, so two fresh ads split the slot evenly. Change one and the shares shift:

Ads in the slotPrioritiesShare of views
Two ads5 and 550% / 50%
Two ads10 and 567% / 33%
Two ads5 and 183% / 17%
Two ads10 and 191% / 9%
Three ads5, 5 and 533% each

Two things follow from this. First, doubling an ad’s Priority doesn’t double its share unless the others stay put, because the total changes too. Second, it’s a random draw, not a rotation queue. Over 20 page views you won’t see a neat 10 and 10; over thousands, the totals settle close to the table.

Only ads that are live count. Scheduling decides whether an ad is in the pool at all, so a sponsor with a start and end date joins the mix on day one and leaves it after the last day. The AdSense plus direct sponsor use case shows that pattern with real numbers.

Set up two creatives in one placement

For an honest comparison, change one thing between the two ads and keep the rest the same.

  1. Create the first ad under WB Ad Manager > Add New Ad and tick the placement you want, say the sidebar widget.
  2. Create the second ad and tick the same placement.
  3. Leave both at Priority 5 so the split is even. A comparison is cleaner when neither ad gets a head start.
  4. Make the two ads differ in one respect: the headline, the image, or the button text. If you change all three, you won’t know which change did the work.

Keep both ads live over the same dates. An ad that ran over a payday weekend and one that ran midweek aren’t a fair fight.

Read the CTR box, and what “too close” means

Open WB Ad Manager > All Ads. Along with the Impressions and Clicks columns, the free plugin shows a CTR comparison box for ads in the same slot, with a winner badge.

The badge isn’t handed out on a hunch. The ad needs at least 100 impressions, and its click-through rate has to lead the runner-up by 20% relative or by 1 percentage point absolute. Until then the box says the ads are too close.

Here’s why both rules exist. Say ad A has a 2.0% CTR and ad B has 2.3%. B is 15% ahead in relative terms, but that’s 0.3 points, below the 20% line and well below one point. That gap is small enough that another week of traffic could flip it. Now say A sits at 1.0% and B at 1.3%: that’s a 30% relative lead, so the badge can appear even though the absolute gap is only 0.3 points. The two-rule check is deliberately simple, and it’s a guide, not a statistics test.

Treat the badge as “worth a closer look”, not as proof.

When 100 impressions each isn’t enough

A hundred impressions is the floor, not the target. At a 1% click rate, 100 impressions is about one click. One extra click on either side swings the CTR by a full point, which is why the numbers jump around early on.

A rough way to think about it: the lower your click rate, the more impressions you need before a gap means something. Display ads often sit in the low single digits or below, so you may need thousands of impressions per ad, not hundreds. If your slot only gets a few hundred views a week, expect to wait weeks, or accept that you’re making a judgement call.

Two habits help. Don’t peek daily and stop the moment one ad leads; that’s how people crown winners that were just early noise. And write down your rule before you start, such as “at least 1,000 impressions each and at least two full weeks”, then stick to it.

Free rotation versus a Pro traffic-split test

Free rotation is a random draw on every page view, so one visitor can see both ads across a session. That’s fine for sharing a slot, and the CTR box gives you a quick read. It doesn’t promise equal exposure in a short window, and it won’t shift weight to the better ad by itself: if ad B is winning, you decide whether to raise its Priority or drop ad A. The plugin doesn’t do it for you.

The Pro A/B test is built for an actual answer. You choose an original ad and one or more variants, and you set the traffic split: the percentage of visitors who see the original, with the rest shared among the variants. Each visitor is assigned to a version and a cookie keeps them on it for 30 days, so the same person isn’t shown both ads and muddying the result.

Pro also checks significance. The default minimum is 100 impressions, and it runs a significance test on the click-through rates, calling a winner when the result clears p < 0.05, which is a 95% confidence level. When you complete the test, you can promote the winner so it takes over the original ad’s placement and keeps serving.

If you rotate for convenience, free covers it. If you’re making a decision you’ll act on, such as swapping a sponsor’s creative or changing a high-traffic slot, the Pro test gives you a cleaner answer. The free versus Pro page lists the split, and pricing has the current plans.

Rotation and cached pages: what to check

One caution before you trust any numbers. Page caching can serve the same stored copy of a page to everyone. If the ad is baked into that cached page, every visitor may see the same ad until the cache refreshes, and impressions are counted when the server builds the page, so cached views can go uncounted.

We haven’t claimed that rotation works on fully cached pages, and you shouldn’t assume it does. Test your own setup: load a page with the rotating slot in several private windows, or from a few different devices, and see whether the ad changes. Then compare the impressions the plugin reports with what your analytics say. If the counts are far apart, caching is the likely reason.

If you find caching is flattening your rotation, exclude the pages with the slot from the cache or ask your cache provider what it offers for dynamic fragments. That’s a question for your host and your cache plugin, and the answer varies by setup.

A simple routine

Put two ads in a slot at the same Priority, change one thing, let them run for the same dates, and read the CTR box once you have a few thousand impressions each. If it says too close, that’s a real answer too: the change didn’t matter much, so test something bolder. When the stakes are higher, use the Pro test. Either way, check your caching first, or you’ll be measuring the cache instead of the ads.

For the wider picture of what the plugin does, see the WordPress ad manager plugin page and the full feature list.