Google Analytics 4(GA4)로 마이그레이션했는데 설치 며칠이 지나도 데이터가 대시보드에 안 뜬다. 추적 코드를 복사해서 <head>에 붙였고, GTM을 통해 설정했는데도 왜 사용자 데이터는 0명으로만 표시될까. 많은 개발자들이 이 문제를 경험하지만, 정확히 어디가 막혀있는지 찾기가 어렵다. 이번에는 GA4 데이터 수집이 실패하는 주요 원인들을 추적 ID 검증부터 실제 이벤트 송신 테스트까지 완벽하게 정리해서 소개하겠다.
GA4가 데이터를 수집하려면 먼저 추적 코드가 페이지에 올바르게 로드되어야 한다. 그 다음 사용자 행동(페이지뷰, 클릭, 스크롤 등)이 이벤트로 변환되어 Google 서버로 전송되어야 한다. 마지막으로 Google 서버가 이 이벤트들을 수신해서 대시보드에 집계하는 과정까지 모두 정상 작동해야 한다.
이 과정 중 하나라도 막혀있으면 "활성 사용자 0명" 현상이 발생한다. 가장 흔한 원인은 추적 ID 잘못 입력, 데이터 필터 설정으로 인한 필터링, 또는 크로스도메인 추적 미설정이다.
GA4 대시보드에서 설정 > 속성 > 데이터 수집 및 수정 > 데이터 스트림을 클릭한다. 여기서 웹 스트림을 선택하면 "측정 ID"와 "Google 태그(gtag.js) 설정 코드"가 보인다. 이 측정 ID가 당신의 추적 코드에 정확히 입력되어 있는지 확인해야 한다.
✗ 잘못된 코드
<!-- 틀린 측정 ID 사용 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-123456789-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-123456789-1'); <!-- Universal Analytics ID 사용함 -->
</script>
✓ 올바른 코드
<!-- GA4 측정 ID 올바르게 사용 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX'); <!-- GA4 측정 ID 사용 -->
</script>
GA4 ID는 반드시 "G-"로 시작해야 한다. Universal Analytics의 "UA-"로 시작하는 ID를 넣으면 절대 작동하지 않는다.
추적 코드가 로드되고 이벤트가 제대로 전송되는지 확인하려면 Network 탭을 확인하면 된다. 페이지를 새로고침한 후 Network 탭을 열고 "collect"로 검색해본다.
# Network 탭에서 이렇게 필터링하면 Google Analytics 요청이 보임
collect
GA4는 /g/collect 엔드포인트로 이벤트를 전송한다. 이 요청이 Status 204로 성공하면 Google이 데이터를 받은 것이다.
✗ 문제 신호
- collect 요청이 아예 안 보임 → 추적 코드가 로드 안 됨
- 요청이 Status 400/401로 실패함 → 측정 ID 오류 또는 권한 문제
- 요청이 있지만 Status 204가 아님 → 서버 처리 중 오류 발생
✓ 정상 신호
Network 탭에서 https://www.google-analytics.com/g/collect?... 형태의 요청이 Status 204 No Content로 여러 건 보인다면 정상이다.
코드는 정상인데 데이터가 안 보인다면 GA4의 데이터 필터 때문일 수 있다. 설정 > 데이터 수집 및 수정 > 데이터 필터를 확인해본다.
여기서 실수하기 쉬운 부분은 내부 트래픽 필터다. 개발 중 localhost나 내 사무실 IP에서 발생한 트래픽이 모두 필터링되면 테스트 데이터도 안 보인다.
✗ 잘못된 필터 설정
내부 트래픽 필터에 "127.0.0.1" 또는 "localhost"를 호스트명으로 정의해뒀는데, 조건을 "필터 데이터 포함"으로 설정하면 그 트래픽이 대시보드에서 숨겨진다.
✓ 올바른 필터 설정
내부 트래픽 필터는 "필터 데이터 제외"로 설정해야 한다. 그리고 프로덕션 환경에서만 활성화하고, 개발/테스트 환경에서는 비활성화한다.
GA4는 기본적으로 사용자 데이터 보존 기간이 14개월이다. 하지만 설정에서 2개월로 설정해놨다면, 오래된 데이터는 자동으로 삭제된다.
설정 > 데이터 설정 > 데이터 보존을 확인한다. 테스트 중이라면 최대값인 14개월로 설정해두는 것이 좋다.
대시보드는 최대 24시간의 지연이 있을 수 있다. 하지만 GA4의 실시간 보고서는 페이지뷰를 즉시 표시한다. 보고서 > 실시간을 클릭해서 지금 이 순간 내 사이트의 활동을 확인할 수 있다.
실시간 보고서에 사용자가 보이면 추적 코드는 정상이고, 대시보드에 데이터가 집계되는 중이다. 몇 시간 후에 일반 보고서에도 데이터가 나타날 것이다.
반대로 실시간 보고서에도 사용자가 안 보인다면 추적 코드 자체가 작동 안 하는 것이므로, 1단계부터 다시 확인해야 한다.
Google이 제공하는 Tag Assistant(구 Tag Manager 콘솔) 크롬 확장 프로그램을 설치하면 더 자세한 추적 정보를 볼 수 있다. 크롬 웹스토어에서 "Tag Assistant by Google Tag Manager"를 검색해서 설치한다.
설치 후 페이지에서 Tag Assistant 아이콘을 클릭하면 연결된 GA4 계정, 측정 ID, 전송된 이벤트 목록을 모두 볼 수 있다.
여기서 확인할 사항
- Configuration 탭에서 GA4 측정 ID가 올바르게 인식되는가
- Events 탭에서 page_view, session_start 이벤트가 발생하는가
- 각 이벤트의 "user_id" 또는 "client_id"가 정상인가
여러 도메인에서 사용자를 추적하려면 크로스도메인 설정이 필수다. 예를 들어 example.com과 store.example.com 사이를 이동할 때 같은 세션으로 인식하려면 다음과 같이 설정한다.
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX', {
'allow_google_signals': true,
'allow_ad_personalization_signals': true,
'linker': {
'domains': ['example.com', 'store.example.com']
}
});
</script>
이렇게 설정하면 사용자가 두 도메인 사이를 이동할 때 Google이 같은 사용자로 인식한다.
실수 1. 추적 코드를 여러 번 설치했을 때
GTM으로도 GA4 태그를 설정하고, 동시에 HTML에도 직접 gtag 코드를 붙여넣으면 이벤트가 중복으로 전송된다. 둘 중 하나만 사용하되, GTM을 사용한다면 HTML 코드는 제거해야 한다.
실수 2. 개발자 도구 Console에서 에러를 무시했을 때
Console 탭을 확인하면 "Uncaught ReferenceError: gtag is not defined" 같은 에러가 있을 수 있다. 이는 보통 gtag 함수 정의 전에 gtag()를 호출했다는 뜻이다. gtag 스크립트가 <head>의 가장 위에 있는지 확인하자.
실수 3. 개인정보 보호 도구나 광고 차단 확장 프로그램이 GA 차단했을 때
개발자 PC에서는 uBlock Origin 같은 광고 차단 확장이 GA 요청을 막을 수 있다. 프로덕션 서버에서는 정상 작동하는지 다른 기기에서 테스트해봐야 한다.
GA4 데이터 수집은 추적 ID 검증부터 시작한다. 작은 오타 하나가 며칠간의 답답함을 만든다는 점을 잊지 말자. 이 글의 "실시간 보고서" 확인과 "Tag Assistant" 활용법을 차례로 따라가면, 대부분의 GA4 데이터 미수집 문제는 30분 내에 해결할 수 있다. 추적 코드 설치 후에는 반드시 실시간 보고서에서 사용자가 보이는지 먼저 확인하고, 그 다음에 일반 보고서가 업데이트되기를 기다리는 습관을 들이자.