GA4 직접유입 많음 원인 해독과 비율 판단 실전 가이드

GA4 획득 보고서를 열면 트래픽 소스 목록 맨 위에 (direct) / (none)이라는 표기가 버티고 있다. 처음 보는 사람은 "왜 소스 이름에 괄호가 붙지?" 싶고, 좀 써본 사람은 "북마크 방문이 이렇게 많을 리 없는데" 싶다. 두 의문 다 맞다. 이 표기 자체가 GA4의 측정 한계를 코드로 표현한 것이고, 그걸 해독해야 숫자를 제대로 읽을 수 있다.
(direct) / (none) 표기가 생기는 원리
GA4는 세션이 시작될 때 두 가지를 확인한다. 브라우저가 전달하는 리퍼러(referrer) 헤더, 그리고 URL에 붙은 UTM 파라미터. 이 두 가지를 조합해 소스(source)와 매체(medium)를 결정한다.
여기서 슬래시를 기준으로 앞이 소스, 뒤가 매체다. google / organic이면 소스=구글, 매체=오가닉 검색. newsletter / email이면 소스=뉴스레터, 매체=이메일. GA4 보고서에서 이 두 값이 항상 쌍으로 뜨는 이유가 이 구조 때문이다.
그런데 리퍼러도 없고 UTM도 없으면? 소스에 (direct), 매체에 (none) — 두 자리 모두 "정보 없음"으로 채운다. 괄호는 GA4가 사용자 정의 값이 아니라 시스템이 자동으로 채운 placeholder임을 표시하는 방식이다. 즉 이 표기는 "직접 방문이 많다"는 뜻이 아니라 "출처 정보가 없어서 분류 불가" 라는 신호다. GA4의 미분류 버킷(catch-all bucket)이라고 보면 정확하다.
구글 공식 문서는 URL 직접 입력·북마크 접속·리퍼러를 전달하지 않는 환경을 (direct)/(none)의 예로 든다. "북마크 방문"은 그 예시 중 하나일 뿐이고, 현실에서는 그보다 훨씬 많은 경로가 이 버킷에 쌓인다.
직접 유입 버킷을 채우는 실제 경로 5가지
앱 내 브라우저
카카오톡, 인스타그램, 페이스북에서 링크를 탭하면 앱 자체 웹뷰(in-app browser)가 열린다. 이 웹뷰는 리퍼러를 외부로 전달하지 않는다. 인스타그램 바이오 링크, 카카오채널 알림톡, 페이스북 포스팅 링크를 통한 방문이 GA4에는 전부 direct/none으로 잡힌다. 소셜 광고를 돌리는데 direct 비율이 유독 높다면 여기를 먼저 의심해야 한다.
HTTPS → HTTP 리다이렉트
보안 규칙상 HTTPS 페이지에서 HTTP 페이지로 이동할 때 브라우저는 리퍼러 헤더를 자동으로 제거한다. 내 사이트가 HTTPS이더라도 중간 리다이렉트 체인에 HTTP 구간이 하나라도 끼어 있으면 출처 정보가 통째로 날아간다. 302 임시 리다이렉트나 메타 리프레시 방식도 리퍼러를 잘라내는 경우가 많다.
UTM 파라미터 누락
이메일 뉴스레터, 문자, 알림톡, QR코드에 UTM을 붙이지 않으면 클릭이 전부 direct/none으로 쌓인다. URL 단축 서비스를 거치면서 파라미터가 벗겨지는 경우도 있고, 오프라인 캠페인 QR이나 제휴사가 배포한 링크처럼 통제 밖의 경로도 여기 해당한다. 운영자 입장에서 가장 빠르게 수정할 수 있는 원인이기도 하다.
다크 소셜
카카오톡 단체 채팅방, 슬랙 DM, 이메일 본문 복사, 디스코드 — 폐쇄형 공유 채널을 묶어 '다크 소셜'이라고 부른다. SparkToro의 연구에 따르면 온라인 콘텐츠 공유의 상당 부분이 이런 채널을 통해 이뤄지며, 이 트래픽의 대부분이 direct/none으로 집계된다. 깊이 있는 가이드 글, 사례 연구, 실무 정리 포스팅일수록 다크 소셜 유입 비중이 높은 편이다.
세션 타임아웃 재유입
GA4 기본 세션 타임아웃은 30분이다. 긴 글을 읽다가 30분 넘게 자리를 비우고 돌아오면 GA4는 새 세션을 시작한다. 이 새 세션엔 리퍼러도 UTM도 없어서 direct/none으로 기록된다. 처음엔 구글 검색에서 온 방문인데 두 번째 세션부터는 직접 유입처럼 잡히는 것이다. GA4는 전환 귀속에서 last non-direct click 로직을 적용해 이전 비직접 세션에 크레딧을 돌려주긴 하지만, 단순 트래픽 집계에서는 이 세션이 direct로 남는다.
GA4 보고서에서 어디를 어떻게 읽는가
원인을 파악했다면 GA4 화면에서 직접 뜯어볼 차례다.
획득 보고서에서의 위치. GA4 왼쪽 메뉴 → 보고서 → 획득 → 트래픽 획득. 여기서 기본 측기준(primary dimension)이 "세션 기본 채널 그룹"으로 설정되어 있으면 Direct라는 행으로 뭉쳐서 보인다. 기준을 세션 소스/매체로 바꾸면 (direct) / (none)이 그대로 노출된다.
탐색 분석에서 파고들기. 트래픽 획득 보고서는 합산값만 준다. 원인 파악은 탐색 분석(Explore) → 자유 형식 보고서에서 해야 한다. 행에 세션 소스/매체를, 열에 랜딩 페이지 + 쿼리 문자열, 측정항목에 세션 수를 넣고, 소스/매체 (direct) / (none) 필터를 걸면 direct 유입이 어느 페이지에 집중되는지 바로 보인다.
진짜 북마크·직접 입력 트래픽이라면 홈(/) 또는 자주 방문하는 대표 페이지가 상위여야 자연스럽다. URL이 긴 특정 콘텐츠 페이지나 이벤트 페이지가 상위에 있다면, 그 링크가 어딘가에서 UTM 없이 배포된 것이다.
기기 유형 교차 확인. 같은 탐색 분석에서 기기 카테고리를 행에 추가하면, 모바일의 direct 비율이 데스크톱보다 현저히 높은지 확인할 수 있다. 모바일 쪽이 두드러진다면 앱 내 브라우저 유입이 측정에서 빠지고 있을 가능성이 크다.
내 블로그의 직접 유입 비율, 어느 선이 비정상인가
콘텐츠·블로그 사이트에서 direct 트래픽이 전체의 25% 내외이면 통상적인 범위다. 브랜드 인지도가 높은 미디어 사이트는 50~70%에 달하기도 하지만, 블로그 기준으로 40%를 넘어선다면 측정 손실을 의심해봐야 한다.
비율만 보고 판단하면 안 되는 이유가 하나 있다. direct/none이 급증한 시점과 캠페인 날짜를 맞춰보는 것이 더 유용하다. 이메일 발송일, 알림톡 발신일, 오프라인 행사 날짜와 direct 급증 구간이 겹치면 해당 채널의 UTM 누락이 원인이다. 수치 하나만 보면 알 수 없고, 날짜를 직접 대조해야 보인다.
2024~2025년 이후로는 AI 답변 플랫폼(ChatGPT, Perplexity)에서 넘어온 클릭도 direct/none에 포함되고 있다. 이 트래픽은 구조적으로 측정이 어렵고, direct 비중이 전반적으로 올라가는 이유 중 하나가 됐다.
수정 가능한 원인부터 순서대로 제거하기
UTM 누락 수정이 가장 빠르다. 발송하는 모든 링크 — 이메일, 문자, 알림톡, 소셜 포스팅, QR코드 — 에 UTM을 붙이는 규칙을 정한다. 구글의 Campaign URL Builder로 간단하게 만들 수 있다. URL 단축 서비스를 쓴다면 단축 전 UTM이 붙은 긴 URL을 단축해야 하고, 파라미터 보존 옵션이 켜져 있는지 확인한다.
앱 내 브라우저 대응은 UTM으로. 웹뷰에서 리퍼러는 차단되더라도 UTM 파라미터는 살아남아 GA4가 채널을 식별한다. 카카오채널, 인스타그램, 페이스북에 올리는 링크에 utm_source, utm_medium, utm_campaign을 반드시 붙이면 된다. 리퍼러 손실을 UTM으로 보완하는 원리다.
HTTPS 강제 및 리다이렉트 정비. 사이트 전체를 HTTPS로 통일하고, HTTP 접근을 HTTPS로 301 리다이렉트 처리한다. 리다이렉트 체인이 있다면 최종 URL로 직접 연결하는 방식으로 단계를 줄이고, 302 임시 리다이렉트 남용을 피한다.
세션 타임아웃 조정은 신중하게. 긴 글을 다루는 블로그라면 GA4 관리 메뉴(Admin → 데이터 스트림 → 태그 설정 구성 → 세션 타임아웃 조정)에서 타임아웃을 30분에서 60분으로 늘리는 것을 고려할 수 있다. 다만 세션 수 전체에 영향을 주므로 변경 전후 시계열을 구분해서 봐야 한다.
UTM 체계를 정비하는 것만으로도 direct가 10~15%p 줄어드는 경우가 흔하다. 목표는 direct를 0으로 만드는 게 아니라 수정 가능한 원인을 하나씩 제거해 측정 가능한 트래픽 비중을 높이는 것이다. 보고서를 읽는 사람이 (direct) / (none) 숫자 앞에서 "이게 왜 이렇게 많지?"가 아니라 "이 중에 UTM 누락분이 얼마나 될까?"를 묻기 시작하면, 분석의 시작점이 달라진다.
참고자료
이 글이 도움이 됐나요?
여러분의 반응이 다음 글의 방향이 돼요


