5 Post-Click Leaks Draining Your PPC Budget
Three weeks ago you paused a campaign. ROAS had slipped to 4x, under your target, so you cut it. Sensible call.
The campaign was doing 5x. You just couldn’t see it, because a chunk of those conversions never made it back to the dashboard. You didn’t make a bad decision. You made a good decision on bad data, which is a harder thing to catch and a more expensive thing to repeat.
This is the part of paid media nobody owns. You own the campaign: bids, copy, audiences, budgets. Your developer owns the website. The stretch in between, the redirect, the page load, the tag that fires or doesn’t, sits in neither job description. And nothing in that stretch knows it is handling a paid click. Your server treats the $1.80 visitor exactly like any other request, with no idea Google just charged you for it. So that is where the money quietly leaves.
For years this was tolerable. You’d lose 10% or 15% of your conversion data, shrug, and adjust in your head, because you were the one reading the numbers. You’re not reading the numbers anymore. Smart Bidding is. Performance Max is. The machine takes whatever conversions you hand it and goes looking for more of the same, faster than you can check its work.
So bad data stopped being a measurement problem and became a training problem. Feed the algorithm conversions that are half spam and it won’t just misreport, it will go and find you more spam. Garbage in, garbage out quietly became garbage in, garbage at scale.
So where does it actually lead?
Here are 5 post-click leaks which are quietly draining your budget:
Page Speed
The first kind happens before you have any data at all. A slow page is the obvious one. Every second of load time costs you somewhere between 7% and 20% of your conversions, so the $1.80 click that takes 4 seconds to load, when the user already left at the 3-second mark, was $1.80 spent on a loading spinner. There’s nothing to mismeasure, because there was no conversion. 53% of mobile users abandon a page that takes longer than 3 seconds, and you are paying full price for every one of them.
Direct Chain
Your landing URL changed a while back, or you’re still bouncing HTTP to HTTPS to www, and each hop is a chance for something to go wrong. The GCLID only has to reach your landing page once. When the page loads and your Google tag fires, it reads that GCLID and stores it in a cookie, and from then on the user can browse, close the tab, come back days later on the same device, and still be attributed to the campaign. But if a redirect drops the query string before the page ever loads, the cookie is never set. The GCLID is gone, and a paid click with no GCLID lands in GA4 as “direct.” Your best channel reads like your worst, and most people never catch it, because “direct” looks like a healthy free channel rather than a billing error.
Incorrect Attribution
The next kind is worse, because the data does arrive. It’s just wrong, and the machine treats it as true. Start with the clicks that were never human in the first place. $63 billion went on invalid traffic worldwide last year, and somewhere between 11% and 22% of PPC clicks come from scrapers, click farms and bots, not people. Google catches some, not all, and the ones it catches it refunds eventually. But eventually is two weeks of Smart Bidding optimizing against inflated numbers. The refund lands in your account. The two weeks of skewed bidding doesn’t.
Spam Leads
Then the spam leads. If you run lead gen you know the screen, a CRM full of “test test” and “[email protected].” You can clean the inbox, but you also reported those submissions as conversions, and Smart Bidding took them and went hunting for more people like the ones who filled them in. If a third of your conversions are spam, you are paying Google to find you more spam. That’s the loop, and it tightens every week you leave it running.
Tracking
And then the leak that comes from your own tracking. A typical landing page fires 80 to 100 requests, and half of them are your own marketing scripts. There’s an irony in that. You spent a week A/B testing headlines for a 2% lift in CTR, while the 50-odd tags in your container quietly added 2 seconds to the page, and 2 seconds of load costs you far more than 2% ever could. The setup that exists to measure your success is denting it. And that is before the tags even have to fire. Around a third of users run ad blockers, and Safari and Firefox restrict tracking on top, so the sale happens and the platform never hears about it. You can lose visibility on 15% to 30% of your real conversions this way. Your dashboard says 4x. It might be closer to 5x. Which is roughly where we came in, because that gap is exactly the size that makes you pause a campaign that was working.
The Gap Nobody Owns
Here’s the part I keep coming back to. Not one of these is a campaign setting. You can audit your match types all afternoon and none of it touches the redirect eating your attribution or the bots inflating your sessions. The leaks live in the gap between the click and the conversion, and that gap is quiet because it falls between two teams and belongs to neither.
Meanwhile the auction itself is a crowded room. Everyone in your category has read the same playbooks and knows the same levers, so you squeeze 2% out of creative and so does the agency across town. The 15% to 30% leaking out the back has no one’s name on it. What looks like a measurement footnote is the real edge in paid media right now.
Run These Checks
But before you change a single setting, run these checks to figure out what is actually going on:
- Drop your top 5 landing pages into PageSpeed Insights, mobile.
- Run your ad URLs through Screaming Frog.
- More than one hop, and does the GCLID make it to the final page?
- More than one hop, and does the GCLID make it to the final page?
- Compare your Google Ads clicks to GA4 sessions over the last 30 days.
- Export last month’s form submissions and count the junk.
- Over 10% is already shaping your bidding.
- Install uBlock Origin, open a landing page, open DevTools.
- Does your conversion tag still fire?
If any of those came back ugly, the good news is that fixing it rarely means a rebuild. Almost all of it gets handled at the edge, the layer that sits between your user and your server, which in practice means a handful of Cloudflare settings rather than a developer and a sprint.

In my Hero Conf UK talk I went through exactly how I do each one, click by click. If any of the leaks above sounded familiar, that’s where best to start.
