iOS 26 Is Quietly Breaking Your Click-ID Attribution
Safari 26 changed what survives the trip from ad click to landing page — but not in the way most posts claim. Here is what Apple actually strips, and how to capture click IDs before it happens.

Somewhere in the last few quarters, your Safari conversions started looking wrong. Not
missing entirely — just thinner than the revenue suggests, with a growing pile of purchases
your ad platform reports as direct or organic. Someone on the team searched around, found a
post saying iOS 26 strips gclid and fbclid from URLs, and that became the working
explanation.
That explanation is close enough to be dangerous. Apple did change what survives the trip from ad click to landing page, and the direction of travel is exactly what you think. But the specific mechanics are narrower than most of the coverage claims, and if you act on the overstated version you will either panic about something that is not yet happening or fix the wrong layer of your stack.
So here is the precise picture: three separate Apple mechanisms, what each one actually does today, and the one architectural change that makes your attribution durable regardless of which of them expands next.
Three mechanisms, routinely confused for one
Most articles on this topic collapse Apple's privacy features into a single vague threat. They are three distinct systems with three different scopes, and only one of them touches click IDs at all.
Link Tracking Protection
This is the one people mean when they say Apple strips click IDs. Link Tracking Protection
identifies known tracking parameters in URLs — gclid, gbraid, wbraid, dclid,
fbclid and similar — and removes them before the page loads.
Here is the part the alarmist coverage gets wrong. As of Safari 26, Link Tracking Protection applies in Private Browsing, and in links opened from the Mail and Messages apps. It is not enabled by default in regular, non-private Safari browsing, according to TaggRs' breakdown of the Safari 26 changes.
That is a meaningful share of traffic — Mail and Messages in particular carry a lot of clicks, and any link you send in a lifecycle email opened on an iPhone falls inside the blast radius. But it is not "Safari strips your click IDs," and a page telling you it is default-on everywhere is describing a world that has not arrived.
Advanced Fingerprinting Protection
This one is on by default for everyone, and it is the change that shipped most broadly. Safari 26.0, released on September 15 2025, enabled Advanced Fingerprinting Protection for all users rather than only in Private Browsing. It restricts the ability of known fingerprinting scripts to read URL query parameters and referrer data, per the same TaggRs analysis.
Note the qualifier that matters: this targets known fingerprinting scripts. It is not a blanket removal of query parameters from every page, and your own first-party code reading your own URL is not the target. But it does mean third-party scripts operating in the browser have progressively less to work with — which is the structural point of this whole article.
App Tracking Transparency
ATT is the oldest of the three and the most widely misunderstood in a different direction. It governs cross-app and cross-site tracking permission at the OS level. It does not strip URL parameters. It shapes how much identifier-based matching a platform can do once the data arrives.
You will find a lot of confident numbers about ATT opt-in rates, commonly in the 15 to 30 percent range. Treat those with suspicion. That figure recurs across industry blogs without a disclosed primary data source, and we could not trace it to original research. The direction — most users decline — is not seriously disputed. The precise number is folklore until someone publishes the methodology.
What is not happening
Being clear about the limits matters as much as the changes, because misdiagnosis is expensive.
Your UTM parameters are fine. Link Tracking Protection targets click identifiers
specifically. utm_source, utm_medium, and utm_campaign are explicitly unaffected, as
both TaggRs and
Affect Group's writeup
confirm. If your channel-level reporting in GA4 looks broadly intact while your
platform-reported conversions sag, that asymmetry is the signature of this problem, not a
coincidence.
Third-party cookies are not disappearing from Chrome. This is worth stating plainly because so much planning was built on the opposite assumption. Google officially retired the remaining Privacy Sandbox APIs on October 20 2025, including the Attribution Reporting API, and abandoned its plan to deprecate third-party cookies in Chrome. There is no removal timeline. If your roadmap still contains a "prepare for the cookieless future in Chrome" workstream, it is chasing a deadline that no longer exists — while the Safari-side erosion it distracted from is real and ongoing.
And Link Tracking Protection has not expanded to regular browsing. Apple has tested exactly that in Safari Technology Preview builds, which is a genuine signal about where this goes. But no committed date exists in any source we checked. Plan for it as a direction, not a deadline.
The real problem is not any single feature
Here is why the "which exact feature, in which exact mode" framing eventually stops mattering.
If your attribution depends on a click ID surviving inside a browser, being read by a third-party script in that browser, and being transmitted from that browser, then you have built your measurement on a surface that a vendor you do not control revises on a schedule you do not see. Every release cycle is a coin flip. You have spent the last several years reacting to each one.
The fragility is not that Apple removed a parameter. It is that your only copy of the parameter lived somewhere Apple gets to edit.
Link Tracking Protection in Private Browsing is a small cut today. The same mechanism turned on by default in regular browsing would be a large one, and you would find out from a dashboard dip rather than a changelog. That asymmetry — they ship, you discover — is the actual thing worth engineering against.
Capture the click ID before anything can strip it
The fix is unglamorous and mostly a question of when rather than what.
When a user lands on your site from an ad, the click ID is present in the URL of that first request. It is present at the server, in the query string, before any client-side script runs and before any browser-level protection has a chance to act on what a third-party script can read. That first landing request is the highest-fidelity moment in the entire funnel, and most stacks throw it away.
The pattern:
- On the landing request, read the click ID server-side and persist it against a first-party session or visitor record. Not in a third-party cookie — in your own store, keyed by your own first-party identifier.
- Attach your own durable identifier to that record. When the user later authenticates or checks out, you have a join key that does not depend on the browser having remembered anything.
- On conversion, send the event from your backend with the stored click ID plus normalized, hashed customer identifiers, straight to the platform's server-side endpoint — Meta's Conversions API, Google's Enhanced Conversions, TikTok's Events API.
The click ID never has to survive in the browser for the duration of the customer journey. It only has to survive the milliseconds before your server reads it, which is a window no current browser protection reaches into. This is the essence of server-side capture: move the moment of record from a place you rent to a place you own.
Worth being honest about the limits. This does not resurrect a click ID that was stripped in Mail before the request ever reached you — if the parameter is gone from the URL by the time your server sees it, it is gone. What it does is guarantee that everything which does arrive is captured permanently, rather than depending on a browser to hold it for another twenty minutes.
When there is no click ID at all
For the share of traffic where the identifier genuinely does not arrive, you need a second matching layer. This is what keeps the numbers from collapsing as the click-ID surface narrows.
Both major platforms support identifier-based matching that operates independently of click IDs. Meta's Advanced Matching and Google's Enhanced Conversions accept hashed customer identifiers — email address, phone number, name, location components — and match them against the platform's own user graph.
The mechanics matter enormously here, and this is where most implementations quietly lose half their potential match rate. The identifiers must be normalized identically to the platform's specification before hashing: lowercased, trimmed, phone numbers in E.164 format. SHA-256 of a correctly normalized value matches. SHA-256 of a value normalized even slightly differently produces a completely unrelated digest that will never match anything, and no error is raised — the event is accepted, and the match silently fails.
The practical implication is that your normalization logic must be one shared implementation used by every code path that sends events. The moment your checkout flow normalizes phone numbers differently from your offline upload script, you have two populations of hashes that can never reconcile, and your match rate drops for reasons no dashboard will explain.
How to verify what is actually happening to you
Do not take any of this on faith, including this article. Both platforms expose the diagnostics.
- Meta Events Manager reports Event Match Quality per event type. Segment by browser where you can. A Safari-specific EMQ gap against Chrome is the fingerprint of the problem described here.
- Google Ads conversion diagnostics surface Enhanced Conversions match rates and flag formatting problems in the identifiers you are sending. Low match rates here are usually a normalization bug rather than a signal-loss problem — worth ruling out before you blame Apple.
- Compare platform-reported conversions against your own order table, split by browser family. This is the only measurement that captures the true size of the gap, because it is the only one not produced by the systems doing the modeling.
If your Safari gap is large and your Chrome gap is small, the story in this article is probably your story. If both are large, look at your normalization first — you likely have a hashing problem, not a browser problem.
What to do now
The near-term work is narrow and worth doing regardless of what Apple ships next:
- Move click-ID capture to the server, at the landing request. This is the change that makes the rest of it durable.
- Audit your identifier normalization against each platform's current documentation, and consolidate it into one shared implementation.
- Instrument the gap — platform-reported versus actual, split by browser — so the next change announces itself in a number you already watch, rather than in a quarterly review.
None of this makes measurement perfect. Nothing does, and anyone promising otherwise is selling something. What it does is stop your attribution from being a function of decisions made in Cupertino, which is the only part of this you can actually control.


