GTM 데이터영역 변수: 설정 기준과 값이 안 잡힐 때 확인할 4가지

Oct 15, 2026
GTM 데이터영역 변수: 설정 기준과 값이 안 잡힐 때 확인할 4가지

GTM 데이터영역 변수는 "페이지에서 값을 읽어 오는 기능"이라고만 이해하면 반쪽짜리입니다. 사이트가 dataLayer에 넣어 둔 값을 태그가 실행되는 그 순간에 꺼내 쓰는 통로입니다.

그래서 이 변수에서 가장 중요한 건 변수 이름을 정확히 적는 일이 아닙니다. 언제, 어떤 구조로 값이 push되는지를 먼저 맞추는 일입니다.
구매 금액이 0으로 찍히거나 이전 주문 금액이 그대로 넘어가는 문제는 대부분 변수 설정보다 push 시점과 데이터 구조에서 생깁니다.

아래에서 데이터영역 변수의 작동 방식, 설정 기준, 값이 안 잡힐 때의 진단 순서, 광고 전환 값에 연결하는 실무 순서를 단계별로 설명합니다.

GTM 데이터영역 변수란: 페이지가 넘겨준 값을 꺼내 쓰는 통로

dataLayer와 데이터영역 변수의 관계

dataLayer는 사이트와 구글 태그 매니저(GTM) 사이에 놓인 공용 메모장입니다.

사이트 개발 쪽에서 "지금 구매가 일어났고, 주문번호는 이것, 금액은 이것"이라고 적어 두면,
GTM이 그 내용을 읽어서 태그에 넘깁니다.

이때 메모장에 적힌 특정 항목을 집어 오는 도구가 데이터영역 변수입니다.

예를 들어 구매 완료 페이지에서 아래처럼 push가 일어난다고 하겠습니다.

window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'T20261006-001',
    value: 39000,
    currency: 'KRW'
  }
});

여기서 구매 금액을 쓰려면 데이터영역 변수 이름 칸에 ecommerce.value를 적습니다.
주문번호는 ecommerce.transaction_id, 통화는 ecommerce.currency입니다.

-> 핵심: 데이터영역 변수는 값을 '만드는' 기능이 아닙니다. 이미 push된 값을 '읽는' 기능입니다.
사이트가 값을 넣지 않았다면 GTM 쪽에서 아무리 설정을 바꿔도 잡히지 않습니다.

다른 변수 유형과 비교하면

GTM에는 값을 읽는 방법이 여러 가지 있습니다.
실무에서 데이터영역 변수를 우선으로 쓰는 이유는 아래 비교를 보면 분명해집니다.

변수 유형

값을 읽는 위치

장점

깨지는 상황

데이터영역 변수

dataLayer에 push된 객체

디자인 변경에 영향 없음, 구조가 명확함

개발 쪽 push 누락·키 이름 변경

DOM 요소 변수

화면에 표시된 HTML 요소

개발 협조 없이 바로 설정 가능

리뉴얼·클래스명 변경 시 즉시 깨짐

자바스크립트 변수

전역 JS 변수

기존 사이트 변수 재활용

변수 위치·이름 변경 시 깨짐

맞춤 자바스크립트

직접 작성한 함수

가공·변환 자유로움

코드 관리 부담, 오류 시 디버깅 어려움

DOM 요소 변수로 결제 금액을 화면에서 긁어 오는 방식은 처음엔 빠릅니다.
하지만 쇼핑몰 스킨을 바꾸거나 금액 표시 영역 클래스명이 바뀌는 순간 조용히 깨집니다.

더 큰 문제는 깨져도 에러가 나지 않는다는 점입니다.
금액이 빈 값으로 넘어가도 구매 이벤트 자체는 발생하니 대시보드에서는 전환이 정상으로 보입니다.
몇 주가 지나서야 ROAS가 이상하게 낮다는 걸 발견하는 경우가 실무에서 드물지 않습니다.

GTM 데이터영역 변수 설정 방법: 이름·버전·기본값 3가지 기준

GTM에서 [변수] → [사용자 정의 변수] → [새로 만들기] → [데이터 영역 변수]를 선택하면 설정 화면이 열립니다.
입력할 항목은 많지 않지만 각 항목에 판단 기준이 있습니다.

💡

기준 1. 변수 이름은 dataLayer의 키 경로와 글자 하나까지 같아야 한다

  • 대소문자를 구분합니다. transactionId와 transaction_id는 다른 값입니다.

  • 객체 안의 값은 점(.)으로 경로를 이어서 적습니다. ecommerce.value

  • 배열 안의 값은 인덱스 숫자로 접근합니다. 첫 번째 상품 ID는 ecommerce.items.0.item_id

  • 화면에 보이는 GTM 변수명('DLV - 구매금액' 등)은 자유롭게 지어도 됩니다. 정확해야 하는 건 '데이터 영역 변수 이름' 칸입니다.

💡

기준 2. 데이터 영역 버전은 특별한 이유가 없으면 버전 2를 유지한다

  • 버전 2가 기본값이며, 점 표기법으로 중첩된 값을 읽을 수 있습니다.

  • 버전 1은 최상위 키만 읽기 때문에 ecommerce.value 같은 경로를 쓸 수 없습니다.

  • 다만 버전 2는 push된 객체를 이전 값과 병합(merge)합니다. 이 특성이 뒤에서 다룰 '이전 값이 남는 문제'의 원인이 됩니다.

💡

기준 3. 기본값은 '무엇이 오면 안 되는지'를 기준으로 정한다

  • 기본값을 설정하지 않으면 값이 없을 때 undefined가 넘어갑니다.

  • 매출 값에 기본값 0을 넣으면 태그 오류는 막지만, 누락을 0원 구매로 숨기는 결과가 될 수 있습니다.

  • 그래서 금액 변수는 기본값을 비워 두고 누락을 발견하는 쪽이 낫고, 페이지 유형·회원 등급처럼 분류용 변수는 '미지정' 같은 기본값을 두는 쪽이 리포트 관리에 유리합니다.

변수 이름을 정할 때 함께 정해 둘 규칙

데이터영역 변수가 10개를 넘어가면 이름 규칙이 없을 때 관리가 급격히 어려워집니다.
실무에서는 아래 정도의 규칙을 처음부터 정해 두는 편이 좋습니다.

① 접두어로 유형을 표시합니다. DLV - (데이터영역 변수), CJS - (맞춤 JS)
② 뒤에 원래 키 경로를 그대로 붙입니다. DLV - ecommerce.value
③ 같은 값을 여러 태그가 쓰면 변수 하나로 통일합니다. 매체별로 '구매금액_메타', '구매금액_구글'을 따로 만들지 않습니다.

이름에 키 경로를 그대로 남기면, 개발 쪽에서 키를 바꿨을 때 어느 변수가 영향을 받는지 바로 찾을 수 있습니다.

데이터영역 변수 값이 안 잡힐 때: 4가지 원인과 확인 순서

데이터영역 변수 문제는 증상이 비슷해 보여도 원인이 전혀 다릅니다.
아래 순서대로 확인하면 대부분 30분 안에 원인을 특정할 수 있습니다.

모든 확인은 GTM 미리보기(Tag Assistant)에서 진행합니다.
왼쪽 이벤트 목록에서 해당 이벤트를 클릭한 뒤, [데이터 영역] 탭과 [변수] 탭을 번갈아 보는 방식입니다.

원인 1. push 자체가 일어나지 않았다

가장 먼저 볼 것은 [데이터 영역] 탭에 해당 값이 존재하는지입니다.

여기에 ecommerce 객체가 아예 없다면 GTM 설정 문제가 아닙니다.
사이트 쪽 코드가 실행되지 않았거나, 특정 결제 수단에서만 push가 빠진 경우입니다.

특히 외부 결제창(간편결제·PG 결제창)을 거쳐 완료 페이지로 돌아오는 구조에서 자주 생깁니다.
카드 결제는 잡히는데 간편결제 구매만 금액이 비어 있다면, 결제 수단별 완료 페이지 경로부터 나눠서 확인해야 합니다.

-> 이 단계에서 값이 없으면 개발 쪽에 push 코드를 요청하는 것 외에 GTM에서 할 수 있는 일은 없습니다.

원인 2. 키 이름이나 경로가 다르다

[데이터 영역] 탭에 값은 보이는데 [변수] 탭에서 undefined로 나온다면 대부분 이 경우입니다.

실무에서 흔한 불일치는 아래와 같습니다.

  • 개발 쪽은 ecommerce.purchase.actionField.revenue(구버전 UA 구조), GTM은 ecommerce.value(GA4 구조)

  • 개발 쪽은 orderId, GTM은 order_id

  • 상품 배열 이름이 items가 아니라 products

GA4 전자상거래 구조로 넘어간 지 꽤 지났지만, 오래된 쇼핑몰 스킨이나 플러그인에는 여전히 구버전 구조가 남아 있는 경우가 많습니다.
[데이터 영역] 탭에서 실제 객체를 펼쳐서 경로를 한 단계씩 따라가며 대조하는 게 가장 확실합니다.

원인 3. 태그가 push보다 먼저 실행됐다

값은 결국 push되는데 태그에는 빈 값이 넘어가는 경우입니다.
GTM 데이터영역 변수는 태그가 실행되는 시점에 dataLayer에 있는 값을 읽습니다.

예를 들어 구매 태그를 '페이지뷰' 트리거로 걸어 두고, 사이트는 페이지 로드 후 조금 뒤에 purchase를 push한다면 순서가 이렇게 됩니다.

1) 페이지뷰 발생 → 구매 태그 실행 → 이 시점엔 금액 없음 → 빈 값 전송
2) 그 뒤 purchase push → 값은 들어왔지만 태그는 이미 끝남

미리보기 왼쪽 목록에서 태그가 실행된 이벤트가 purchase push보다 위에 있다면 이 문제입니다.
해결은 트리거를 '맞춤 이벤트'로 바꾸고 이벤트 이름을 purchase로 맞추는 것입니다.

반대로 개발 쪽이 event 키 없이 값만 push하는 경우도 있습니다.
event 키가 없는 push는 새 트리거 시점을 만들지 않기 때문에, 그 값은 다음 이벤트가 일어날 때에야 태그가 읽을 수 있습니다.
값 push와 이벤트 발생을 한 번의 push에 함께 넣도록 요청하는 편이 안전합니다.

원인 4. 이전 값이 남아 있다

가장 찾기 어려운 원인입니다.
값은 잘 잡히는데 틀린 값이 잡힙니다.

앞에서 말했듯 데이터 영역 버전 2는 새로 push된 객체를 기존 값과 병합합니다.
그래서 한 페이지 안에서 장바구니 담기 → 구매처럼 ecommerce 이벤트가 연달아 일어나면,
새 push에 없는 키는 이전 이벤트의 값이 그대로 남습니다.

페이지 이동 없이 화면만 바뀌는 SPA 구조의 쇼핑몰에서 특히 자주 보입니다.
구매 이벤트의 items 배열에 앞서 조회한 상품이 섞여 들어가거나, 쿠폰 값이 다음 주문까지 따라붙는 식입니다.

GA4 공식 가이드에서도 권장하는 방법은 ecommerce push 직전에 객체를 비우는 것입니다.

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({ event: 'purchase', ecommerce: { ... } });

이 한 줄이 빠져 있으면 테스트 주문 1건으로는 문제가 드러나지 않습니다.
같은 세션에서 여러 행동을 한 뒤 구매해 봐야 재현되기 때문에, 테스트도 '상품 조회 → 다른 상품 담기 → 구매' 순서로 해야 잡아낼 수 있습니다.

진단 순서 요약

미리보기에서 보이는 증상

원인

조치 주체

[데이터 영역] 탭에 값 자체가 없음

push 누락

개발

[데이터 영역]엔 있는데 [변수]는 undefined

키 이름·경로 불일치

GTM 설정

태그 실행 이벤트가 push보다 앞에 있음

실행 시점 문제

GTM 트리거

값은 있는데 이전 주문·상품 값이 섞임

병합으로 남은 값

개발 (ecommerce 초기화)

데이터영역 변수를 광고 전환 값에 연결하는 실무 순서

데이터영역 변수가 실제 광고 성과에 영향을 주는 곳은 전환 값입니다.
메타 픽셀의 구매 value, 구글 광고 전환 태그의 전환 가치, GA4 purchase의 value가 모두 이 변수에서 나옵니다.

1단계: 값의 '형식'부터 확인한다

변수가 값을 읽어 오는 것과, 그 값이 매체가 이해할 수 있는 형식인지는 별개의 문제입니다.

실무에서 가장 흔한 실수는 금액이 문자열로 들어오는 경우입니다.
value: 39000이 아니라 value: '39,000원'처럼 쉼표와 단위가 붙어서 push되면,
매체에 따라 값을 무시하거나 0으로 처리합니다.

이 경우 선택지는 두 가지입니다.

① 개발 쪽에 숫자형으로 push하도록 수정 요청 (근본 해결)
② 당장 수정이 어렵다면 맞춤 자바스크립트 변수로 숫자만 추출해 쓰는 임시 처리

②는 빠르지만 금액 표기 규칙이 바뀌면 다시 깨지므로, 어디까지나 ①이 반영될 때까지의 임시 조치로 두는 게 맞습니다.

주문번호도 같은 관점으로 봐야 합니다.
주문번호가 비면 구글 광고의 중복 전환 방지, 메타의 이벤트 중복 제거가 제대로 작동하지 않습니다.
데이터영역 변수로 읽은 주문번호는 그대로 메타 event_id나 구글 광고 거래 ID로 넘겨 중복 기준으로 쓰는 경우가 많습니다.

메타 event id 설정 기준: 픽셀·CAPI 중복 제거 4단계 점검

2단계: 하나의 변수를 여러 매체 태그에 공통으로 연결한다

구매 금액 변수는 하나만 만들고 매체 태그마다 같은 변수를 연결합니다.

  • 메타 픽셀 Purchase 태그 → value, currency

  • 구글 광고 전환 추적 태그 → 전환 가치, 거래 ID, 통화 코드

  • GA4 이벤트 태그 → value, transaction_id, currency, items

이렇게 해 두면 매체마다 구매 금액이 다르게 찍히는 상황에서 원인을 GTM 바깥(어트리뷰션 기준, 전환 기간 차이)으로 좁힐 수 있습니다.
변수가 매체별로 따로 있으면 '변수 차이인지 매체 기준 차이인지'부터 다시 확인해야 합니다.

GTM 메타 픽셀 설치 기준: 태그·트리거·중복 방지 3단계

3단계: 테스트 주문은 '경우의 수'대로 한다

변수가 잘 잡히는지 확인할 때 테스트 주문 1건으로 끝내는 경우가 많습니다.
하지만 앞에서 본 4가지 원인 중 원인 1과 원인 4는 1건 테스트로는 드러나지 않습니다.

실무에서는 최소한 아래 경우를 나눠서 확인합니다.

💡

  • 결제 수단별: 카드 / 간편결제 / 무통장입금

  • 회원 상태별: 회원 구매 / 비회원 구매

  • 장바구니 구성별: 단일 상품 / 여러 상품 / 할인·쿠폰 적용

  • 행동 순서별: 바로 구매 / 여러 상품 조회 후 구매

실무 사례: 매출은 정상인데 ROAS가 절반으로 보였던 구조

한 이커머스 브랜드의 경우 광고 관리자에 잡힌 구매 건수는 주문 관리 화면과 거의 일치했습니다.
그런데 구매 전환 값 합계는 실제 매출보다 눈에 띄게 낮았습니다.

미리보기로 확인해 보니 카드 결제 주문은 금액이 정상적으로 넘어가고 있었습니다.
문제는 간편결제 주문이었습니다. 외부 결제창에서 돌아오는 완료 페이지가 별도 경로였고, 그 페이지의 push에는 value 키가 빠져 있었습니다.

구매 이벤트는 발생하니 건수는 맞고, 금액만 비어 있으니 ROAS만 낮게 보이는 구조였습니다.
이 상태에서 운영자가 "ROAS가 낮다"는 이유로 예산을 줄이고 소재를 교체했다면, 측정 오류를 성과 문제로 착각해 멀쩡한 캠페인을 건드린 셈이 됩니다.

간편결제 완료 페이지에도 동일한 push 구조를 적용한 뒤에야 전환 값 합계가 실제 매출에 가깝게 맞춰졌습니다.

-> 핵심: 전환 건수와 전환 값 중 하나만 어긋난다면, 광고 성과보다 데이터영역 변수부터 의심하는 게 순서입니다.

구글 광고 전환추적 설정 순서: 실무 4단계 기준

자주 묻는 질문

GTM 데이터영역 변수가 undefined로 나오는 이유는?

대부분 키 이름·경로가 다르거나, 태그가 push보다 먼저 실행된 경우입니다. 미리보기의 [데이터 영역] 탭에 값이 있는지 먼저 확인하세요. 값이 있는데 undefined라면 대소문자와 점(.) 경로를 대조하고, 값이 없다면 태그를 실행한 이벤트가 push보다 앞에 있는지 확인합니다.

데이터 영역 버전 1과 버전 2는 뭐가 다른가요?

버전 2는 ecommerce.value처럼 점 표기법으로 중첩된 값을 읽을 수 있고, push된 객체를 이전 값과 병합합니다. 버전 1은 최상위 키만 읽습니다. 특별한 이유가 없다면 기본값인 버전 2를 쓰고, 병합 때문에 이전 값이 남는 문제는 ecommerce 초기화 push로 해결합니다.

GTM에서 배열 안의 값은 어떻게 가져오나요?

데이터영역 변수 이름에 인덱스 숫자를 점으로 이어 적습니다. 첫 번째 상품 ID라면 ecommerce.items.0.item_id입니다. 다만 상품이 여러 개인 주문의 전체 ID 목록이 필요하다면, 배열 전체를 읽은 뒤 맞춤 자바스크립트 변수로 가공하는 편이 정확합니다.

데이터영역 변수 기본값은 0으로 설정해야 하나요?

금액처럼 누락을 발견해야 하는 값은 기본값을 비워 두는 편이 낫습니다. 0을 넣으면 누락이 0원 구매로 기록돼 문제를 늦게 발견하게 됩니다. 페이지 유형처럼 분류용 값은 '미지정' 같은 기본값을 두면 리포트 정리에 도움이 됩니다.

구매 금액이 이전 주문 금액으로 찍히는 이유는?

데이터 영역 버전 2의 병합 특성 때문에 이전 ecommerce 값이 남아 있는 경우가 많습니다. 특히 페이지 이동 없이 화면만 바뀌는 사이트에서 자주 발생합니다. ecommerce push 직전에 { ecommerce: null }을 먼저 push하도록 개발 쪽에 요청하면 해결됩니다.

마무리

GTM 데이터영역 변수는 설정 화면만 보면 이름 한 줄을 적는 단순한 기능입니다.
하지만 실제로 값을 좌우하는 건 GTM 바깥, 즉 사이트가 언제 어떤 구조로 push하느냐입니다.

값이 안 잡힐 때는 push 존재 → 키 경로 → 실행 시점 → 이전 값 잔존, 이 순서로 미리보기에서 확인하면 원인을 빠르게 좁힐 수 있습니다.
그리고 값이 잡힌 뒤에는 숫자 형식과 주문번호까지 확인해야 광고 매체가 그 값을 제대로 쓸 수 있습니다.

전환 건수는 맞는데 전환 값만 어긋난다면, 캠페인을 손대기 전에 데이터영역 변수부터 점검해 보는 것을 권합니다.
측정이 정확해야 그 위에서 내리는 예산·소재 판단도 의미가 있습니다.

Share article