Ad refresh rules in 2026: what Google requires, what is only advice, and how to refresh with Prebid

Ad refresh is one of the few levers that adds impressions without adding traffic, which is why it gets abused and why buyers watch for it. Most of the confusion comes from mixing up three different sources: Google Ad Manager policy, Google's developer guidance, and AdSense policy. They say different things.
What Google Ad Manager requires
Ad Manager's help page on declaring inventory that refreshes sets the rules that are actually enforced:
- You must declare which portions of your inventory refresh.
- On the web, refresh triggered by a user action has no minimum interval. Refresh triggered by an event, or by time, must wait at least 30 seconds.
- In apps the minimum is 30 seconds and Google recommends 60.
- Not declaring refresh, or declaring it inaccurately, is a policy violation.
Declaring is not a formality. The declaration is how Google, and through it buyers, tell a refreshed impression from a first one. Refresh without declaring and your refreshed impressions look like first impressions, which is exactly what the policy exists to prevent.
What is only guidance
The Google Publisher Tag guide on controlling ad loading
adds two recommendations: avoid refreshing a slot more often than once every 30 seconds, and only refresh slots that
are viewable, using ImpressionViewableEvent to know when a slot has been seen.
The viewability rule is best practice, not the declaration policy. It is still the rule we would follow. Refreshing a slot nobody is looking at produces impressions with zero viewability, and buyers price your whole site on the viewability they measure. A few weeks of refreshing off-screen slots can lower CPMs on every impression, including the first one.
What AdSense says
AdSense is stricter. Its policy says publishers are not permitted to refresh a page or an element of a page without the user requesting it. If part of your inventory runs AdSense tags rather than Ad Manager, time-based refresh is off the table for that inventory.
Refreshing with Prebid
With header bidding, a refresh is not just googletag.pubads().refresh(). The old Prebid bids for that slot were
either used or have expired, so each refresh needs a new auction:
function refreshSlot(slot, adUnitCode) {
pbjs.que.push(() => {
pbjs.requestBids({
adUnitCodes: [adUnitCode],
timeout: 1000,
bidsBackHandler: () => {
pbjs.setTargetingForGPTAsync([adUnitCode]);
slot.setTargeting("refresh", "true");
googletag.pubads().refresh([slot]);
},
});
});
}
A few details make the difference between refresh that earns and refresh that erodes:
- Only refresh viewable slots, and only after they were viewable for a while. Start the timer on
impressionViewable, not on render, and pause it when the slot leaves the viewport or the tab is hidden (document.visibilityState). - Tell GAM it is a refresh. A key-value like
refresh=truelets you declare refreshed inventory accurately and report it separately. It also lets you give refreshed impressions their own pricing rules and line item targeting. - Use a shorter Prebid timeout for refresh auctions. The page has finished loading, so bidders that are going to
answer do so faster, and a long wait here is time the slot shows a stale ad. Pass
timeoutperrequestBidscall, as above. - Cap refreshes per slot. Some buyers value the fourth refresh of a slot very differently from the first. A cap of a handful of refreshes per slot per page view keeps the average quality up.
- Don't refresh slots with direct campaigns that bought exclusivity. Check that sold line items with roadblocks or
sponsorships are excluded, usually by targeting them to
refresh!=true.
Report refresh as its own stage
Refreshed impressions behave differently. They usually carry lower CPMs than the first impression in the same slot, and their fill rate depends on how many bidders re-bid. If your reporting blends them with first impressions, a refresh change that adds 20% more impressions at lower CPMs can look like a CPM drop instead of a revenue gain.
In Valuad's reporting every impression is tagged with its auction stage (initial, refresh, or unfilled, meaning a backfill auction for a slot the first auction didn't fill), so refresh is measured as its own line. Whatever tool you use, look at revenue per page view by stage. That is the number that tells you whether refresh is adding money or just adding impressions.
A quick compliance check
- Is every refreshing ad unit declared as refreshing in Ad Manager?
- Are time-based and event-triggered refreshes at least 30 seconds apart on web?
- Do you only refresh slots that were viewable, and pause on hidden tabs?
- Is any refreshing inventory running AdSense tags? If so, stop time-based refresh there.
- Are sponsorships and exclusive direct campaigns excluded from refresh?
Want a second pair of eyes on your setup? Talk to the Valuad AdOps team.