3.7 million weekly impressions, unmonetized and untraceable
A real Supply Path diagnostic on a multi-site publisher network
What the diagnostic found
The "default" ad unit problem
3.7 million weekly impressions were landing in GAM's generic default bucket instead of their real ad units, invisible to targeting or proper monetization.
Nearly two decades of tag debt
Ad tags built by different developers across different years, no consistent naming convention, described by the client's own developer as a bit of dirty code.
A hidden traffic-source blind spot
Nearly 90% of one site's traffic arrived through Facebook's in-app browser, not a standard browser, a context with different consent and rendering behavior a surface-level audit would miss.
AdSense and Ad Exchange overlap
Both networks were running in parallel on the same inventory with no clear priority set between them.
The Client
AdHub Media runs a network of publisher sites, including Notizie.it and Donne Magazine, monetized primarily through Google Ad Manager alongside AdSense and Ad Exchange.
The Challenge
GAM reports showed a large share of ad requests landing under a generic "default" ad unit, meaning Google Ad Manager could not identify which real ad unit was actually making the request. Impressions sitting there could not be properly targeted or monetized. Fixing it meant finding the actual broken implementation across a live, multi-site network without disrupting traffic.
_tK69a7zIDk3CZrwAn_VUk.webp?width=3840&quality=80&format=auto)
The Solution
Rather than guessing at the fix, we enabled GAM's own "Suggested Ad Units" feature and let a few days of live request data reveal exactly which ad units were misimplemented and on which pages, turning an invisible problem into a specific, page-by-page punch list.
Diagnostic first, not fix first
Enabled Suggested Ad Units and let GAM's own data identify the broken implementations before touching any code, avoiding guesswork on a live, revenue-generating site.
Standardizing the ad unit structure
Replaced years of inconsistent naming with one parent ad unit per site and child units by size, a structure the client's own developer confirmed was already the clean pattern used on their newest site.
Piloting on the cleanest site first
Started with the one site running no competing ad network, to validate the fix cleanly before extending the same structure across the rest of the network.
Cross-checking AdSense vs. Ad Exchange
Both networks were serving the same inventory with no confirmed priority between them, reviewed whether Ad Exchange's higher-CPM setting was actually resolving the overlap the way it's meant to.
A structural fix, not a one-off patch, the same naming convention now applies as new sites join the network.
What This Shows
This is what a real Supply Path Health Check engagement looks like: methodical, grounded in the ad server's own request data rather than guesswork, working page by page across a live multi-site network.
Grounded in the platform's own data
Every finding traced back to GAM's own reporting, not assumptions, using the Suggested Ad Units feature rather than manual page-by-page guessing.
A phased rollout, not a big-bang fix
Piloted on one site, confirmed the structure worked, then extended it, rather than pushing an untested change across the whole network at once.
Real constraints, stated plainly
This account's actual monetization level was modest, which is now part of how we qualify engagements before taking them on: we look at absolute recoverable revenue, not just the percentage of leak, before pricing an audit.
