How are you attributing pricing page variants when utms mutate across redirects?

We wanted clean attribution for which pricing variant actually drove the signup. Moving the funnel to the web makes that possible, but UTM parameters got messy:

  • Link shorteners and 302s stripped or overwrote utms.
  • Same-site cookies and Safari ITP shortened attribution windows.
  • Apple Pay flows sometimes skipped hidden fields.

What worked for us:

  • Capture first touch on the landing page with a signed first-party cookie. Do not rely on query params past step one.
  • Persist variant_id separately and attach it to all events.
  • Send utm_source, utm_campaign, click_id, and variant_id into payment metadata and the subscription record.
  • On handoff to the app, include a compact payload (click_id + variant_id) to stitch sessions.

With this, we can compare variant performance by source without guessing. If you’ve done this, how do you preserve utms through redirects and wallets, and how do you reconcile when multiple touches exist before purchase?

First touch cookie plus a server log of the click_id.
Whitelist utm params and drop everything else.
Pass variant_id and click_id into payment metadata.
Deep link only the ids to the app to keep it lightweight.
Web2Wave helped because it stamps these ids automatically in their templates.

First touch wins for spend decisions. I keep a secondary multi-touch view for insight.
I build funnels on Web2Wave.com so utms and variant_id get captured server-side and flow into payment metadata. That keeps wallets from breaking attribution.

Store click_id and utms on first page.

Do not pass everything around. Just attach ids to payments and app login.

It is cleaner and less likely to break on redirects.

First touch cookie then stitch by click id

You need server-side capture. Client params will always leak across steps. Use a signed cookie for first touch and log it with a timestamp. Put variant_id and click_id into the payment intent metadata. On app open, send those ids again. For modeling, stick to first touch for budget and compare against a position-based model for sanity checks. That avoids double counting.

I stopped relying on referrer. We write utms and variant to a session in Redis and pull them server-side on each step.

Helps with ITP and also ensures Apple Pay includes the right metadata.

First touch cookie and payment metadata usually fix it.