GTM 카카오 픽셀 설치: 태그 분리와 중복 방지 4단계 기준
GTM으로 카카오 픽셀을 설치할 때 흔히 기본 코드 전체를 맞춤 HTML 태그 하나에 붙여 넣고 '모든 페이지' 트리거를 거는 것으로 끝냅니다.
이렇게 하면 방문은 잡히지만 구매·회원가입 같은 전환은 빠지거나 두 번씩 잡히기 쉽습니다.
GTM 카카오 픽셀 설치에서 가장 중요한 것은 기본 스크립트와 이벤트 태그를 분리하고, 두 태그의 실행 순서와 중복을 GTM 안에서 통제하는 것입니다.
픽셀 코드를 넣는 일은 5분이면 끝납니다. 시간이 오래 걸리는 쪽은 "어떤 이벤트가 어느 시점에 한 번만 실행되게 할지"를 설계하는 일입니다.
이 설계가 빠지면 카카오모먼트의 전환 수와 실제 주문 수가 계속 맞지 않습니다.
아래에서 태그 구조 설계부터 이벤트 매핑, 중복 방지, 게시 후 검증까지 4단계로 설명합니다.
1. GTM 카카오 픽셀 설치 전에 정할 것: 직접 삽입과 GTM 중 하나만
설치 화면을 열기 전에 확인할 것이 하나 있습니다.
이 사이트에 카카오 픽셀이 이미 다른 경로로 들어가 있는가입니다.
이미 설치된 픽셀이 있는지부터 확인합니다
카페24·아임웹 같은 쇼핑몰 빌더에는 카카오 픽셀 ID만 넣으면 자동으로 연동되는 메뉴가 있는 경우가 많습니다.
이전 담당자나 개발사가 HTML 헤더에 기본 코드를 직접 넣어 둔 경우도 흔합니다.
이 상태에서 GTM으로 한 번 더 설치하면 페이지뷰가 두 번 실행됩니다.
구매 이벤트까지 겹치면 카카오모먼트에 찍히는 전환 수가 실제 주문의 2배 가까이로 부풀어 오릅니다.
실무에서 이런 경우가 꽤 자주 나옵니다.
"GTM으로 옮긴 뒤 ROAS가 갑자기 좋아졌다"는 계정을 열어 보면, 빌더 연동을 끄지 않은 채 GTM 태그를 추가한 경우가 많습니다.
성과가 좋아진 것이 아니라 숫자가 두 번 세어진 것입니다.
💡
확인 방법은 간단합니다.
① 브라우저 개발자 도구 > 네트워크 탭에서 kp.js를 검색합니다
② GTM 태그를 일시 중지한 상태에서도 kp.js가 로드된다면, 다른 경로로 이미 설치된 것입니다
③ 페이지 소스에서 kakaoPixel( 문자열을 검색해 직접 삽입된 코드가 있는지도 함께 확인합니다
하나의 경로로 정리하는 기준
설치 경로는 하나만 남기는 것이 원칙입니다.
어느 쪽을 남길지는 아래 기준으로 정합니다.
상황 | 남길 경로 | 이유 |
|---|---|---|
빌더 연동이 구매 금액까지 정확히 넘긴다 | 빌더 연동 | 결제 시스템과 직접 연결돼 누락이 적습니다 |
빌더 연동이 페이지뷰만 지원한다 | GTM | 이벤트 세부 설정을 직접 통제할 수 있습니다 |
자체 개발 사이트, 데이터영역(dataLayer)이 있다 | GTM | 주문 정보를 변수로 받아 넘길 수 있습니다 |
메타·구글 태그도 GTM으로 관리 중이다 | GTM | 트리거를 공유해 매체 간 기준을 맞출 수 있습니다 |
-> 핵심은 빌더 연동과 GTM을 동시에 켜두지 않는 것입니다.
GTM으로 옮기기로 했다면 빌더 쪽 카카오 픽셀 ID 입력란을 비우고, 헤더에 직접 넣은 코드도 함께 지운 뒤 작업을 시작합니다.
GTM 컨테이너 설치 자체가 아직이라면 그것부터 마쳐야 합니다.
GTM 설치 방법: 컨테이너 코드부터 게시까지 4단계 기준
2. 카카오 픽셀 GTM 태그 구조: 기본 태그 1개 + 이벤트 태그 N개
카카오 픽셀 기본 코드는 크게 두 부분으로 나뉩니다.
💡
스크립트 로더: kp.js 파일을 불러오는 <script> 태그
실행 함수: kakaoPixel('트랙ID').pageView(); 같은 이벤트 호출
자주 하는 실수는 이 두 부분을 이벤트마다 통째로 복사해 넣는 것입니다.
구매 태그 안에도 kp.js 로더를 넣고, 장바구니 태그 안에도 넣는 식입니다.
이렇게 하면 한 페이지에서 스크립트가 여러 번 로드되고, 관리 포인트도 태그 수만큼 늘어납니다.
기본 태그는 1개만 만듭니다
GTM에서 맞춤 HTML 태그를 새로 만들고 아래 구성으로 넣습니다.
<script type="text/javascript" charset="UTF-8" src="//t1.daumcdn.net/kas/static/kp.js"></script>
<script type="text/javascript">
kakaoPixel('트랙ID').pageView();
</script>
트리거는 All Pages(모든 페이지)로 겁니다.
태그 이름은 KAKAO - Base - PageView처럼 매체·역할·이벤트 순으로 정하면, 태그가 30개를 넘는 컨테이너에서도 찾기 쉽습니다.
트랙ID는 카카오모먼트 > 픽셀 & SDK 메뉴에서 확인할 수 있습니다.
코드에 직접 쓰기보다 GTM의 상수 변수로 등록해 {{KAKAO Track ID}} 형태로 불러오는 편이 좋습니다.
나중에 픽셀을 교체해야 할 때 변수 하나만 바꾸면 모든 태그에 반영됩니다.
이벤트 태그는 '함수 호출'만 담습니다
구매·회원가입 같은 이벤트 태그에는 kp.js 로더를 넣지 않고, 실행 함수 한 줄만 넣습니다.
<script type="text/javascript">
kakaoPixel('{{KAKAO Track ID}}').completeRegistration();
</script>
여기서 생기는 문제가 실행 순서입니다.
이벤트 태그가 기본 태그보다 먼저 실행되면 kakaoPixel 함수가 아직 없어서 오류가 나고, 이벤트는 조용히 사라집니다.
그래서 이벤트 태그마다 고급 설정 > 태그 순서 지정에서
"이 태그가 실행되기 전에 태그 실행"에 기본 태그를 지정합니다.
같은 메뉴에서 "설정 태그가 실패하면 실행하지 않음"도 체크해 두면, 로더가 차단된 환경에서 오류가 연쇄로 나지 않습니다.
이렇게 하면 기본 태그가 두 번 실행되지 않을까 걱정할 수 있습니다.
기본 태그의 고급 설정 > 태그 실행 옵션을 "페이지당 한 번"으로 바꿔 두면 됩니다.
순서 지정으로 다시 호출돼도 같은 페이지 안에서는 한 번만 실행됩니다.
-> 정리하면 로더와 페이지뷰는 기본 태그 1개에만, 이벤트 태그에는 함수 호출 1줄과 순서 지정만 넣습니다.
이 구조는 메타 픽셀을 GTM으로 설치할 때와 같은 원리입니다. 두 매체를 함께 관리한다면 태그 이름 규칙도 맞춰 두면 편합니다.
GTM 메타 픽셀 설치 기준: 태그·트리거·중복 방지 3단계
3. 카카오 픽셀 이벤트 매핑: 트리거와 구매 금액 변수 설정
기본 태그가 준비되면 어떤 행동을 어떤 카카오 이벤트로 보낼지 정합니다.
모든 이벤트를 다 심을 필요는 없습니다.
광고 최적화와 리타겟팅 모수에 실제로 쓸 이벤트만 고르는 편이 오집계를 줄입니다.
이벤트별 트리거 기준
카카오 이벤트 | 함수 | 권장 GTM 트리거 | 주의할 점 |
|---|---|---|---|
페이지뷰 |
| All Pages | 기본 태그에 포함, 별도 태그 불필요 |
상품 조회 |
| 상품 상세 URL 패턴의 페이지뷰 | 목록 페이지가 같은 패턴에 걸리지 않는지 확인 |
장바구니 추가 |
| 맞춤 이벤트( | 버튼 클릭 트리거는 품절·옵션 미선택 클릭까지 잡힙니다 |
회원가입 |
| 가입 완료 페이지 또는 맞춤 이벤트 | 가입 '시작' 클릭에 걸면 안 됩니다 |
잠재고객(상담 신청 등) |
| 폼 제출 성공 이벤트 | 유효성 검사 실패 제출까지 잡지 않게 합니다 |
구매 |
| 맞춤 이벤트( | 금액 변수와 중복 방지가 핵심입니다 |
장바구니와 폼 제출에서 오집계가 특히 많습니다.
버튼 클릭 트리거는 "누른 순간"을 잡을 뿐, 그 동작이 성공했는지는 알지 못하기 때문입니다.
옵션을 고르지 않고 장바구니 버튼을 누르면 경고창이 뜨는데, 클릭 트리거는 이것도 장바구니 추가로 셉니다.
가능하면 개발 쪽에 요청해 성공 시점에 dataLayer.push를 실행하게 하고, 그 맞춤 이벤트를 트리거로 쓰는 것이 정확합니다.
개발 리소스가 없다면 성공 후 이동하는 URL(완료 페이지)을 트리거로 쓰는 것이 차선입니다.
폼 유형에 따라 쓸 수 있는 트리거가 달라지니 아래 글의 기준을 함께 참고하면 좋습니다.
GTM 양식 제출 추적: 폼 유형별 트리거 고르는 기준
구매 이벤트에는 금액을 반드시 넘깁니다
구매 이벤트를 purchase()만 호출하면 전환 '건수'만 잡힙니다.
그러면 카카오모먼트에서 ROAS를 볼 수 없고, 금액 기반 최적화도 기대할 수 없습니다.
데이터영역에 GA4 전자상거래 형식으로 주문 정보가 들어온다면, GTM에서 데이터 영역 변수를 만들어 연결합니다.
💡
{{DLV - ecommerce.value}} → 총 결제 금액
{{DLV - ecommerce.transaction_id}} → 주문번호
{{DLV - ecommerce.items}} → 상품 배열
<script type="text/javascript">
kakaoPixel('{{KAKAO Track ID}}').purchase({
total_quantity: "{{DLV - total_quantity}}",
total_price: "{{DLV - ecommerce.value}}",
currency: "KRW",
products: {{JS - kakao products}}
});
</script>
상품 배열은 GA4의 items 형식(item_id, item_name, price, quantity)과 카카오가 받는 형식(id, name, price, quantity)이 다릅니다.
그래서 맞춤 자바스크립트 변수로 한 번 변환해서 넘기는 것이 안전합니다.
금액에서 자주 틀리는 부분은 세 가지입니다.
① value가 "29,000"처럼 쉼표가 붙은 문자열로 들어오는 경우 — 숫자만 남기도록 변환합니다
② 배송비·할인 반영 기준이 매체마다 다른 경우 — GA4와 카카오에 같은 기준의 금액을 넘겨야 나중에 비교할 수 있습니다
③ 변수가 비어 undefined가 넘어가는 경우 — 미리보기에서 변수 값이 실제로 채워지는지 꼭 확인합니다
데이터영역 변수가 비어서 들어온다면 아래 글의 점검 순서로 원인을 좁힐 수 있습니다.
GTM 데이터영역 변수: 설정 기준과 값이 안 잡힐 때 확인할 4가지
4. 카카오 픽셀 중복 방지와 게시 후 검증 순서
태그를 만들었다면 게시하기 전에 중복을 막아야 합니다.
카카오 픽셀은 같은 이벤트가 두 번 호출되면 두 번 잡힌다고 보고 설계하는 편이 안전합니다.
그래서 중복은 GTM 단계에서 막아야 합니다.
구매 중복이 생기는 3가지 경로
① 주문 완료 페이지 새로고침
완료 페이지 URL을 트리거로 썼다면, 고객이 새로고침하거나 뒤로 갔다 다시 들어올 때마다 구매가 다시 실행됩니다.
모바일에서 결제 앱을 거쳐 돌아올 때 완료 페이지가 두 번 로드되는 경우도 있습니다.
② 빌더 연동 + GTM 동시 실행
1단계에서 정리하지 않았다면 구매가 정확히 2배로 잡힙니다.
③ SPA 사이트의 기록 변경
페이지 새로고침 없이 화면만 바뀌는 사이트에서는 '기록 변경' 트리거와 페이지뷰 트리거가 겹쳐 같은 이벤트가 두 번 실행되기도 합니다.
주문번호로 한 번만 실행되게 막는 방법
가장 실용적인 방법은 주문번호를 브라우저에 기록해 두고, 같은 번호면 실행하지 않는 것입니다.
구매 태그 안에서 아래처럼 처리할 수 있습니다.
<script type="text/javascript">
(function() {
var orderId = "{{DLV - ecommerce.transaction_id}}";
var key = "kakao_purchase_" + orderId;
if (!orderId || localStorage.getItem(key)) return;
kakaoPixel('{{KAKAO Track ID}}').purchase({ /* 위와 동일 */ });
localStorage.setItem(key, "1");
})();
</script>
주문번호를 데이터영역에서 받을 수 없다면 쿠키 변수를 활용하거나,
최소한 태그 실행 옵션을 "페이지당 한 번"으로 설정해 같은 페이지 안의 중복이라도 막아 둡니다.
다만 이 옵션은 새로고침으로 생기는 중복까지는 막지 못한다는 점을 알아두어야 합니다.
게시 전·후 검증 체크리스트
GTM 미리보기 모드에서 실제 구매 흐름을 한 번 끝까지 진행하면서 아래 항목을 확인합니다.
테스트 결제는 가장 저렴한 상품으로 진행한 뒤 바로 취소하는 방식이 일반적입니다.
☐ 기본 태그가 페이지당 1회만 실행되는가 (Tags Fired 목록에서 확인)
☐ 이벤트 태그가 기본 태그 다음에 실행되는가 (순서 지정 반영 여부)
☐ 구매 태그의 변수 값(금액·주문번호·상품 배열)이 실제 값으로 채워지는가
☐ 완료 페이지를 새로고침했을 때 구매 태그가 다시 실행되지 않는가
☐ 네트워크 탭에서 kp.js가 1회만 로드되고, 이벤트별 수집 요청이 1회씩 나가는가
☐ 게시 후 카카오모먼트 픽셀 & SDK 화면에서 이벤트 수신 현황이 확인되는가
미리보기 연결이 안 되거나 태그가 실행되지 않는다면 아래 글의 진단 순서를 먼저 확인하는 것이 빠릅니다.
GTM 미리보기 안됨: 연결 실패부터 태그 미작동까지 진단 순서
마지막 항목은 게시 직후 바로 반영되지 않을 수 있습니다.
수신 현황이 늦게 보인다고 태그를 다시 고치기보다, 네트워크 요청이 정상으로 나가는지부터 확인하는 것이 순서입니다.
요청은 나가는데 계속 집계되지 않는다면 트랙ID가 다른 광고 계정에 연결된 것은 아닌지 확인합니다.
게시 후 며칠이 지나도 카카오모먼트 전환이 0건이라면 픽셀·캠페인 설정·귀속 기준을 차례로 나눠서 봐야 합니다.
카카오 전환 안잡힘: 0건일 때 픽셀부터 귀속까지 진단 순서
게시 후 1주일 동안 볼 숫자
설치가 맞게 됐는지는 결국 실제 주문 수와의 차이로 판단합니다.
💡
카카오 구매 전환 수 ≒ 같은 기간 카카오 유입 주문 수 → 정상
카카오 구매 전환 수가 실제 전체 주문 수에 가깝거나 더 많다 → 중복 의심
카카오 구매 이벤트 수신이 실제 주문보다 눈에 띄게 적다 → 결제 경로 일부 누락 의심
여기서 주의할 점이 있습니다.
카카오모먼트의 '광고 전환 수'는 광고를 거친 주문만 세는 숫자이고, 픽셀 '이벤트 수신 수'는 광고와 관계없이 들어온 모든 구매를 세는 숫자입니다.
검증할 때는 이벤트 수신 수를 쇼핑몰 관리자 주문 수와 비교해야 설치가 맞는지 판단할 수 있습니다.
결제 수단별로 완료 페이지가 다른 사이트(간편결제·가상계좌 등)에서는 특정 결제 경로만 누락되는 경우가 많습니다.
수신 수가 실제 주문의 일부만 잡힌다면 결제 수단별로 테스트를 나눠 진행합니다.
자주 묻는 질문
GTM으로 카카오 픽셀을 설치하면 직접 삽입보다 정확도가 떨어지나요?
설치 방식 자체로 정확도가 달라지지는 않습니다. 정확도를 가르는 것은 트리거 시점과 중복 관리입니다. 오히려 GTM에서는 태그 순서 지정과 실행 옵션으로 중복을 통제하기 쉬워서, 설계만 맞으면 더 깔끔하게 관리할 수 있습니다.
카카오 픽셀 이벤트 태그에도 kp.js 스크립트를 넣어야 하나요?
넣지 않는 것이 좋습니다. kp.js 로더와 pageView()는 기본 태그 1개에만 두고, 이벤트 태그에는 함수 호출만 넣은 뒤 태그 순서 지정으로 기본 태그가 먼저 실행되게 합니다.
카카오 픽셀 구매 전환이 두 번씩 잡히는 이유는?
가장 흔한 원인은 쇼핑몰 빌더의 카카오 픽셀 연동과 GTM 태그가 동시에 켜져 있는 경우입니다. 그다음으로 많은 원인은 주문 완료 페이지 새로고침입니다. 설치 경로를 하나로 정리하고, 주문번호 기준으로 한 번만 실행되게 처리하면 해결됩니다.
GTM 카카오 픽셀 설치 후 이벤트가 바로 안 보이면 어떻게 하나요?
먼저 GTM 미리보기에서 태그가 실행됐는지 보고, 네트워크 탭에서 수집 요청이 실제로 나갔는지 확인합니다. 요청이 정상으로 나갔다면 카카오모먼트 반영을 조금 기다려 봅니다. 요청이 아예 나가지 않았다면 트리거나 태그 순서 설정을 다시 봐야 합니다.
스마트스토어에도 GTM으로 카카오 픽셀을 설치할 수 있나요?
스마트스토어는 외부 스크립트나 GTM 컨테이너를 넣을 수 없는 구조라 GTM 설치가 불가능합니다. 자사몰처럼 HTML이나 GTM을 넣을 수 있는 사이트에서만 이 글의 방식을 그대로 적용할 수 있습니다.
마무리
GTM 카카오 픽셀 설치는 코드를 붙여 넣는 작업이 아니라 실행 구조를 설계하는 작업입니다.
정리하면 순서는 이렇습니다.
빌더 연동·직접 삽입 코드를 확인하고 설치 경로를 하나로 정리합니다
기본 태그 1개(로더 + 페이지뷰)와 이벤트 태그 N개(함수 호출만)로 나눕니다
성공 시점 트리거와 데이터영역 변수로 이벤트와 구매 금액을 연결합니다
주문번호 기준으로 중복을 막고, 수신 수를 실제 주문 수와 비교해 검증합니다
이 네 단계를 거치면 카카오모먼트의 전환 숫자를 믿고 입찰과 예산을 판단할 수 있습니다.
반대로 이 단계 없이 쌓인 전환 데이터는 최적화의 기준이 되지 못합니다. 그 상태에서 캠페인을 조정하면 부풀거나 빠진 숫자를 기준으로 움직이게 됩니다.
픽셀 설치 이후 카카오모먼트 쪽 전환 설정과 캠페인 연결까지 이어서 정리하려면 아래 글을 함께 보면 됩니다.
카카오 픽셀 설치부터 전환 세팅까지: 실무 기준 정리