feat(docs): PostHog loads only with a granting consent answer
DEV-2465 open question 5, option d. Mintlify's built-in integration loaded PostHog unconditionally on all 249 docs pages — a visitor who declined on the homepage was tracked one click later in the docs. The integration key comes out of docs.json; docs/posthog-consent.js loads PostHog directly instead, only when the CookieConsent cookie grants Statistics (or holds Cookiebot's -1 marker), and listens for the consent events so a grant on the docs banner itself loads it too. Trade recorded on the ticket: this bypasses the ph.mintlify.com proxy, so ad blockers reduce docs PostHog volume. Verify after deploy that Mintlify's page CSP allows us-assets.i.posthog.com; if it blocks, fall back to option c.
This commit is contained in:
parent
b7bcb32738
commit
0b9ae00170
|
|
@ -630,9 +630,6 @@
|
|||
}
|
||||
},
|
||||
"integrations": {
|
||||
"posthog": {
|
||||
"apiKey": "phc_1yrzzcgywqXGcerkkI4g7C0YfyPMcAKNOOvGcjTCiUk"
|
||||
},
|
||||
"gtm": {
|
||||
"tagId": "GTM-NSPT9PJF"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
// Loads PostHog only when the CookieConsent cookie grants Statistics; the
|
||||
// cookie is host-scoped, so a landing-page answer covers the docs.
|
||||
;(function () {
|
||||
var KEY = 'phc_1yrzzcgywqXGcerkkI4g7C0YfyPMcAKNOOvGcjTCiUk'
|
||||
var loaded = false
|
||||
|
||||
function granted() {
|
||||
var m = document.cookie.match(/CookieConsent=([^;]*)/)
|
||||
if (!m) return false
|
||||
var v = decodeURIComponent(m[1])
|
||||
// "-1" is Cookiebot's consent-not-required marker.
|
||||
return v === '-1' || /statistics\s*:\s*true/.test(v)
|
||||
}
|
||||
|
||||
function loadPosthog() {
|
||||
if (loaded) return
|
||||
loaded = true
|
||||
var s = document.createElement('script')
|
||||
s.src = 'https://us-assets.i.posthog.com/static/array.js'
|
||||
s.async = true
|
||||
s.onload = function () {
|
||||
window.posthog.init(KEY, {
|
||||
api_host: 'https://us.i.posthog.com',
|
||||
ui_host: 'https://us.posthog.com',
|
||||
cross_subdomain_cookie: true,
|
||||
person_profiles: 'identified_only',
|
||||
})
|
||||
}
|
||||
document.head.appendChild(s)
|
||||
}
|
||||
|
||||
if (granted()) {
|
||||
loadPosthog()
|
||||
return
|
||||
}
|
||||
// A grant made on the docs banner itself (step 2) loads it live.
|
||||
var events = ['CookiebotOnConsentReady', 'CookiebotOnAccept']
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
window.addEventListener(events[i], function () {
|
||||
if (granted()) loadPosthog()
|
||||
})
|
||||
}
|
||||
})()
|
||||
Loading…
Reference in New Issue