An audit of, and a remediation plan for, the visitor tracking, OneTrust Cookie Consent, Google Tag Manager, and Google Consent Mode v2 implementations on `glg.com` and `glginc.cn`

The client's problem

Audit and remediate the cookie consent implementation across our company website, including a China-specific web property.

Audit current OneTrust implementation

  • Review OneTrust configuration and consent experience across the web properties
  • Review consent banners, preference centers, geolocation rules and regional experiences
  • Validate cookie categorization and consent groups
  • Review Global Privacy Control / opt-out configurations where applicable
  • Validate actual browser behavior against the intended OneTrust configuration, including cookies, scripts and network requests
  • Identify inconsistencies or gaps between OneTrust configuration and actual website behavior
  • Identify any consent-management dependencies or implementation issues that require website/development changes

Regional privacy and consent review

Assess whether the implementation appropriately supports relevant requirements across major regions, and applicable laws such as:

  • GDPR / EU, LGPD, CCPA, US strict states
  • China privacy requirements
  • Other regional consent requirements relevant to a global B2B website

We are looking for someone who can translate regulatory requirements into practical website consent-management configurations, while identifying areas that should be escalated to our legal/privacy team for interpretation.

Google Tag Manager & tracking audit

  • Review GTM tags, triggers and consent settings
  • Identify non-essential tags firing before appropriate consent
  • Review Google Consent Mode v2 implementation
  • Validate consent signals passed to Google Analytics, advertising platforms and other marketing technologies
  • Identify tags or scripts implemented outside GTM that may bypass consent
  • Test consent behavior across relevant geographic regions and consent choices

Questions

  • If OneTrust and GTM appear correctly configured, but you discover a cookie or tracking request firing before consent, how would you troubleshoot it and identify where it's coming from?
  • How you would audit and validate the Google Consent Mode v2 consent signals (analytics_storage, ad_storage, ad_user_data, ad_personalization) and make corrections if needed?

My analysis

1

  • glg.com: Google Analytics and Google Ads track visitors prior to consent due to §4
  • 3 scripts in Webflow bypass OneTrust entirely due to §5.
  • glginc.cn violates China PIPL due to §8.

2

glg.com fails consent withdrawal: OneTrust does not delete cookies after rejection (§6).

3

glg.com ignores the Global Privacy Control signal (§7).

4

glg.com initializes Google Tag Manager (GTM-MWCHK79) before OneTrust determines geolocation and applies rules: gtag('consent', 'default', ...) is absent from the <head> before GTM.

4.1

window.google_tag_data.ics confirms that Google tags execute with:

{
    "usedDefault": false,
    "usedImplicit": true
}

4.2

Due to §4.1, Google Analytics (G-7FTWEZ93WS) and Google Ads (AW-662853930) write persistent cookies (_ga, _ga_7FTWEZ93WS, _gcl_au) and send network beacons upon page load before consent.

4.3

Even under German IP (GDPR + LGDP Audience), outgoing Google hits transmit:
gcd=13l3l3l2l1l1 where l indicates that consent is «unspecified» by default → violates GDPR Art. 4(11) and ePrivacy Directive Art. 5(3).
developers.google.com/tag-platform/security/guides/consent#default-consent

4.4

When OneTrust later sends a consent update, the Google tag engine marks it "wasSetLate": true.
support.google.com/analytics/answer/14275483?hl=en#check

5

3 scripts embedded in Webflow templates bypass OneTrust:

5.1

Intellimize (https://cdn.intellimize.co/snippet/117279289.js): lacks OneTrust blocking attributes (type="text/plain" class="optanon-category-C0004"), immediately transmitting user telemetry to:

  • https://api.intellimize.co/prediction/117279289
  • https://log.intellimize.co/logger

5.2

Salesforce Customer 360 / Data 360 (https://cdn.c360a.salesforce.com/beacon/c360a/741eb827-80ca-47ba-b723-4cdef39de9d0/scripts/c360a.min.js): sets the _sfid_836c cookie on page load and streams events to *.c360a.salesforce.com.

5.3

Marketo Munchkin: executes Munchkin.init("561-YYM-489") unconditionally, creating the _mkto_trk cookie.

6

Clicking «Reject All Cookies» on glg.com does not delete tracking cookies:

6.1

OneTrust does not delete cookies out of the box; cookie deletion logic in OptanonWrapper is not implemented → _ga, _ga_7FTWEZ93WS, _gcl_au remain in browser storage.
my.onetrust.com/s/article/UUID-b2d72003-853b-e75b-e337-c6d26ea327eb

6.2

Microsoft Clarity (https://t.clarity.ms/collect) and Salesforce Data 360 continue streaming session telemetry after rejection.

7

glg.com ignores Global Privacy Control: when navigator.globalPrivacyControl = true, OneTrust sets isGpcEnabled=0&browserGpcFlag=0 in the OptanonConsent cookie → violates 11 CCR § 7025 (CCPA/CPRA).

8

glginc.cn operates on a separate stack (Gridsome, GTM-KKW3RM3) and violates China PIPL:

8.1

OneTrust is frozen on version 6.27.0 (December 20, 2021).

8.2

There is no rule for China in OneTrust: Chinese visitors fall into Global (CN), where all cookie categories (C0001–C0005) are active by default (opt-out).

8.3

The banner (zh.json) has no reject button (AlertRejectCookiesText: undefined) → violates PIPL Art. 14 (mandatory prior opt-in consent).

8.4

OptanonWrapper() is an empty stub:

function OptanonWrapper() { }

8.5

Baidu Tongji (https://hm.baidu.com/hm.js?c024633369ff38507add2a8a57964d14): loaded with standard type="text/javascript", firing pre-consent because C0004 is active by default in OneTrust.

8.6

Dead Universal Analytics (UA-47764303-4) is hardcoded in app.72a39ae5.js and sends failing collection requests to https://google-analytics.com/j/collect?v=1.

8.7

LinkedIn Insight Tag tries to connect to https://px.ads.linkedin.cn/, fails with SSL/CORS errors, and loops LinkedIn's error tracking beacon (insight_tag_errors.gif).

9. «If OneTrust and GTM appear correctly configured, but you discover a cookie or tracking request firing before consent, how would you troubleshoot it and identify where it's coming from?»

9.1

Check the «Initiator» call stack in Chrome DevTools «Network» tab: trace whether the request originates from gtm.js (a GTM tag) or a standalone script (CMS template code).

9.2

Check DOM: verify whether script tags have OneTrust blocking attributes (type="text/plain" class="optanon-category-C000X").
Standard type="text/javascript" scripts execute synchronously during HTML parsing before OneTrust can block them.

9.3

Check GTM Preview: inspect Consent Initialization vs gtm.js. Verify whether tags lack consent checks or trigger on All Pages instead of OneTrustGroupsUpdated.

9.4

Check runtime: inspect window.OnetrustActiveGroups and OptanonConsent cookie.
If groups are 1 on first load, the geolocation rule is set to opt-out instead of opt-in.
Check window.google_tag_data.ics for missing default command.

9.5. Where it is coming from on your websites

9.5.1

glg.com: Intellimize (snippet/117279289.js) and Salesforce (c360a.min.js) are hardcoded in Webflow outside GTM; Google tags inside GTM-MWCHK79 fire because gtag('consent', 'default') is missing before GTM.

9.5.2

glginc.cn: Baidu Tongji fires because C0004 is active by default in OneTrust's Global (CN) rule.

10. «How you would audit and validate the Google Consent Mode v2 consent signals (analytics_storage, ad_storage, ad_user_data, ad_personalization) and make corrections if needed?»

10.1. Audit & validation

10.1.1

Check window.google_tag_data.ics: ensure usedDefault is true, usedImplicit is false, and wasSetLate is false.

10.1.2

Decode the gcd parameter in network requests to analytics.google.com/g/collect and googleads.g.doubleclick.net:

  • Prior to consent (opt-in): gcd=13p3p3p3p1l1 (denied by default, cookieless pings).
  • After «Accept All»: gcd=13r3r3r3r1l1 (granted by update).
  • After «Reject All»: gcd=13m3m3m3m1l1 (denied by update).

glg.com currently sends gcd=13l3l3l2l1l1 (unspecified fallback, "wasSetLate": true).

10.1.3

Validate states in GTM Tag Assistant across gtm.init_consent and OneTrustGroupsUpdated.

10.2. Corrections for your websites

10.2.1

Add the default snippet at the very top of <head> before GTM:

window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('consent', 'default', {
	'analytics_storage': 'denied',
	'ad_storage': 'denied',
	'ad_user_data': 'denied',
	'ad_personalization': 'denied',
	'wait_for_update': 500
});

10.2.2

Implement OptanonWrapper to push consent updates and the OneTrustGroupsUpdated event:

function OptanonWrapper() {
	var activeGroups = window.OnetrustActiveGroups || '';
	var a = activeGroups.indexOf(',C0002,') !== -1;
	var m = activeGroups.indexOf(',C0004,') !== -1;
	gtag('consent', 'update', {
		'analytics_storage': a ? 'granted' : 'denied',
		'ad_storage': m ? 'granted' : 'denied',
		'ad_user_data': m ? 'granted' : 'denied',
		'ad_personalization': m ? 'granted' : 'denied'
	});
	window.dataLayer.push({ event: 'OneTrustGroupsUpdated' });
}

10.2.3

In GTM-MWCHK79 and GTM-KKW3RM3, route non-Google tags through OneTrustGroupsUpdated with category checks.

10.2.4

Add OneTrust blocking classes to Webflow custom code (Intellimize, Salesforce).

10.2.5

On glginc.cn, configure a PIPL opt-in rule with a reject button, remove dead Universal Analytics, and fix the LinkedIn endpoint.