Skip to content

Commit 0b5c17c

Browse files
committed
feat(analytics): add Google Tag Manager tracking
Integrate GTM (GTM-KP54C7F4) across all site pages to enable web analytics and conversion tracking. The GTM script loads early in <head> to capture page events, with noscript fallback for non-JS visitors.
1 parent 9194a0c commit 0b5c17c

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

app/templates/HomeLayout.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,17 @@ export function HomeLayout({ title, children }: HomeLayoutProps) {
5252
return (
5353
<html lang="en">
5454
<head>
55+
{/* Google Tag Manager */}
56+
<script
57+
dangerouslySetInnerHTML={{
58+
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
59+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
60+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
61+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
62+
})(window,document,'script','dataLayer','GTM-KP54C7F4');`,
63+
}}
64+
/>
65+
{/* End Google Tag Manager */}
5566
<meta charset="UTF-8" />
5667
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
5768
<meta name="description" content={description} />
@@ -81,6 +92,16 @@ export function HomeLayout({ title, children }: HomeLayoutProps) {
8192
<script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
8293
</head>
8394
<body class="page-home">
95+
{/* Google Tag Manager (noscript) */}
96+
<noscript>
97+
<iframe
98+
src="https://www.googletagmanager.com/ns.html?id=GTM-KP54C7F4"
99+
height="0"
100+
width="0"
101+
style="display:none;visibility:hidden"
102+
/>
103+
</noscript>
104+
{/* End Google Tag Manager (noscript) */}
84105
<HomeHeader />
85106
{children}
86107
<SearchModal />

app/templates/Layout.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,17 @@ export function Layout(
7575
return (
7676
<html lang="en">
7777
<head>
78+
{/* Google Tag Manager */}
79+
<script
80+
dangerouslySetInnerHTML={{
81+
__html: `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
82+
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
83+
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
84+
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
85+
})(window,document,'script','dataLayer','GTM-KP54C7F4');`,
86+
}}
87+
/>
88+
{/* End Google Tag Manager */}
7889
<meta charset="UTF-8" />
7990
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8091
<meta name="description" content={pageDescription} />
@@ -119,6 +130,16 @@ export function Layout(
119130
<script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
120131
</head>
121132
<body>
133+
{/* Google Tag Manager (noscript) */}
134+
<noscript>
135+
<iframe
136+
src="https://www.googletagmanager.com/ns.html?id=GTM-KP54C7F4"
137+
height="0"
138+
width="0"
139+
style="display:none;visibility:hidden"
140+
/>
141+
</noscript>
142+
{/* End Google Tag Manager (noscript) */}
122143
<Header />
123144
{children}
124145
<SearchModal />

0 commit comments

Comments
 (0)