Server-side GA4: when it is worth the infrastructure
A server container is a service you now operate: a host, a domain, a deployment and someone to notice when it stops. Here is what that buys, and when it does not buy enough.

Server-side GA4 is worth the infrastructure when you need collection to happen on your own domain, when you need to edit or drop event data before it reaches a vendor, or when a page is carrying so many third-party tags that removing them is measurably worth doing. It is not worth it when the only goal is to recover a few blocked hits. A server container is a service you now operate: it needs a host, a domain, a deployment path and somebody who notices when it stops answering. That last item is the one people forget, and it is the one that turns a measurement improvement into an outage nobody sees for a week.
Server-side GA4 is a Google Tag Manager server container: the same tag, trigger and variable model as a web container, running on infrastructure you deploy instead of in the visitor's browser. Google documents three ways to stand one up — a Cloud Run setup, an App Engine setup, and a manual setup on a platform of your choice — plus a separate step for mapping a custom domain onto it. The browser still sends a request. It sends it to your tagging server, and the server decides what is forwarded to Google Analytics and to anything else you have configured.
The distinction that matters is not client versus server in the abstract. It is where the decision about an event is made. In a browser container, the decision is made in code you shipped to a device you do not control, and the request leaves that device addressed to a vendor. In a server container, the browser makes one request to an endpoint you own, and every onward request is made by a process you run.

A consent banner changes what GA4 can measure, and the reports carry no marker saying so. What the seven consent types cover, what basic and advanced consent mode each do when someone declines, and how to read numbers collected under either.

Market4 turns one release note into a changelog page, a blog post, a mail-out and a week of social posts — and then tells you which of them brought anyone back.
| Concern | Browser container | Server container |
|---|---|---|
| Where tags run | The visitor's device | Infrastructure you deploy |
| Who pays for compute | The visitor, in battery and main-thread time | You, in hosting |
| Request destination | Each vendor directly | Your tagging endpoint, then onward |
| Editing an event before it is sent | Only in code already shipped to the page | In the container, at request time |
| Failure visibility | A missing hit nobody sees | A service that can be health-checked |
| Ongoing cost when traffic is zero | None | Whatever your host charges to stay reachable |
Server-side GA4 earns its keep when at least one of these is true, and it earns very little when none of them is. The test is whether the thing you gain is something you were already trying and failing to do another way.
The weakest reason to run a server container is the hope that it will restore numbers a browser blocked. Some of that traffic comes back and some does not, and you will not know the split in advance. Buying a permanently running service against an unknown recovery is a bet, not a plan. The same is true of adopting it because a competitor did: their tag surface is not yours.
Before committing to a tagging server, it is worth being precise about the gap you are trying to close. Analytics counts and server logs disagree for reasons that have nothing to do with where the container runs, and moving the container will not close that particular gap — see why analytics sessions and server logs never match. If the number that bothers you is that one, a server container is the wrong purchase.
No. A server-side setup usually keeps a web container on the page; what changes is where that container sends its data. The web container fires a request to your tagging server instead of to each vendor directly, and the server container holds the tags that talk to Google Analytics and to any other destination. Both containers exist, and both need to be configured and deployed.
No. Google documents a Cloud Run setup and an App Engine setup, and also a manual setup for a platform of your choice. The manual route means you are responsible for the runtime, the scaling and the certificate, which is exactly the trade being made: less lock-in, more operations. Whatever you pick has to stay reachable, because an unreachable tagging server collects nothing.
It can, but the size of the effect depends entirely on how many third-party tags the page currently loads. Replacing several vendor scripts with one request to your own endpoint removes real work from the main thread. Replacing a single analytics tag with a single request to a tagging server removes almost nothing. Measure the page as it is now before assuming there is speed to recover.
It is the cost of keeping a service reachable, which depends on your host and your traffic rather than on Google Analytics. The part that is easy to under-budget is not compute, it is attention: someone has to own deploys, certificates, and the alert that fires when collection stops. A tagging server nobody owns is a single point of failure sitting in front of all your measurement.
Yes, and gradually is the safer order. Stand up the server container, map the domain, and forward a single event type while the existing web tags keep running. Compare the two streams for a few days before switching anything off. Cutting over everything at once removes your only reference for whether the new path is complete.
A signup that starts on your marketing site and finishes in your app is two users in GA4 unless the domains are configured together. Here is what the setting does and what it cannot fix.

Whether GA4 records a click to your docs depends on where the docs live. The built-in outbound click event fires only for links that lead away from the current domain, and configuring cross-domain measurement switches it off again.