Migrating GA4 Tracking: Measurement Protocol & Server-Side FPID

Hey everyone,

We have a Magento 2.0 webshop using the WeltPixel GA4 extension, which tracks purchases and refunds via Measurement Protocol. However, I’m now implementing server-side tracking with Stape, and I’ve encountered an issue:

:stop_sign: Problem

Server-side tracking uses FPID (more robust & durable).

Measurement Protocol (via WeltPixel) still uses JS client_id.

• This mismatch means that purchase events aren’t linked correctly to other events.

I tested this on my staging environment, and as expected:

:white_check_mark: All GA4 events except Purchase use FPID.

:cross_mark: Purchase events (sent via WeltPixel Measurement Protocol) use JS client_id instead.

Possible Solutions

:one: Keep GA4 tracking via WeltPixel, but use server-side GTM for Meta, Pinterest, etc.

• Change the WeltPixel plugin to send all events via Measurement Protocol (ensuring consistent client_id tracking).

• Downside: Still relying on JS-based tracking for GA4.

:two: Fully migrate GA4 tracking to FPID & disable WeltPixel tracking

• Shift from JS-based client_id to FPID.

• Use webhooks to track 100% of purchases/refunds.

Concern: Will this reset all historical GA4 user data since we’re switching to FPID?

Question for the Community

What’s the best approach here?

• Will migrating fully to FPID break historical user data in GA4?

• Is it better to keep Measurement Protocol tracking all events, even if it’s JS-based?

• Any other possible solutions?

Would love to hear your thoughts!

Thanks! :rocket:

Hey,

If you just switch to FPID, then yes - all old users will be counted as new users.
But there is an option in GA4 client which I recommend to always switch on:

So if the user has _ga cookie - it will be used, if not - FPID will be used and this will ensure a smooth transition.

Hey Alex,

Thanks for your reply! When choosing to migrate (option 1) I will definitely activate this option!

Hi everyone,

I’d like to ask a question here related to the use of FPID.

I’m working on a server-side tracking setup for a client, and depending on whether the cookie is set from the browser or from the server, I’m able to retrieve the client_id in two formats:

  • the traditional GA1.1.xxxxx.yyyyy format from the _ga cookie (when set via client-side JS),
  • or the FPID format (when the cookie is generated server-side).

The issue I’m facing is that when the FPID format is used, I can’t see the client_id showing up properly in GA4 — it’s like GA4 doesn’t recognize it.
However, everything works fine when I stick with the client-side version using the _ga cookie.

Has anyone run into this issue before?
Is there a step I might have missed?

Thanks in advance! :folded_hands:

Perhaps you don’t modify the cookie value before sending it? As client id is used not the whole cookie value is used, here are the details:

Thanks Alex for your reply!
I thought you had just found the solution for me, but after double-checking, the format actually seems to be correct.

Below is an example of a request sent to GA4 — maybe it’ll give you a bit more context?
If not, no worries — and thanks again for your time :slight_smile:

https://region1.analytics.google.com/g/collect?tid=G-XXXXXXXXX&v=2&gtm=45h91e54f0v898990761z876991293z99177767223za204zb76991293&_p=1744836490364&_dbg=1&_tu=DA&_gaz=1&_gsid=XXXXXXXXXUDjhOBAz1en9U98mw_BqOA&npa=0&dma_cps=syphamo&dma=1&tag_exp=101509156~102509682~102803279~102813109~102887800~102926062~103027016~103051953~103055465~103077950~103106314~103106316&cid=TF0i0Y11Suj8eADJrTzLm6S9DxHqrxqTI6m8IVnKV5I%3D.1744658701&ul=fr-fr&sr=1920x1080&ur=FR-NAQ&uaa=x86&uab=64&uafvl=Google%2520Chrome%3B135.0.7049.86|Not-A.Brand%3B8.0.0.0|Chromium%3B135.0.7049.86&uamb=0&uam=&uap=Windows&uapv=19.0.0&uaw=0&are=1&pscdl=&_s=1&_uip=83.195.245.0&gcs=G111&gdid=dNGFkYj&uid=&sid=1744832079&sct=2&dl=https%3A%2F%2Fwww.beaba.com%2Ffr-fr%3Fgtm_debug%3D1744836489453&dr=https%3A%2F%2Ftagassistant.google.com%2F&dt=BÉABA%20|%20Boutique%20Puériculture%20%26%20Équipement%20Bébé&_eu=AABAAAI&gcd=13r3rPr2r5l1&pae=1&frm=0&seg=1&en=page_view&ep.consent_status=%2Ccriteo%2Cfacebook_pixel%2Cgoogle_ads%2Cgoogle_analytics%2Ckwanko%2Cdw_dnt%2Cclickintext%2Ctradedoubler%2CCriteo%2CGoogle_Ads%2CTradedoubler%2C&ep.landing_utms=&ep.local=fr_FR&ep.country=FR&up.client_id=917736082.1744661001

Posting to subscribe to this topic.

We have always used the Measurement Protocol to track purchases on our site. The Client Id is saved against a data record in our internal database and is then inserted into the MP call at the time of execution.

But we have never changed the format we used since migrating GA4 to sGTM. @Alex , are you saying here that we should be using the FPID cookie as per the link you posted, instead of the _ga cookie value?

@Evo in your example parameter ‘uid’ is empty for some reason, so it does not contain any user id, so that request will be in unassign/not set category because of this.
Seems you send it as ‘client_id’ but it’s just a customer parameter of your event payload

@Ross_Hopkins Check your GA4 client on sGTM, if there is used ‘Server managed cookies’ - then yes, you need to use FPID. Otherwise _ga is used.

Thanks Alex. Our setting is “JavaScript Managed”.

Is there an advantage over one option vs the other?