gdpr-tracker-script-pre-consent
Tracker script loaded before consent
A third-party tracking script downloads and runs on the very first page load, before the visitor has given consent. Under GDPR and TDDDG that is unlawful processing, even if the script "doesn't do anything yet".
What this means in plain English
Your page contains a <script> tag, or an inline snippet that
creates one at runtime, pointing at a known tracker host. The
script is fetched and executed during initial page load, before
the visitor has seen any consent banner, let alone clicked
anything in it.
Common offenders include googletagmanager.com,
google-analytics.com, connect.facebook.net, static.hotjar.com,
script.crazyegg.com, cdn.mouseflow.com, cdn.heapanalytics.com,
and cdn.matomo.cloud (when not self-hosted). All of these “phone
home” the moment they load. They send the visitor’s IP address,
user agent, page URL, and a unique identifier to the tracker
vendor.
Why it matters
A few facts about the legal weight of this finding.
-
The IP address is personal data. The European Court of Justice confirmed this in Breyer (C-582/14, 2016). Sending an IP to a third country (US for Google, Meta, Hotjar) without consent triggers GDPR Article 6 plus the Schrems II provisions on international transfers.
-
Consent must come first. TDDDG §25 and ePrivacy Article 5(3) require consent before any storage or access on the visitor’s device. A script that fetches a remote resource and reads or writes browser storage on first load is exactly the action they prohibit.
-
“It only loads, it doesn’t track yet” is not a defence. German authorities and courts have consistently held that loading the script is itself the data transfer. The Munich I court (Az. 3 O 17493/20, January 2022) ordered €100 in damages plus an injunction for a single Google Fonts request. Our Google Fonts article covers the same logic in detail.
-
“Anonymous Analytics” still requires consent. Google Analytics 4’s “anonymous” mode still loads the GTM/GA script, still sets cookies unless explicitly disabled, and still sends the IP to Google before any truncation happens. The script load itself requires consent.
How to fix it
Two complementary approaches, depending on how the script gets onto your page.
If the script is in your page template (a hard-coded <script>
tag), move it into your consent platform’s “after consent” hook.
Most platforms ship a wrapper that lets you tag a script with the
relevant vendor name. The platform then replaces it with a
placeholder until consent is given.
If the script is loaded via Google Tag Manager, change every
analytics or marketing tag’s trigger in GTM from “All Pages” to a
custom event the consent platform fires after consent. Cookiebot
fires cookie_consent_update; Borlabs fires
borlabs-cookie-config-loaded; Real Cookie Banner uses
RCB-CookieAcceptedCategory. Document the GTM setup so it
survives platform migrations.
After the fix, verify in a fresh incognito window. Open developer tools, go to the Network tab, decline cookies, reload the page, and filter for the tracker host. There must be zero requests until you click “Accept”.