From 6e36f1a2791f340f7c1899f8d86397db9ded62a2 Mon Sep 17 00:00:00 2001 From: soyeong Date: Sat, 22 Nov 2025 23:06:09 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20GTM=20dataLayer=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20(react-ga4=20=EC=A0=9C=EA=B1=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/analytics/ga.ts | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/analytics/ga.ts b/src/analytics/ga.ts index c4d5326..1cceced 100644 --- a/src/analytics/ga.ts +++ b/src/analytics/ga.ts @@ -1,4 +1,9 @@ -import ReactGA from 'react-ga4'; +// GTM dataLayer를 직접 사용하는 방식으로 변경 +declare global { + interface Window { + dataLayer: any[]; + } +} let isInitialized = false; @@ -8,7 +13,10 @@ export const initGA = () => { return; } - ReactGA.initialize('G-MFJ749RKHH'); // 측정 ID + // dataLayer 초기화 확인 + if (typeof window !== 'undefined') { + window.dataLayer = window.dataLayer || []; + } isInitialized = true; }; @@ -17,10 +25,16 @@ export const trackPageView = (path: string) => { console.warn('GA4가 초기화되지 않았습니다. initGA()를 먼저 호출하세요.'); return; } - ReactGA.send({ hitType: 'pageview', page: path }); + + if (typeof window !== 'undefined' && window.dataLayer) { + window.dataLayer.push({ + event: 'page_view', + page_path: path, + }); + } }; -// GA4 이벤트 추적 함수 +// GA4 이벤트 추적 함수 (GTM dataLayer 사용) export const trackEvent = ( eventName: string, parameters?: Record, @@ -29,7 +43,13 @@ export const trackEvent = ( console.warn('GA4가 초기화되지 않았습니다. initGA()를 먼저 호출하세요.'); return; } - ReactGA.event(eventName, parameters); + + if (typeof window !== 'undefined' && window.dataLayer) { + window.dataLayer.push({ + event: eventName, + ...parameters, + }); + } }; // 검색 이벤트