Your caching plugin is silently deleting your campaign data. WP Engine sanitizes URLs and strips UTM parameters before PHP even runs. LiteSpeed Cache creates redirect loops that lose UTMs entirely. Cloudflare APO strips parameters on 301 redirects. The result? 30-40% of your marketing attribution vanishes—and your analytics never show the missing data.
Here’s the thing: page caching and UTM tracking are fundamentally incompatible. A cache stores one static version of your page and serves it to everyone. But UTM parameters are unique to each visitor’s click. When caching wins, attribution loses.
How Page Caching Destroys UTM Parameters
Page caching works by storing a fully-rendered HTML snapshot of your page. When the next visitor arrives, the cache serves that snapshot instead of running PHP again. Faster load times. Less server load. Everyone’s happy—except your marketing data.
The problem: UTM parameters live in the URL, and cached pages ignore URLs.
Visitor A clicks your Facebook ad with ?utm_source=facebook&utm_campaign=summer_sale. Your cache stores the page. Visitor B arrives from Google organic—no UTMs. The cache serves Visitor A’s cached page. Your analytics attribute Visitor B to Facebook. Visitor C arrives from an email campaign. Same cached page. Your analytics now show three Facebook conversions when only one came from Facebook.
You may be interested in: Browser Fingerprinting Won’t Save Your Attribution
This is why WooCommerce documentation explicitly warns: “Generally, don’t ever enable HTML caching on WooCommerce shop pages as it breaks dynamic output plugins.” Tracking scripts are dynamic output. Caching breaks them.
WP Engine’s UTM Problem
WP Engine is particularly aggressive. Their platform sanitizes URLs at the server level—before your WordPress code even runs. They strip query parameters they consider non-essential, then attempt to reattach them after processing.
The failure point: 301 redirects. When WP Engine redirects from non-www to www, or from HTTP to HTTPS, the UTM parameters often don’t survive the trip. Your visitor arrives with perfect attribution data. WP Engine processes the redirect. Your tracking code sees a clean URL with no UTMs.
This isn’t a bug—it’s a feature. WP Engine optimizes for speed by reducing URL complexity. Your marketing attribution is collateral damage.
LiteSpeed Cache Redirect Loops
LiteSpeed Cache handles URLs differently, but the outcome is the same. When LiteSpeed encounters a URL with query parameters, it can create redirect loops trying to serve the “canonical” version of the page.
Each redirect strips a bit more data. By the time your visitor lands on the final cached page, their UTM parameters have been redirected into oblivion.
The fix requires careful configuration of LiteSpeed’s “Do Not Cache Query Strings” setting—but this creates its own problems. Excluding UTM parameters from caching means generating fresh pages for every campaign visitor, which defeats the performance benefit of caching.
Cloudflare APO’s Silent Parameter Stripping
Cloudflare’s Automatic Platform Optimization (APO) caches your entire WordPress site at the edge. Fast? Yes. Good for tracking? No.
APO strips query parameters on 301 redirects by default. If your site redirects for any reason—trailing slash normalization, HTTPS enforcement, www preference—your UTMs may not survive.
Cloudflare’s documentation mentions this behavior, but it’s buried in technical details most site owners never read. You enable APO for speed, your site gets faster, and your campaign attribution quietly breaks.
The Cache Exclusion Trap
The standard advice is to exclude UTM parameters from caching. Every caching plugin offers this option. Problem solved, right?
Not quite. Excluding UTM parameters from cache means generating a fresh page for every campaign click. If you’re running significant ad spend, that’s thousands of uncached page loads hitting your server directly. Your hosting costs increase. Your page speed drops. Your Core Web Vitals suffer.
You may be interested in: GTM Server-Side Is a Black Box
You’re trading marketing data for site performance, or site performance for marketing data. Neither choice is good.
Why Server-Side UTM Capture Bypasses the Problem
Server-side tracking solves this by capturing UTM parameters before caching interferes.
Here’s how it works: JavaScript runs in the visitor’s browser, reads the full URL including UTM parameters, and immediately sends that data to your tracking server. This happens before the page even finishes loading—long before caching decisions matter.
The cache can serve whatever it wants. Your UTMs are already captured and stored server-side.
When that visitor converts—minutes, hours, or days later—the server-side system attaches the stored UTM parameters to the conversion event. Your attribution stays accurate regardless of what the cache did or didn’t serve.
How Transmute Engine Handles UTM Caching Conflicts
Transmute Engine™ is a first-party Node.js server that runs on your subdomain—completely separate from your WordPress caching layer. The inPIPE WordPress plugin captures UTM parameters via JavaScript the moment a visitor lands, then sends them via API to your Transmute Engine server.
Your cache serves cached pages. Transmute Engine captures UTMs. Both systems work independently.
When a WooCommerce purchase happens, Transmute Engine attaches the stored UTM data and routes the conversion to GA4, Facebook CAPI, and Google Ads simultaneously—all with accurate campaign attribution that caching couldn’t break.
Key Takeaways
- Page caching serves identical HTML to all visitors, destroying unique UTM attribution
- WP Engine strips UTMs at the server level before WordPress code runs
- LiteSpeed and Cloudflare APO lose UTMs during redirect processing
- Cache exclusion rules trade site performance for marketing data—a losing bargain
- Server-side UTM capture via JavaScript bypasses caching conflicts entirely
WP Engine sanitizes URLs at the server level before PHP runs, removing query parameters it considers non-essential. While it attempts to reattach them, UTMs are often lost during 301 redirects or canonical URL processing. You need to capture UTMs via JavaScript before WP Engine’s sanitization layer touches them.
At minimum, exclude cart, checkout, my-account, and any pages with dynamic tracking elements. WooCommerce documentation explicitly warns against HTML caching on shop pages because it breaks dynamic output plugins including tracking scripts.
Yes. Server-side tracking captures UTM parameters via JavaScript before any caching layer interferes, then stores them server-side. When a conversion happens, the stored UTMs attach to the event regardless of what the cache served.
Technically yes, but it defeats the purpose of caching. Excluding UTM parameters means generating fresh pages for every campaign visitor, increasing server load and slowing page speed. Server-side capture is the better solution—it preserves both caching benefits and UTM accuracy.
Stop choosing between fast pages and accurate attribution. Learn how Transmute Engine captures UTMs before caching interferes.



