GA4 광고 세션이 광고 클릭보다 많으면 왜 문제인가?
GA4 광고 세션 수는 광고 계정이 말하는 클릭 수와 같은 숫자가 아닙니다. 저희 표에서 구글 광고 클릭은 19건이었는데 GA4가 구글 유료 세션으로 센 숫자는 31건이었고, 이 차이를 놓친 채 세션 단위 지표를 읽다가 잘못된 결론까지 갔습니다. 이 글은 그 결론을 철회한 과정과, 철회하면서 도구에 무엇을 넣었는지를 적습니다.
상황은 이랬습니다. 내부 분석 문서에 “모바일 붕괴”라는 판독이 적혀 있었습니다. 데스크톱 방문자는 평균 153초 머무는데 모바일 방문자는 9초 만에 떠난다는 표였습니다. 17배 차이입니다. 원인이 이만큼 선명하면 고칠 곳도 선명해 보입니다. 모바일 화면 로딩을 손보면 됩니다.
광고를 돌리는 중소기업이라면 비슷한 순간을 만납니다. 분석 화면에서 기기별로 자르면 모바일 한 칸만 유난히 나쁘게 나오고, 개발자나 제작사에게 모바일 최적화를 요청하게 됩니다. 그 요청에 쓰는 돈이 맞는 곳에 가는지는 표 한 장에서 갈립니다. 저희는 수리를 시작하기 전에 표를 다시 만들어 보다가 판독이 무너지는 장면을 봤습니다.
처음 잰 숫자는 어떻게 나왔고 믿을 만했나?
처음 표는 그때그때 짠 임시 쿼리로 뽑은 표였습니다. 저장된 스크립트가 없어서 같은 수치를 다시 만들 방법이 저장소 안에 없었습니다. 그래서 가장 먼저 한 일은 결론을 고치지 않고 표를 재현하는 도구를 만든 일이었습니다. 착지 페이지와 기기별로 세션, 참여 세션, 이탈률, 평균 체류시간, 화면 조회수를 한 번에 내는 조회 옵션을 스크립트에 넣었습니다(풀 리퀘스트 #207).
재현 결과는 깔끔했습니다. 라이브 데이터로 30일 조회를 돌리자 원래 표의 6줄이 전부 같은 값으로 다시 나왔습니다. 그래서 첫 결론은 이렇습니다. 숫자 자체는 틀리지 않았습니다. 데스크톱 153초 대 모바일 9초, 17배라는 값은 GA4에서 실제로 그렇게 나옵니다.
여기서 멈췄다면 저희는 모바일 수리를 시작했을 겁니다. 숫자가 다시 나왔으니 판독도 맞다고 느끼기 쉽습니다. 하지만 재현은 계산이 맞다는 증거일 뿐, 그 계산에 들어간 표본이 무엇이었는지는 말해 주지 않습니다. 이어서 확인한 대상은 이 60세션이 어디서 왔느냐였습니다.
- **원래 판독**: 데스크톱 153초 대 모바일 9초, 17배 차이라서 모바일이 붕괴했다
- **재현 여부**: 조회 도구로 6줄 전부 같은 값이 다시 나왔다
- **아직 안 본 것**: 이 60세션에 어떤 광고 네트워크가 섞여 있는가
조회 도구는 숫자를 어떻게 세도록 만들었나?
표를 재현하는 김에 평균과 비율 옆에 세션 단위의 원자 지표를 같이 내도록 했습니다. 평균 체류시간과 이탈률은 둘 다 가공된 값이라서, 그 값이 무엇으로 만들어졌는지 분자와 분모를 같이 봐야 합니다. 세 지표를 추가했고 각각 맡은 역할이 다릅니다.
- **참여 세션 수**: 이탈률의 분자입니다. GA4의 참여 판정은 10초 이상 머묾, 화면 2번 이상 조회, 전환 1번 이상 가운데 하나만 만족해도 참여로 칩니다. 그래서 이탈률은 비율처럼 보이지만 사실 세션 하나하나의 이진 결과를 모은 값입니다.
- **화면 조회수**: 10초 타이머와 별개로 움직이는 참여 경로입니다. 모바일에서 앱이 백그라운드로 넘어가면 마지막 참여 신호가 사라질 수 있지만 화면 조회수는 남습니다. 체류시간 붕괴가 측정 오류인지 진짜 이탈인지 가르는 대조 축입니다.
- **사용자 참여 시간 총량**: 평균의 분자입니다. 평균 9초가 모든 세션이 고르게 9초라는 뜻인지, 한두 세션에 끌려간 값인지 이 총량을 보면 드러납니다.
이 지표들을 넣은 이유는 모바일 9초가 진짜 이탈인지 측정 장치의 아티팩트인지 가르기 위해서였습니다. 결과적으로 그 질문보다 앞선 문제, 곧 이 칸이 몇 건 위에 서 있는지가 판독을 깼습니다. 측정 지표를 정교하게 만들어도 표본이 비어 있으면 정교함이 쓸모없다는 점을 이때 배웠습니다.
처음 세운 가설은 무엇이었나?
처음 가설은 단순했습니다. 모바일에서 페이지를 처음 불러올 때 느려서 방문자가 떠난다는 뜻입니다. 이 가설을 H1(콜드 로드)이라고 불렀습니다. 같은 문서에는 H2도 있었습니다. 광고 키워드와 페이지 첫 제목이 어긋나서 클릭한 사람이 바로 나간다는 가설입니다.
H1에 기운 이유는 표가 모바일만 가리키고 있었기 때문입니다. 같은 페이지, 같은 광고인데 기기만 달라서 결과가 17배 벌어졌으니 기기에 있는 무언가가 범인이라고 읽었습니다. 기기에 있는 원인이라면 렌더링 속도, 이미지 크기, 스크립트 로딩 같은 후보가 바로 나옵니다.
이 가설에는 구조적 약점이 하나 있었습니다. 기기라는 축 하나로만 자른 표였다는 점입니다. 광고는 구글에서도 나가고 네이버에서도 나가는데, 표에서는 두 네트워크가 모바일이라는 한 칸에 같이 들어가 있었습니다. 이 점이 가설을 무너뜨린 지점입니다.
소스로 다시 자르면 모바일은 정말 붕괴했나?
붕괴하지 않았습니다. 표본 60세션은 구글 유료 31세션과 네이버 유료 29세션을 합친 표본이었습니다. 유입 소스를 축에 추가해서 다시 자르자 같은 모바일 안에서 두 칸의 방향이 정반대로 나왔습니다.

구글 모바일은 이탈률 93%에 평균 체류 1초였습니다. 네이버 모바일은 이탈률 27%에 평균 체류 51초였고, 이 값은 네 칸(두 소스 곱하기 두 기기) 가운데 가장 낮은 이탈률이었습니다. 같은 페이지, 같은 모바일 기기인데 네이버에서 온 사람은 가장 오래 머물렀습니다.
이 대비가 H1을 약하게 만듭니다. 모바일에서 페이지가 느려서 떠난다면 네이버 모바일도 같이 나빠야 합니다. 그런데 네이버 모바일은 정상이었으므로 페이지 자체의 모바일 로딩은 주된 원인일 수 없습니다. 두 값을 평균 내면 마치 모바일 전체가 나쁜 듯 보입니다. 정반대 신호 둘의 평균이 “모바일 붕괴”로 읽힌 것입니다.
이 현상은 GA4 이탈률 기기별 비교가 틀린 이유에서 이탈률 계산 쪽을 따로 풀어 썼습니다. 이 글은 그 뒤에 이어진 확인, 곧 붕괴한 칸이 도대체 몇 건의 클릭 위에 서 있는지를 봅니다.
다른 확인 중 두 판독이 더 무너진 이유는?
기기 축이 틀렸다고 확인한 뒤 나머지 판독도 같은 기준으로 다시 봤습니다. 광고 계정은 사람과 도구가 계속 바꾸는 상태라서, 이전 세션이 적어 둔 판단이 지금도 맞는지 라이브 계정에서 다시 조회했습니다. 두 건이 반증됐고 둘 다 같은 종류의 실수였습니다.
첫 번째는 주소 이동입니다. 직전 세션은 광고 게시 스크립트에 www로 시작하는 최종 주소가 상수로 들어 있는 모습을 보고 “모든 유료 클릭이 308 이동을 한 번 더 탄다”고 판정했습니다. 그런데 구글 광고 API로 계정을 직접 조회하자 켜져 있는 광고의 최종 주소는 전부 ai로 시작하는 주소로 바로 연결되어 있었습니다. www 주소를 가리키는 광고는 전부 일시중지 상태였습니다. 스크립트의 상수는 계정에 반영되지 않은 값이었습니다.
두 번째는 기간입니다. 표의 창을 “30일 데이터”라고 불렀지만 실제로는 30일치 노출이 아니었습니다. 구글 광고는 클릭이 발생한 날이 3일뿐이었고, 그 3일 동안 클릭 19건에 광고비 136,294원이 나갔습니다. 광고그룹별로는 홈페이지 제작 10건, AI 챗봇 9건입니다. 네이버 쪽은 7월 17일부터 29일까지였습니다. 마지막 유료 세션은 7월 29일이었고, 이 조사를 하던 8월 5일 기준으로 7일 연속 유료 유입이 0이었습니다.
표에 붙은 날짜 범위와 실제로 데이터가 들어 있는 날은 달랐습니다. 이 둘을 구분하지 않으면 사흘치 데이터가 한 달치 추세처럼 읽힙니다. 광고 계정은 사람과 도구가 바꾸는 상태라서, 소스 상수를 인용해 단정하지 말고 인용하는 순간 다시 조회해야 합니다.
진짜 원인은 무엇이었나?
진짜 원인은 모바일 성능이 아니라 표본입니다. 붕괴한 칸은 구글 모바일 한 칸이었고, 그 칸은 구글 광고 실클릭 8건 위에 서 있었습니다. 8건의 이탈률이 93%라는 말은 8명 가운데 대부분이 바로 떠났다는 뜻일 뿐, 구글에서 오는 모바일 방문자 전체의 성향이라고 말할 수 있는 숫자가 아닙니다.

여기에 부수 발견이 더해집니다. 구글 광고 계정이 말하는 클릭은 19건인데 GA4의 구글 유료 세션은 31건이었습니다. 세션이 클릭의 1.6배입니다. 모바일만 보면 8건에서 15건으로 1.9배였습니다. 광고 한 번 클릭하면 세션이 한 번 생긴다고 가정하면 이 숫자는 나올 수 없습니다.
(추정) GA4는 광고 클릭 뒤 일정 기간 안에 같은 사람이 다시 들어오면 그 방문에도 같은 소스를 붙입니다. 그러면 광고를 클릭한 적 없는 재방문까지 유료 세션으로 집계될 수 있습니다. 그런 재방문은 짧게 머물다 나가는 경우가 많아 1초 이탈로 찍히고, 구글 모바일 칸의 이탈률을 한 번 더 끌어올립니다. 다만 세션 하나하나가 어떤 클릭에서 왔는지는 확인하지 못했습니다. 이 부분은 추정으로 남겨 둡니다.
정리하면 원인이 겹쳐 있었습니다. 기기 축 하나로만 잘라서 서로 다른 네트워크가 섞였고, 그 결과 붕괴로 읽힌 칸은 실클릭 8건뿐이었고, 세션이 클릭보다 많아 파편 세션까지 섞였을 가능성이 있었습니다. 어느 한 가지만 확인해도 판독을 철회해야 하는 조합입니다.
철회한 뒤 무엇을 고쳤나?
판독을 철회하는 데서 끝내지 않고 같은 실수가 다시 생기지 않도록 도구를 바꿨습니다. 변경은 세 가지입니다.
- **소스 분리 옵션 추가**: 조회 스크립트에 `--by-source`를 넣어 유입 소스를 축에 포함할 수 있게 했습니다(풀 리퀘스트 #208). 이 옵션이 있으면 구글과 네이버의 모바일이 한 칸에 섞이지 않습니다.
- **기기 대조는 소스 안에서만**: 기기끼리 비교하는 표는 같은 소스 안에서만 나오게 강제했습니다. 구글 데스크톱과 네이버 모바일을 비교하는 일이 구조상 불가능해집니다.
- **표본 하한 경고**: 세션이 30세션 미만인 칸에는 비율 판정을 하지 않고 경고를 붙입니다. 이 하한은 앞서 세 번의 신뢰 장치 시도와 유료 모바일 테스트가 전부 표본 부족으로 판정 불가로 끝난 일에서 나왔습니다.
세 변경은 같은 원칙에서 나왔습니다. 표를 읽는 사람이 오독하지 않도록 도구 쪽에서 먼저 막는다는 원칙입니다. 호스트 범위가 그 예입니다. 여러 사이트를 합산한 리포트는 합산이라고 밝히고, 어느 호스트가 얼마나 섞였는지 수치로 같이 냅니다. 표를 만든 사람이 주의하면 된다는 방식은 이번처럼 표를 처음 만든 사람과 읽는 사람이 다를 때 작동하지 않습니다.
도구로 만든 이유가 있습니다. 소스 분리를 임시 쿼리로만 확인하고 끝내는 선택지도 있었지만 기각했습니다. 처음 표가 재현되지 않았던 이유가 바로 임시 쿼리였기 때문입니다. 같은 구조를 한 번 더 만들면 다음 사람이 같은 자리에서 다시 틀립니다.
모바일 성능 수리도 기각했습니다. 표를 그대로 두고 모바일 수리에 착수하는 안은 잘못된 축을 고치는 일이라 이전 시도들의 실패를 그대로 되풀이합니다. 고칠 대상을 다시 찾는 일이 먼저였습니다.
표에 섞이는 내부 접속과 자동 접속은 얼마나 됐나?
같은 도구로 조회를 반복하면서 표본을 오염시키는 다른 요인도 차례로 드러났습니다. 모두 소스 분리와 같은 종류, 곧 표에 들어간 줄 가운데 광고 방문자가 아닌 것이 섞여 있다는 문제였습니다. 철회 이후에 추가한 것들이라 시간 순서대로 적습니다.
첫째는 운영자 본인의 접속입니다. 최근 3일을 실측했더니 운영자가 확인하려고 들어온 김포시 데스크톱 접속이 25세션, 화면 조회 95건, 참여 시간 13,546초였습니다. 전체 53세션의 47%이고 전체 화면 조회 140건의 68%입니다. 광고 성과를 보려는 표의 절반 가까이가 회사 안에서 만든 접속이었습니다. 김포시 모바일은 실제 사용자일 수 있어 제외하지 않고, 데스크톱만 기본으로 뺍니다.
둘째는 자동 접속 프로그램(스캐너)입니다. 2026년 9월 1일에 www 호스트 30일 403세션을 열어 보니, 개인정보처리방침 페이지가 100세션 전부 직접 유입에 데스크톱, 체류 7초였습니다. 사이트 착지면 1위가 개인정보처리방침이었던 셈입니다. 무작위 문자열 경로를 차례로 두드린 흔적도 있었고, 착지 페이지가 (not set)인 세션 28건은 화면 조회 0에 이탈 94~100%였습니다.
이 둘을 빼면 403세션이 299세션으로, 다시 280세션으로 줄었습니다. 합계 123세션, 31%입니다. 개선 전후를 비교하는 일이 표본의 3분의 1이 잡음인 상태에서 이뤄지고 있었습니다. 이 옵션은 기본을 꺼 두었습니다. 조용히 숫자를 바꾸지 않으려는 선택입니다.
한계도 같이 남겼습니다. (not set) 제외는 28건 중 19건만 걸렸고 나머지 9건은 같은 글자로 보이는데도 필터가 잡지 못했습니다. 못 지운 값을 지웠다고 적지 않으려고 코드 주석에 이 숫자를 그대로 남겼습니다.
셋째는 채널 이름입니다. 8월 13일에 채널을 짧은 이름 organic으로 조회하면 0세션이 나왔습니다. 정확한 값 Organic Search로 조회하면 108세션이었습니다. 채널 필터가 정확히 같은 글자만 받는데 짧은 이름을 넣어서 빈 결과가 계측 부재처럼 보인 것입니다. 짧은 이름을 정확한 값으로 바꿔 주는 대응표를 넣었습니다. 넷째로 8월 11일에는 호스트 필터를 가진 조회 함수가 하나뿐이고 나머지 6개는 필터가 없어서, 같은 GA4 속성에 붙은 다른 사이트의 접속이 www와 ai 숫자에 섞이던 것도 찾아 한 곳에서 걸도록 바꿨습니다.
재측정하니 가설과 판정은 어떻게 바뀌었나?
소스로 다시 자른 뒤 가설의 상태를 하나씩 다시 매겼습니다. 결과는 아래 표와 같습니다. 가설 H1은 약해졌고, H2만 살아남았고, 새 가설 H5가 하나 생겼습니다.

| 가설 | 철회 전 위치 | 재측정 뒤 상태 |
|---|---|---|
| 모바일 붕괴 (153초 대 9초, 17배) | 핵심 판독 | 철회: 기기 축이 광고 네트워크와 섞였음 |
| H1 콜드 로드 | 유력 원인 | 약해짐: 같은 페이지·같은 모바일인데 네이버는 정상 |
| H2 키워드와 첫 제목 불일치 | 후보 중 하나 | 생존: 대조 대상이 광고그룹 2개로 줄어 검사가 쉬워짐 |
| H5 클릭 전달 경로 차이 | 없었음 | 신규: 아직 미검증 |
H3·H4는 이 글의 근거 자료에 나오지 않아 적지 않았습니다.
검사가 쉬워졌다는 점이 실질적인 개선입니다. 이전에는 모바일 전체를 의심해서 확인할 곳이 많았지만, 이제는 광고그룹 두 개(홈페이지 제작, AI 챗봇)의 키워드와 첫 제목을 나란히 놓고 보면 됩니다. 판독의 정확도가 올라간 것은 아니고 확인해야 할 범위가 줄었습니다.
재측정에서 확인한 사실은 처음 표의 숫자가 아니라 읽는 방식이 틀렸다는 점입니다. 6줄은 전부 그대로 나왔고, 소스를 축에 넣자 같은 줄이 정반대 이야기를 했습니다. 숫자를 의심하기 전에 그 숫자가 어떤 표본의 평균인지부터 묻는 순서가 이번 확인의 교훈입니다. 같은 판독을 다시 내려도 이번에는 누구나 같은 명령으로 반박하거나 확인할 수 있습니다.
숫자로 정리하면 이렇습니다. 철회 전에는 60세션으로 17배 격차를 말했고, 철회 후에는 네 칸 가운데 한 칸(구글 모바일)만 비정상이며 그 칸은 실클릭 8건입니다. 클릭과 세션의 차이는 19건 대 31건으로 1.6배였습니다. 도구에 두 옵션을 넣었으므로 이 절단은 누구나 다시 만들 수 있습니다.
무엇은 풀리지 않았나?
가장 큰 한계는 이 수정이 문제의 핵심을 풀지 않는다는 점입니다. 실클릭 8건 위에서는 어떤 지표 설계를 가져와도 판정이 날 만큼의 표본이 나오지 않습니다. 오히려 이번 확인으로 지표를 다시 설계하는 일보다 유입량을 먼저 확보하는 일이 선행 조건이라는 것이 분명해졌습니다. 7일 연속 유료 유입이 0이던 시점에는 더 그렇습니다.
- **세션별 귀속 미확인**: 31건의 세션 중 몇 건이 실제 광고 클릭에서 왔는지는 알 수 없습니다. 1.6배라는 비율만 확인했습니다.
- **H5 미검증**: 구글 광고 클릭이 페이지로 전달되는 경로의 차이는 아직 아무것도 확인하지 못했습니다.
- **30세션 하한의 근거**: 이 하한은 앞선 실패 사례에서 정한 운영 기준이고, 통계적으로 최적이라고 계산한 값이 아닙니다.
- **스캐너 유입 잡음**: 사람이 아닌 접속을 거르는 옵션은 일부 값만 걸러서, 남는 잡음은 안고 갑니다.
남는 질문도 있습니다. 광고 계정의 클릭 19건과 GA4의 세션 31건 가운데 어느 쪽이 사실에 가까운지는 이 자료만으로 말할 수 없습니다. 두 장부는 세는 단위가 다릅니다. 계정은 클릭을 세고 GA4는 방문을 세며, 그 사이에는 재방문과 어트리뷰션 창이라는 규칙이 끼어 있습니다. 그래서 이 글의 결론은 모바일이 괜찮다는 말도, 모바일이 나쁘다는 말도 아닙니다. 8건으로는 어느 쪽도 말할 수 없다는 것이 결론입니다.
광고비를 쓰고 있고 분석 화면의 숫자가 이상하다면, 개선 작업에 들어가기 전에 세 가지를 먼저 확인해 보시기 바랍니다. 표의 기간이 실제로 데이터가 있는 날과 같은지, 가장 나쁜 칸이 몇 건 위에 서 있는지, 광고 계정의 클릭 수와 분석 도구의 세션 수가 몇 배 차이 나는지입니다. 광고 집행 상태와 측정 방식을 같이 점검하고 싶으시면 상담으로 알려 주세요.