edX

edx.org

Compare

https://edx.org

Scanned Apr 15, 2026 · 40.4s

Your website score is

0/100
Critical

Grade

F0

Banner

Yes

Regulatory Compliance

Multi-regulation overview — click any regulation for details

Technical scan only. A passing score does not equal legal compliance. Consult qualified legal counsel for your jurisdiction.

Tag Leak detected 14 user data leaks before consent on edx.org, including Branch (Advertising Tracker), GA4, Shopify.

Security Headers

5/6 present

Strict-Transport-Security

max-age=31536000

Content-Security-Policy

frame-ancestors 'none'

X-Frame-Options

SAMEORIGIN

X-Content-Type-Options

nosniff

Referrer-Policy

strict-origin-when-cross-origin

Permissions-Policy

Add a Permissions-Policy header to restrict browser features like camera, microphone, and geolocation

Google Consent Mode

V2
70/100
GTM Containers:GTM-543ZGMK2

Consent Parameters

ParameterDefaultUpdated
Ad Storagenot_setgranted
Ad User Datanot_setgranted
Ad Personalizationnot_setgranted
Analytics Storagenot_setgranted
Functionality Storagenot_setgranted
Personalization Storagenot_setgranted
Security Storagenot_setgranted

Issues (1)

No default consent call detected — consent mode may not be initialised correctly

Post-Rejection Audit

Reject Button

Found

Post-Rejection Fires

0 vendors

Consent Mode

Not Detected

GTM Load

1568ms pre-consent

Google Tag Manager(GTM-543ZGMK2)

Loaded 1568ms after page load — before the consent banner was detected (banner appeared at 8432ms). Per a 2022 German court ruling, GTM itself transmits the user's IP to Google pre-consent.

Consent Mode V2: Not Detected

Google Consent Mode was not detected on this site.

✓ gtag('consent', 'update') call detected on rejection

No tracking vendors detected firing after rejection

Consent Record Audit

Issues detected

Consent record stored after interaction

GDPR Art. 7(1)

Found: OptanonConsent (OneTrust)

Record contains timestamp

Art. 7(1)

Timestamp field detected

Record contains consent state

Art. 7(1)

Accept/reject state detected

Record contains consent categories

Art. 7(1)

Consent categories (analytics, marketing, etc.) not found in record

Consent withdrawal mechanism accessible

GDPR Art. 7(3)

No way for users to withdraw consent found on page

No cookie settings link, footer link, or floating consent button was detected. GDPR requires users to withdraw consent as easily as they gave it.

Why this matters

Under GDPR Article 7, controllers must be able to demonstrate that consent was given (Art. 7(1)) and ensure users can withdraw consent at any time, as easily as giving it (Art. 7(3)). Sites with no consent record or no withdrawal mechanism cannot legally rely on consent as a lawful basis.

Tracker categories detected

Advertising1 vendor
Analytics7 vendors
Security1
Functional2 vendors
Tag Management1 vendor
Critical5
GA4
criticalNetworkAnalyticsGA4

GA4 (Google) loaded before consent: Sends pageview and event data to Google Analytics

ID: G-D3KS4KMDT0Host: region1.google-analytics.comFired: 4322ms after load
Branch (Advertising Tracker)
Branch (Advertising Tracker)2 findings

app.link, api2.branch.io

Branch (Advertising Tracker)
criticalNetworkAdvertisingBranch (Advertising Tracker)

Branch (advertising) loaded before consent

Host: app.linkFired: 2891ms after load
Branch (Advertising Tracker)
criticalNetworkAdvertisingBranch (Advertising Tracker)

Branch (advertising) loaded before consent

Host: api2.branch.ioFired: 3763ms after load
criticalCookieAnalyticsShopify

Shopify cookie "_s" set before consent — Shopify analytics.

Cookie: _sDomain: .app.linkRetention: 2 years
criticalConsent Record

No recognizable consent withdrawal mechanism detected — GDPR Article 7(3) requires users can withdraw consent as easily as giving it (cookie settings link or floating button expected)

Warnings10
Google Tag Manager
Google Tag Manager2 findingsID tracked

www.googletagmanager.com

Google Tag Manager
warningNetworkTag ManagementGoogle Tag Manager

Google Tag Manager loads before consent — this is expected and required for GCM v2 to initialise consent defaults before any tags fire

ID: GTM-543ZGMK2Host: www.googletagmanager.comFired: 1351ms after load
Google Tag Manager
warningGTMTag ManagementGoogle Tag Manager

GTM loaded before consent banner — IP address transmitted to Google pre-consent (container: GTM-543ZGMK2)

vendor logo
warningNetwork

Unknown third-party request to sonic-ui.highereducation.com before consent

Host: sonic-ui.highereducation.comFired: 1265ms after load
vendor logo
warningNetwork

Unknown third-party request to www.google.com before consent

Host: www.google.comFired: 2549ms after load
vendor logo
warningNetwork

Unknown third-party request to igsyv1z1xi-dsn.algolia.net before consent

Host: igsyv1z1xi-dsn.algolia.netFired: 5223ms after load
warningStorage

sessionStorage key "test" written before consent

Key: testType: sessionStorageFired: 2845ms after load
warningStorage

localStorage key "NRBA_SESSION" written before consent

Key: NRBA_SESSIONType: localStorageFired: 4056ms after load
warningStorage

sessionStorage key "branch_session" written before consent

Key: branch_sessionType: sessionStorageFired: 4590ms after load
warningStorage

localStorage key "branch_session_first" written before consent

Key: branch_session_firstType: localStorageFired: 4590ms after load
warningStorage

localStorage key "algolia-client-js-5.0.0-IGSYV1Z1XI" written before consent

Key: algolia-client-js-5.0.0-IGSYV1Z1XIType: localStorageFired: 5217ms after load
Info8
Google (Cdn)
Google (Cdn)2 findings

www.gstatic.com, fonts.gstatic.com

Google (Cdn)
infoNetworkGoogle (Cdn)

Google (cdn) loaded before consent

Host: www.gstatic.comFired: 3041ms after load
Google (Cdn)
infoNetworkGoogle (Cdn)

Google (cdn) loaded before consent

Host: fonts.gstatic.comFired: 3589ms after load
OneTrust CMP
infoNetworkConsent MgmtOneTrust CMP

OneTrust CMP (OneTrust) loaded before consent: OneTrust geo-lookup — determines which consent banner to show based on user location

Host: geolocation.onetrust.comFired: 3062ms after load
New Relic
New Relic2 findings

js-agent.newrelic.com, bam.nr-data.net

New Relic
infoNetworkAnalyticsNew Relic

New Relic (New Relic) loaded before consent: New Relic browser monitoring agent

Host: js-agent.newrelic.comFired: 3845ms after load
New Relic
infoNetworkAnalyticsNew Relic

New Relic (New Relic) loaded before consent: New Relic browser data collection endpoint

Host: bam.nr-data.netFired: 4556ms after load
Amazon Web Services
Amazon Web Services2 findings

AWSELB, AWSELBCORS

Amazon Web Services
infoCookieFunctionalAmazon Web Services

Amazon Web Services cookie "AWSELB" set before consent — AWS Classic Load Balancer Cookie: Load Balancing Cookie: Used to map the session to the instance.

Cookie: AWSELBDomain: courses.edx.orgRetention: Session
Amazon Web Services
infoCookieFunctionalAmazon Web Services

Amazon Web Services cookie "AWSELBCORS" set before consent — For continued stickiness support with CORS use cases after the Chromium update, we are creating additional stickiness cookies for each of these duration-based stickiness features named AWSELBCORS (ALB).

Cookie: AWSELBCORSDomain: courses.edx.orgRetention: Session
OneTrust
infoCookieConsent MgmtOneTrust

OneTrust cookie "OptanonConsent" set before consent

Cookie: OptanonConsentDomain: .edx.org
Compliant14
OneTrust
CompliantCookieConsent MgmtOneTrust

OneTrust cookie "OptanonAlertBoxClosed" set correctly after consent

Cookie: OptanonAlertBoxClosedDomain: .edx.org
Segment
Segment4 findings

ajs_anonymous_id, ajs_user_id, ajs_user_traits

Segment
CompliantCookieAnalyticsSegment

Segment cookie "ajs_anonymous_id" set correctly after consent

Cookie: ajs_anonymous_idDomain: .edx.org
Segment
CompliantStorageAnalyticsSegment

Segment (Twilio) wrote "ajs_user_id" to localStorage correctly after consent

Key: ajs_user_idType: localStorageFired: -23878ms after load
Segment
CompliantStorageAnalyticsSegment

Segment (Twilio) wrote "ajs_anonymous_id" to localStorage correctly after consent

Key: ajs_anonymous_idType: localStorageFired: -23877ms after load
Segment
CompliantStorageAnalyticsSegment

Segment (Twilio) wrote "ajs_user_traits" to localStorage correctly after consent

Key: ajs_user_traitsType: localStorageFired: -23125ms after load
Google Analytics
Google Analytics2 findings

_ga, _ga_D3KS4KMDT0

Google Analytics
CompliantCookieAnalyticsGoogle Analytics

Google Analytics cookie "_ga" set correctly after consent

Cookie: _gaDomain: .edx.org
Google Analytics
CompliantCookieAnalyticsGoogle Analytics

Google Analytics cookie "_ga_D3KS4KMDT0" set correctly after consent

Cookie: _ga_D3KS4KMDT0Domain: .edx.org
HubSpot Tracking
HubSpot Tracking4 findings

__hstc, hubspotutk, __hssrc, __hssc

HubSpot Tracking
CompliantCookieAnalyticsHubSpot Tracking

HubSpot Tracking cookie "__hstc" set correctly after consent

Cookie: __hstcDomain: .edx.org
HubSpot Tracking
CompliantCookieAnalyticsHubSpot Tracking

HubSpot Tracking cookie "hubspotutk" set correctly after consent

Cookie: hubspotutkDomain: .edx.org
HubSpot Tracking
CompliantCookieAnalyticsHubSpot Tracking

HubSpot Tracking cookie "__hssrc" set correctly after consent

Cookie: __hssrcDomain: .edx.org
HubSpot Tracking
CompliantCookieAnalyticsHubSpot Tracking

HubSpot Tracking cookie "__hssc" set correctly after consent

Cookie: __hsscDomain: .edx.org
Cloudflare
Cloudflare2 findings

__cf_bm, _cfuvid

Cloudflare
CompliantCookieFunctionalCloudflare

Cloudflare cookie "__cf_bm" set correctly after consent

Cookie: __cf_bmDomain: .hubspot.comRetention: session
Cloudflare
CompliantCookieFunctionalCloudflare

Cloudflare cookie "_cfuvid" set correctly after consent

Cookie: _cfuvidDomain: .hubspot.comRetention: session
FullStory
CompliantStorageAnalyticsFullStory

FullStory (FullStory) wrote "_fs_tab_id" to sessionStorage correctly after consent

Key: _fs_tab_idType: sessionStorageFired: -24336ms after load

Is this your site?

Run a full multi-page scan with monitoring and get detailed remediation steps

Scan edx.org

This audit is based on publicly observable website behavior. To request removal from the index, email support@tagleak.com