From 1103a872821d1e9624073d4b644d771f855c06fe Mon Sep 17 00:00:00 2001 From: Paul Alexandrescu Date: Tue, 15 Jul 2025 22:53:06 -0400 Subject: [PATCH 1/7] feat(GTM): add GTM container with early head injection - Add GTM script injection via for early loading - Include GTM noscript iframe fallback for non-JS users - Configure Reuters GTM container ID (GTM-P9TTSWG2) - Update GA and Chartbeat providers to allow loading via GTM container --- src/components/Analytics/Analytics.svelte | 27 +++++++++++++++++++ .../Analytics/providers/chartbeat.ts | 9 +------ src/components/Analytics/providers/ga.ts | 9 +------ 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/components/Analytics/Analytics.svelte b/src/components/Analytics/Analytics.svelte index 7c85d2aa..da35ded2 100644 --- a/src/components/Analytics/Analytics.svelte +++ b/src/components/Analytics/Analytics.svelte @@ -1,5 +1,10 @@ + + + + + + {@html ``} + + + + + + diff --git a/src/components/Analytics/providers/chartbeat.ts b/src/components/Analytics/providers/chartbeat.ts index aedea3a0..2db1b357 100644 --- a/src/components/Analytics/providers/chartbeat.ts +++ b/src/components/Analytics/providers/chartbeat.ts @@ -5,14 +5,7 @@ const URL = '//static.chartbeat.com/js/chartbeat.js'; const attachScript = () => { // If script is already attached, skip - if (document.querySelector(`script[src="${URL}"]`)) return; - // ... else attach it. - const e = document.createElement('script'); - const n = document.getElementsByTagName('script')[0]; - e.type = 'text/javascript'; - e.async = true; - e.src = URL; - n.parentNode!.insertBefore(e, n); + // loaded via GTM Container }; export default (authors: { name: string }[]) => { diff --git a/src/components/Analytics/providers/ga.ts b/src/components/Analytics/providers/ga.ts index 6bd02d1d..745352ac 100644 --- a/src/components/Analytics/providers/ga.ts +++ b/src/components/Analytics/providers/ga.ts @@ -5,14 +5,7 @@ const URL = `https://www.googletagmanager.com/gtag/js?id=${GOOGLE_TAG_ID}`; const attachScript = () => { // If script is already attached, skip - if (document.querySelector(`script[src="${URL}"]`)) return; - // ... else attach it. - const e = document.createElement('script'); - const n = document.getElementsByTagName('script')[0]; - e.type = 'text/javascript'; - e.async = true; - e.src = URL; - n.parentNode!.insertBefore(e, n); + // loaded via GTM Container }; export default () => { From 574834f0c015dcd9301516c0aef5621b5dc24712 Mon Sep 17 00:00:00 2001 From: Paul Alexandrescu Date: Fri, 18 Jul 2025 00:35:46 -0400 Subject: [PATCH 2/7] ESLint fixes --- src/components/Analytics/Analytics.svelte | 9 +++------ src/components/Analytics/providers/chartbeat.ts | 4 +--- src/components/Analytics/providers/ga.ts | 2 -- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/components/Analytics/Analytics.svelte b/src/components/Analytics/Analytics.svelte index da35ded2..aae1c9b0 100644 --- a/src/components/Analytics/Analytics.svelte +++ b/src/components/Analytics/Analytics.svelte @@ -3,9 +3,7 @@ -`} + {@html `<${'script'}>${GTM_SCRIPT}`} From 20eabe596a1af5397de63db1434d8d9825e8e53d Mon Sep 17 00:00:00 2001 From: hobbes7878 Date: Tue, 16 Sep 2025 08:37:06 +0100 Subject: [PATCH 5/7] cleanup --- src/components/Analytics/Analytics.svelte | 3 ++- src/components/Analytics/providers/chartbeat.ts | 10 ---------- src/components/Analytics/providers/ga.ts | 6 ------ 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/src/components/Analytics/Analytics.svelte b/src/components/Analytics/Analytics.svelte index 0d4ce9c8..75afbe74 100644 --- a/src/components/Analytics/Analytics.svelte +++ b/src/components/Analytics/Analytics.svelte @@ -3,7 +3,7 @@