hello@datascale.de+49 89 921 35 623tracked cookie-free · /openDEEN

Search services, integrations and blog posts.

DatascaleResourcesChecksServer-side tracking

Check · C03 · Tracking core

Detecting server-side tracking: loader, endpoint, pings

The check looks for your own tagging endpoint in the source: a stape loader, gtm.js from your own domain, or measurement paths on a subdomain. The deep scan confirms in the browser where the pings go.

What we check

Three signals, in this order: the stape fingerprint (SDK URL, load.stp and sst subdomains, the custom loader with a base64-encoded container ID), a gtm.js?id= from any domain other than googletagmanager.com, and a subdomain of your own domain with a Google measurement or loader path behind it: /gtm.js, /gtag/js, /g/collect, /mp/collect. The check is a note, never a failure. Without a server-side setup nothing is broken, the next stage is simply missing.

What the scan cannot see: the inside of the server container. Which tags are configured there and where they forward stays invisible. Where the pings actually go in the browser is what the deep scan reports as its own finding (Tracking architecture), including the DNS attribution of the endpoint to stape or another vendor.

Why it matters

Server-side tagging moves the tags from the browser to a server you control. Ad blockers and ITP no longer bite on vendor domains, the cookies run on your domain, and you decide which data leaves the house. The price: a container that needs operating, and a migration that often stalls halfway. Half migrated is the usual state. What server-side tracking delivers, what it costs and when it pays off is covered in the guide to server-side tagging.

Common causes

  • There simply is no server-side setup, all tags send straight from the browser to the vendor domains.
  • The server container exists, but the web container still sends to the standard endpoints instead of the first-party subdomain.
  • The setup runs on a subdomain without a recognisable measurement path in the HTML, so only the deep scan shows the data flow.
  • An sGTM project was started and never finished, the container idles along.

The fix

Set up a server container (stape.io or self-hosted), point the web container at your own loader path and migrate the tags one by one: GA4 first, then Ads and Meta. After each step, verify in the browser that the pings only run through your own subdomain.

Matching template

GA4 and Google Ads Consent Mapping

Documents which data flows from GA4 to Google Ads and which signal governs each flow.

Get the worksheet →

Check it yourself first

The Tracking Check tests this point along with all the others, in seconds.

Start the Tracking Check →
We run sGTM, the check says "no signal". Why?

The static scan only sees what is in the HTML. If the web container still loads from googletagmanager.com and only the container sends pings to your endpoint, the endpoint appears nowhere in the source. The deep scan still sees it: it watches in the browser where the measurement pings go (finding Tracking architecture, T-06).

Does a Plausible or Matomo subdomain count as server-side?

No. Since September 2026 the check requires a Google measurement or loader path behind the subdomain (gtm.js, gtag/js, /g/collect). A proxy for a cookieless tool is its own finding and no longer triggers the server-side classification.

Is server-side tracking automatically GDPR-compliant?

No. Your own endpoint changes the route of the data, not the legal basis. Whoever keeps measuring through the server after a rejection has the same problem as before, just less visibly. The finding Reject is respected tests exactly that.

The fix, delivered

Wired up in days, not sprints.

Findings from the Tracking Check go into a ranked sequence with effort estimates in the Audit Sprint, every module with an acceptance criterion.