What server-side tagging is and when it genuinely makes sense
I take the mechanism apart, show numbers from my own implementations and name the cases where I advise against it.

Server-side tagging is increasingly described as the future of tracking. The direction is clear enough, because the largest advertising players recommend it, Google and Meta first among them, while classic in-browser measurement sees less every year. In this article I describe how the technology works from the inside, and along the way I take apart a few myths that grew around it faster than the implementations did.
I start with the two benefits that come up in almost every conversation about server-side tagging: traffic recovered from ad blockers, and cookies that stop dying after a week. In my own implementations, though, the biggest difference came from purchases measured with no browser involved at all. The answer to why GA4, meaning Google Analytics 4, shows fewer transactions than the store admin has many more layers than ad blockers alone. And server-side tagging offers more than those two headline benefits. I have left for the end a set of instructions for measuring your own tracking gap using nothing but your store admin and your analytics reports.
How server-side tagging works
Server-side tagging is a way of measuring in which data travels between the store and the advertising platforms by a different route: not straight from the customer's browser, but through a measurement server belonging to the store. In the classic arrangement, the browser talks to each platform separately: the Google script sends data to Google, the Meta script to Meta, and so on for every further tool. In the server arrangement, that server stands between the browser and the platforms, running under the store's own address. The browser now talks mainly to it, and that server decides what is passed on, where, and in what form. Most often the heart of such a server is the server-side version of Google Tag Manager, sGTM for short.
The closest analogy comes from the life of a company. With standard, client-side measurement, every advertising platform keeps its own observer inside the store, taking whatever notes it likes and reporting straight back to its own head office. The owner sees neither those notes nor the moment they leave the building.
Server-side measurement hires an employee of your own, working in the back office. That employee becomes the primary source. They watch what happens, filter the notes and decide what goes to which platform.
In the ideal arrangement the outside observers go home, and a new platform is simply one more recipient of the back-office report. In practice, to keep the advertising working as well as it can, you usually leave them the entrance to the shop floor but not the back office. They are allowed to note the basic identifiers, and everything that genuinely matters is sent by your own employee.
That employee has an advantage the outside observers will never win back. Browsers now act as mall security, and they grow stricter every year: they treat outside observers, meaning third-party scripts, with suspicion, show them the door, or forbid them to take notes by deleting their cookies. The store's own employee wears the company uniform, because they operate within the store's domain, so security knows them and lets them through. This is where the two best-known benefits of server-side measurement come from. Both require the server to be configured properly, and both rest on the same mechanism. The data arrives from the store's own domain, so ad blockers and browsers alike treat it differently.
How ad blockers cut measurement out, and what the server recovers
Ad blockers work from public filter lists. Written into them are the domains that advertising platform scripts load from. An advertising tag, the script a platform uses to collect data about a visit, dies precisely because it arrives from a foreign and well-known domain. Measurement run through a server looks entirely different from a blocker's point of view. The data goes to the store's own address, which is where the customer is shopping anyway, so a typical filter has nothing to catch it by. Most blocked traffic comes back into measurement as a result.
The scale of this has been measured on the Polish market, where most of my implementations run. According to the IAB Polska report on ad blocking, Zjawisko blokowania reklam, IAB Polska, third edition, March 2024, 38% of respondents use a blocker on desktop, 18% on smartphones and 6% on tablets. The same report carries a figure the industry tends to skip, though: more than three quarters of time spent online in Poland now happens on smartphones, where blocking is less than half as common. The problem is real, then, but it is largest where the traffic is smallest.
One more nuance, and a myth worth dismantling with it: a user with a blocker is not the same thing as blind analytics. Blockers differ in what they cut. The most popular extension cuts measurement out immediately after installation, but another, equally well known, has that feature switched off by default. Its "acceptable ads" programme lets through, according to the peer-reviewed study Understanding the Privacy Implications of Adblock Plus's Acceptable Ads, around 80% of calls to Google that would otherwise be blocked. Some people running a blocker are therefore visible to measurement. On the other hand, the most aggressive lists can cut out even measurement hosted on the store's own domain.
Server-set cookies, better attribution
The second standard benefit requires a look under the bonnet of attribution. Analytics recognises a returning visitor by a cookie, a small entry it leaves in the visitor's browser on their first visit: this browser is visitor number such-and-such, they came from this ad. When the same visitor comes back two weeks later and buys, analytics connects the purchase to that earlier visit and the campaign gets the credit. That is attribution, the assignment of a sale to the source that brought it in.
The trouble is that Safari, and increasingly other browsers too, shortens the life of cookies written by scripts to around seven days. A customer who clicked an ad on Monday and made her decision a fortnight later comes back to the store as an entirely new person. Her purchase lands in the reports as a direct visit, the campaign that brought her in gets no credit at all, and the store owner cuts the budget in exactly the place he should be increasing it. The longer the decision process in a given industry, the larger the share of sales that vanishes from advertising reports this way.
The server changes one apparently small thing here. The cookie can be issued not by a script running in the browser but by the server itself, on the store's own domain. Browsers do not treat cookies of this kind, called first-party, as outside tracking, and do not cut them off after a week. Their lifetime rises from seven days to as much as two years, though most modern browsers shorten that in practice to around 400 days. That is still more than a year instead of a week. A returning customer is the same customer again, the conversion goes back to the campaign that earned it, and the owner stops cutting budgets on the basis of a report in which a large part of his sales is pretending to be direct traffic.
The benefits of server-side tagging that few people talk about
If the benefits of server-side tagging ended at traffic recovered from blockers and longer-lived cookies, this would simply be a tidier version of the same measurement: the same events, just with fewer leaks. The interesting part begins where there is no browser at all.
A webhook, or a purchase reported straight from the back office
In one of my implementations, with server-side measurement already running and blocked traffic already recovered, analytics still showed far fewer orders than the store admin. The reason turned out to be mundane. Some customers pay and never return to the thank-you page, which is where purchase measurement fires: a closed tab, a banking app that does not take them back to the store, a phone slipped into a pocket. From the browser's point of view that purchase does not exist, and no implementation will change that, however good, because there was never a single moment in which measurement could have run.
But the store system knows everything about that order. What was bought, for how much, and when it was paid for. And that knowledge can be put to use, because server-side tagging opens a route the browser does not have. The store can be configured to send information about every paid order straight to the measurement server, system to system, with no involvement from the buyer, and the server passes it on to analytics and the advertising platforms. In technical jargon a mechanism of this kind is called a webhook. It is a distinct piece of work with its own configuration, not an extra bundled in with the server. What the server does give you, once it stands, is a base you can add extensions like this to later, as the need arises, without touching what already works.
If the browser did manage to measure the purchase, it leaves a note in the server's database saying this order has been handled. The report from the store system arrives a few minutes later, so the server has time to look there and does not count the same transaction twice. What does reach the reports are the transactions that would otherwise have been lost for good.
The report from the store's back office carries no trace of the earlier visit, though, so that trace has to be built separately. Only then can a recovered purchase be assigned to the right campaign instead of landing among direct visits. That is one of the operations the server has to perform on such an event, and the next section is about them. Once that route was closed, the gap in the reports effectively disappeared, and I have written up the whole story step by step. Case study: how a webhook recovered 40% of lost transactions.
Data enrichment, or extending events on the server
A purchase reported by the store system arrives at the server without context, and only there can the event be enriched with data the report itself does not contain. The trace of the visit mentioned above is created back in the cart. The store saves a marker against it, that marker travels through checkout and comes back in the order report, and the server uses it to find the earlier visit in its database, along with the source the customer came from. Without that route, the transaction reaches the reports as a direct visit.
The same principle applies to the technical parameters platforms use to recognise who bought and from where: the IP address and the device information, remembered from the earlier visit. Without them, every recovered purchase would look in the reports as though a machine in a data centre had made it, rather than a customer in Warsaw on a phone. And geography and the device breakdown are exactly what decisions about where and to whom to show ads are built on.
In the same way, a company can send the server information its in-browser measurement has no access to: margin instead of revenue alone, customer value from the CRM, a lead quality score assigned by a salesperson, or a correction after a return. The advertising algorithms then learn not from how much the store sold but from how much it actually earned, and that changes which campaigns the system considers effective. The list is open-ended, because the limit here is set by what the company's systems can provide, not by the measurement.
One event, every platform
The last benefit is no longer about what measurement sees, but about how much load it puts on the customer's browser, and through that how much it slows the store down. In the classic arrangement every platform is a separate, heavy script in the browser. Each further tool adds kilobytes to download, a connection to a foreign server, and one more thing slowing the store down as it loads.
Server-side measurement consolidates that weight. The browser sends one main event to the server, and the server distributes it to every platform at once. Even in the hybrid arrangement described earlier, where platform scripts stay but are slimmed down to collecting identifiers alone, the page sheds most of the analytical work. The browser has less to download and less to execute, and it shows most on phones, which is where most traffic happens today and where seconds decide whether a cart is abandoned.
Does server-side measurement bypass user consent?
That leaves the question of users who have not consented to tracking. Server-side tagging is sometimes presented as a way around that choice. It is a myth.
Server-side measurement does not bypass consent and does not exempt anyone from the law. Implemented correctly, the system enforces the decision made in the cookie banner exactly as in-browser measurement does. The store collects consent precisely as it did before, and only the infrastructure processing that decision changes. The server is not a skeleton key for recovering blocked information, it is one more system that has to adapt to the buyer's choice, by blocking a send, for instance, or by transmitting fully anonymised statistics only.
What happens after a refusal does depend on the platform. Most advertising platforms get nothing without consent. GA4 can receive a signal stripped of identifiers, from which it will build modelled statistics alone, so a refusal there does not mean an empty report, it means a report of lower quality.
This layer needs the most care during implementation. Before publication, every scenario has to be tested separately: full acceptance, partial consent, and refusal. Carrying consent across domains is a trap of its own. Without the right configuration, someone who accepted measurement on the brand's blog and moved to the store will be treated there as a completely new, anonymous visitor and asked to decide all over again.
What server-side tagging will not fix
Server-side tagging will not fix the mess it finds. If events are counted twice or defined badly, the server will reproduce those errors just as efficiently as the browser, and arguably more so. Errors in browser-side measurement are common enough: analytics loaded twice and inflating traffic, tags firing before consent, transactions with no value, internal traffic left unfiltered in the reports. Campaigns using automated bidding then learn from false numbers. Every server implementation is preceded by a thorough manual audit of the measurement, because only that shows what needs fixing and in what order. Putting measurement in order is a precondition, not an add-on.
Numbers at the end, because there is another myth waiting here, though not where you might expect it. In my implementations, moving measurement to the server alone, before any recovery of purchases from the store back office, raises the number of recorded events by 20 to 40%, because traffic previously cut out by blockers and by browser privacy mechanisms comes back into measurement. The industry figure of "20 to 30%" is not plucked from the air, then, it describes the lower part of what I actually see in my own work.
The myth begins where somebody promises that figure to everyone in advance. How many of those events can be recovered depends on the device mix, on the age and habits of the customers, on the length of the purchase path and on the store platform itself. A store with a young, technical, desktop-based audience will recover an entirely different share of events than a store selling mainly on phones, so two equally good implementations can end in two different results.
What server-side tagging costs, and when I advise against it
I will not answer the question of implementation cost with a single figure, because the same label covers entirely different projects. The estimate depends, among other things, on how many tools the data is meant to reach, on whether the store runs on a popular platform or something more niche, on whether measurement is meant to reach back-office systems, and on whether a consent layer is already in place. A good deal also depends on what the initial audit turns up, because only that reveals the state of the measurement. One implementation starts from a blank page, another from clearing up after several predecessors. The questions "what does it cost" and "how much will I recover" therefore share a first answer, and it is the most worn-out sentence in this industry: it depends.
The cost of running the server is predictable. It is a fixed charge on the store's side, usually USD 20 to 50 net per month, and the range comes from how billing works. Most providers bill the server in request packages, a subscription for a set number of requests the site may send to the server in a month.
A store with a thousand visits measuring only the events that matter, purchases or add-to-cart, will fit into the cheapest package without trouble. Packages are usually roomy, so one event more changes nothing. But measuring everything measurable, every scroll, every click on empty background and every mouse movement, multiplies the number of requests from the same traffic and sooner or later pushes the store into a higher tier. This is why measurement has to be designed deliberately, rather than measuring everything just in case.
More important than what it costs, though, is who it pays off for. The entire value of server-side measurement comes from recovered data going back into the advertising algorithms and into budget decisions. A small service site with no campaigns has nothing to recover and nothing to feed those algorithms with, and server-side measurement will add nothing to it but an invoice. The larger the traffic and the larger the advertising spend, the further the scales tip the other way, because the same percentage of lost signal starts costing real money and degrading campaign optimisation.
GA4 shows fewer transactions than the store. Here is how to measure it
Putting the store admin next to the analytics reports is, for many e-commerce owners, the moment reality arrives. When two systems show two different figures, frustration follows easily, and so does the hasty decision to rebuild the entire tracking setup. Before you go looking for culprits or spend a budget on new infrastructure, measure the scale of the problem and turn a suspicion into a number.
The arithmetic is simple and needs nothing but access to the store admin and GA4. You export the list of paid orders and set it against the list of transactions from Google Analytics for the same period. Every store order with no match in analytics is one miss, and the result is a plain fraction: how many genuinely paid orders analytics managed to record.
Before you treat that result as evidence, filter out the four traps that most often distort it.
The first concerns the identifier. Orders are matched on Transaction ID alone, because the number the customer sees on the invoice is often an entirely different value from the internal database identifier analytics uses under the bonnet. You have to compare the same values, not the same names.
The second is time zones. The store admin, analytics and exports do not always work in the same zone, and the setting can differ in every tool. An order placed late in the evening can then land in the report on a different day than in the admin, so at the edges of the period you are examining it is worth checking before you count anything as missing.
The third is delayed reporting. Leave the last 72 hours out of the calculation, because standard GA4 reports need time to process data and attribute it, and checking for yesterday's misses will always show a gap larger than the real one.
The fourth is sample size. Ten orders are noise, not statistics, and a single week can be an anomaly. For a result accurate to within ten percentage points you need on the order of 40 orders, plus a second run a week or two later to confirm it.
If the gap holds at a stable, double-digit level once those traps are accounted for, you have hard data in your hands. Write to me with the result and we will work out where exactly your measurement is leaking, why it is happening, and whether implementing server-side tagging would be a worthwhile investment in your case.
Need help with a data infrastructure rollout or a performance campaign?
Related service: Server-Side Tagging →