How to Optimize Your Website’s Ad Inventory for Maximum Yield and Fill Rates
Most publishers focus on the wrong metric. They aim to fill up as much of their site as possible, place ads in every corner, and see how many ads they can fit onto one page to determine their achievement. This causes them to have lower CPMs, users who are annoyed, and their revenue to remain constant. It’s the publishers who view their inventory as an investment portfolio, needing optimization and regular adjustments, to ensure the ads are competitive and produce the highest amount possible, that make real progress.
Fill rate is a diagnostic, not a goal
A 100% fill rate may seem like a great achievement, but in reality, it’s a sign that your floor prices are too low. You are selling impressions for a price that is lower than what your inventory is actually worth, pulling your eCPM down.
What really indicates your success is eRPM – effective Revenue Per Mille. It reflects your overall revenue per 1,000 page views. A publisher with a 78% fill rate at a $4.20 average CPM will perform better than a publisher with 100% fill at a $1.80 CPM. The latter will generate just $1.80 for every 1,000 impressions, but he will waste 220 of those impressions on low bids. Meanwhile, the former’s 800 filled impressions will generate 3.28 times more revenue per 1,000 impressions, at $13.44. The math is simple, but the temptation to prioritize a 100% fill rate can be difficult to resist.
Your floor prices should fluctuate, they are not just something you set up once and forget about. Your SSP can automatically set floor prices and adjust them in time, based on device type, location, time of day, and content category. This prevents your inventory from being undersold in some segments and allows for lower fill rates in less valuable ones. Two users in two different continents should have two different auctions. That mobile user located in a country with high CPM on finance content is willing to pay more for an ad than the one sitting by a desktop in a country with low CPM on entertainment news.
Build a header bidding setup that actually scales
Header bidding improved the performance of publishers by enabling their inventory to be simultaneously available to multiple demand sources, rather than being siloed through a single stack. However, the efficiency of different header bidding setups is not the same.
The best-performing setup combines client-side and server-to-server (S2S) header bidding in a hybrid setup, rather than fully committing to one. Client-side bidding tends to create more competition between buyers leading to higher bid density and better cookie matching – this is an important feature because in an open exchange buyers can identify their best audiences and bid more when they are present. The downside of client-side bidding is the additional browser overhead. Browser-based auctions compete for processor time with content and ad rendering, which can slow pages and delay ads from rendering.
Server-to-server bidding doesn’t run through the browser so isn’t as processor-intensive. It’s often painted as simply a solution to this problem, but it also benefits exchanges by allowing them to use heavier computations (like optimization, machine learning, advanced pricing algorithms, etc.) on the server-side, rather than in the lightweight script that runs client-side. The tradeoff is that S2S typically also lags in cookie matching, and all else equal, S2S auctions yield slightly lower CPMs (especially on the types of high-value existing customers often dependent on identity).
A hybrid approach brings together the best of both client and server worlds and can be the difference between a high-performing setup and lowering your entire programmatic program’s CPMs (due to cookie sync disparity) and harming engagement metrics (due to sluggish pages).
Viewability beats density every single time
It’s only natural to want to increase your ad placements in order to boost your revenue. However, this is rarely the right approach.
When a new ad placement has low viewability (for example, an ad at the bottom of an article that most users don’t scroll all the way through to see), buyers don’t just pay less for it. Bid shading means that they may also begin reducing their bids on all of your other inventory based on the historical performance of that one unit.
If you add a new ad position and it performs poorly, you won’t just lose the potential revenue from that placement. You may also unwittingly be reducing the value of all of your best-performing units.
In general, the less frequently an ad is viewable, the less buyers are willing to pay when it is seen. Low viewability essentially trains advertisers to ignore not only that spot but the rest of the inventory where ads are served as well.
It seems counterintuitive, but you’re likely much better off focusing on your current high viewability placements and working to increase competition for those. More demand doesn’t always equal more revenue.
Multi-size ad units and auction pressure
When a slot is hardcoded for 300×250, 728×90, 160×600, the exchange tells buyers entering the auction that they may only submit bids for those sizes. These bids are passed along to the publisher’s ad server which determines the winner based solely on order price (this could be anything from highest bid to lowest bid). If you change the setup so that the exchange indicates it will accept all three sizes, the buyer is more likely to submit a higher bid because it knows it’s not just competing against orders for the same size; there will also be competition from orders in other sizes.
Diversify demand before you need to
Depending primarily on a solitary demand source, whatever it might be, constitutes structural risk. An ad server rule change, CPM floor tweak, or an algorithm update at a single partner can chop revenue by a third. No warning, no recourse.
If you’re partnered with multiple SSPs and exchanges, then your auction has the horizontal competition it needs to operate properly: the more prospective buyers, the more likely one is to bid close to the true value of any particular impression, instead of just ‘winning’ the bid by default because there was no competition, and doing so at a tiny fraction of their potential bid.
Going from a single-source model to a well-structured display ad network model definitely makes multi-buyer competition over your available inventory table stakes right out of the gate, and therefore consistently drives bid density. True, PMP and first-party advertiser relationships also seldom see the price drop for an impression that characterizes a noncompetitive auction.
Private Marketplace deals and first-party relationships with advertisers/brands both avoid the open exchange while keeping competitors in the dark about your users. The nuances of a proper setup here and the associated technology/onboarding challenges are beyond the scope of this discussion, but it’s really the same underlying principle.
Ad latency is a revenue leak, not just a technical nuisance
Ads that take a long time to load or render are slow ads, and they cost you money in two fundamental ways. First, they hurt user experience enough to raise bounce rate, meaning fewer total pageviews and total impressions. Second, an ad request triggered after the user has already scrolled past the placement is counted as non-viewable and receives a discounted bid or no bid at all in the subsequent auction.
Pages that load in 5 seconds generate a significant amount more mobile ad revenue than those taking nearly 20 seconds to load, exclusively due to the compounding effect of higher viewability and lower bounce rate (Google). This isn’t a distinction at the margin; it’s a large discrepancy in monetization outcome that flows directly from what is essentially a technical decision about when an ad tag is invoked.
Measuring ad latency begins with discerning which scripts contribute the most loading time. Third-party above-the-fold ad tags, CMP calls, and header-bidding wrappers are common offenders. Asynchronous loading, script prioritization, and scaling back the number of active demand partners to those actually contributing bids are all adjustments available to publishers that optimize site speed for revenue rather than leave it as a development concern. A CMP that slowly or incorrectly reads user permission also throttles yield, since failing to pass valid permission signals through the programmatic stack means non-personalized ad serving and the resulting non-personalized inventory clearing at much lower CPMs than cookied, targeted impressions.
Refresh intervals and impression quality
The viewability-gated ad refresh approach ensures that only ads meeting minimum viewability requirements are eligible for potential refresh. Ads are only eligible to refresh when the user’s attention is on the screen, thus CPMs remain stable or possibly rise – a key concern when implementing ad refresh. For example, high-impact formats may be only occasionally in-view but should return a premium when they are.
Finally, the approach creates a feedback loop with buyers that creates trust and demand. If they know you only offer quality inventory, they’ll bid more for it, making up for the CPM compression mentioned above. Old-school publishers understood this decades before Programmatic was a thing.
Managing inventory like a media business
Publishers that manage to increase their ad revenue gradually don’t achieve this by simply increasing the number of ad units or by pursuing partnerships haphazardly. Instead, they treat their inventory in a way akin to how a finance team handles a revenue portfolio: they measure the appropriate metrics, know the reasons behind the numbers, and make intentional technical choices that multiply in the long run. Floor pricing, auction structure, page speed, and demand diversification are some of the factors that influence each other. If you optimize one but fail to consider the rest, you are not maximizing your yield.
