[Troubleshooting] 리액트(React) & 뷰(Vue) SPA 웹사이트 GA4 페이지뷰 누락 완벽 해결 아키텍처
"웹사이트 트래픽은 엄청난데, 구글 애널리틱스(GA4)를 보면 사용자들이 페이지를 하나만 보고 100% 이탈한 것으로 나옵니다."
리액트(React), 뷰(Vue), 넥스트(Next.js) 등으로 개발된 현대적인 SPA(Single Page Application) 웹사이트를 운영하는 퍼포먼스 마케터들이 가장 먼저 겪는 치명적인 데이터 누수 현상이다. 눈으로 볼 때는 분명히 사용자가 '메인 페이지 → 상품 페이지 → 결제 페이지'로 이동하고 있는데, GA4 대시보드에는 오직 '메인 페이지' 조회수 1건만 찍혀 있다.
이 에러를 방치하면 마케팅 부서는 어떤 페이지가 전환을 일으키는지 전혀 추적할 수 없게 되어 광고비를 허공에 날리게 된다. 본 가이드에서는 SPA 라우팅의 본질적 한계를 해체하고, 구글 태그 매니저(GTM)를 활용해 자바스크립트의 가상 이동을 완벽하게 추적하는 '가상 페이지뷰(Virtual Pageview)' 아키텍처를 단호하게 제시한다.
1단계: 핵심 원인 분석 (물리적 새로고침의 부재)
기존의 전통적인 웹사이트는 링크를 클릭할 때마다 브라우저가 '물리적으로(Physically)' 새로고침되며 구글 애널리틱스 스크립트가 매번 다시 실행되었다. 하지만 SPA는 최초 1회만 사이트를 로드한 뒤, 화면의 껍데기만 자바스크립트로 바꿔치기한다. 브라우저 입장에서는 URL 주소창의 글자만 바뀌었을 뿐 새로고침이 일어나지 않았기 때문에, GA4 스크립트는 "사용자가 계속 첫 페이지에 머물고 있다"고 착각하는 것이다.
2단계: 1차 방어선 - 향상된 측정(Enhanced Measurement)의 한계 인지
GA4 설정에 들어가면 '향상된 측정' 기능 내에 '브라우저 기록 이벤트를 기반으로 한 페이지 변경'을 추적하는 옵션이 기본적으로 켜져 있다. 초보자들은 이것만 믿고 안심하지만, 복잡한 매개변수가 붙거나 비동기(Async) 렌더링이 일어나는 기업용 SPA에서는 이 기본 기능이 30~40%의 데이터를 놓치는 결함을 보인다. 진정한 데이터 무결성을 원한다면 이 옵션을 끄고 GTM을 통한 수동 제어로 넘어가야 한다.
3단계: 완벽한 해결책 - GTM History Change 트리거 구축
구글 태그 매니저(GTM)를 열고 브라우저의 '기록(History)' 상태 변화를 감지하여 강제로 페이지뷰를 쏘아 올리는 트리거를 구축해야 한다.
[1] 트리거 생성: GTM에서 새 트리거를 만들고, 유형을 기록 변경(History Change)으로 선택한다.
[2] 태그 생성: 새 태그를 만들고 Google Analytics: GA4 이벤트를 선택한다. 이벤트 이름에 page_view를 입력한다.
[3] 이벤트 매개변수 강제 주입: SPA는 URL이 바뀌는 속도보다 화면이 렌더링되는 속도가 미세하게 다를 수 있다. 매개변수(Event Parameters)에 page_location(값: {{Page URL}}), page_title(값: {{Page Title}})을 수동으로 매핑해 주어 엉뚱한 페이지명이 기록되는 것을 차단한다.
[4] 태그와 트리거 결합: 생성한 page_view 태그에 1번에서 만든 '기록 변경' 트리거를 연결하고 배포한다.
// 개발자가 직접 DataLayer를 쏘는 가장 확실한 코드 레벨 방어망 (React 예시)
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
function usePageTracking() {
const location = useLocation();
useEffect(() => {
// 페이지 이동이 감지될 때마다 GTM 데이터레이어로 가상 페이지뷰 푸시
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'virtual_page_view',
page_url: window.location.href,
page_title: document.title
});
}, [location]);
}
아키텍트의 시선 (Insight)
SPA 프레임워크가 제공하는 '눈 깜짝할 새의 로딩 속도'와 '부드러운 UX'는 사용자에게 축복이지만, 데이터 엔지니어에게는 통제력을 잃게 만드는 저주가 될 수 있다. 프론트엔드의 화려한 아키텍처 전환 뒤에는 반드시 그에 걸맞은 백엔드 추적 아키텍처의 진화가 수반되어야 한다. History Change 트리거와 DataLayer 푸시를 결합하는 순간, 당신의 데이터 파이프라인은 속도와 무결성이라는 두 마리 토끼를 모두 잡게 될 것이다.
댓글
댓글 쓰기