# GTM 이벤트 설계 문서
## 인카금융 TOP사업단 보험설계사 리쿠르팅 마케팅 캠페인

**문서 버전**: 1.0
**작성일**: 2026-03-27
**작성자**: 이리스 (개발1팀 프론트엔드)
**근거 문서**: kpi-tracking.md v1.0, 3/22 미팅 합의 (P0: GTM 최소 7개 이벤트 즉시 설치)
**GTM 컨테이너**: 기존 컨테이너 활용 (campaign-gtm-container.json 참조)

---

## 배경 및 목적

3/22 미팅 P0 합의사항: "GTM 최소 7개 이벤트 즉시 설치" (48시간 이내).
에코의 지적: "페이지별 스크롤 깊이, 폼 시작/완료 분리, CTA 클릭 추적이 없으면 랜딩 최적화 불가".

본 문서는 랜딩페이지(티스토리 기반)에 설치할 GTM 이벤트 최소 7개를 정의합니다.

---

## 이벤트 목록

| 번호 | 이벤트명 | 카테고리 | 전환 이벤트 지정 | 우선순위 |
|------|---------|---------|----------------|---------|
| 1 | `page_view` | 페이지 | 아니오 | P0 |
| 2 | `scroll_depth_50` | 참여도 | 아니오 | P0 |
| 3 | `scroll_depth_75` | 참여도 | 아니오 | P0 |
| 4 | `scroll_depth_100` | 참여도 | 아니오 | P0 |
| 5 | `cta_click` | 전환 | 조건부 | P0 |
| 6 | `form_start` | 전환 | 아니오 | P0 |
| 7 | `form_complete` | 전환 | **예 (주전환)** | P0 |
| 8 | `phone_click` | 전환 | 조건부 | P0 |

> 총 8개를 정의하여 최소 기준(7개) + 1개 여유를 확보합니다.

---

## 이벤트 상세 정의

### 이벤트 1: page_view

**이벤트명**: `page_view`
**설명**: 랜딩페이지 최초 로드 시 발생. GA4 기본 수집 이벤트이나 GTM에서도 명시적으로 확인.

**트리거 조건**:
```
트리거 유형: 페이지뷰 (Page View)
조건: 페이지 URL에 incar-top.tistory.com 포함
     (또는 독립 도메인 LP로 전환 시 해당 도메인 기준으로 수정)
실행 시점: DOM 준비 완료 직후
```

**GA4 전송 파라미터**:
```javascript
{
  event: 'page_view',
  page_title: document.title,
  page_location: window.location.href,
  utm_source: {{URL Query - utm_source}},
  utm_medium: {{URL Query - utm_medium}},
  utm_campaign: {{URL Query - utm_campaign}},
  utm_content: {{URL Query - utm_content}}
}
```

**GA4 맞춤 측정기준**:
- `campaign_source` → utm_source 값
- `campaign_medium` → utm_medium 값
- `campaign_name` → utm_campaign 값

**활용**: 랜딩페이지 방문수 = 기본 노출 지표. 채널별 트래픽 볼륨 비교에 사용.

---

### 이벤트 2: scroll_depth_50

**이벤트명**: `scroll_depth_50`
**설명**: 사용자가 페이지 세로 길이의 50% 지점까지 스크롤했을 때 발생.

**트리거 조건**:
```
트리거 유형: 스크롤 깊이 (Scroll Depth)
스크롤 깊이 유형: 세로 (Percentage)
백분율: 50
조건: 1회만 발생 (페이지 로드당 1회)
페이지 조건: incar-top.tistory.com 랜딩페이지만
```

**GA4 전송 파라미터**:
```javascript
{
  event: 'scroll_depth_50',
  scroll_percentage: 50,
  page_location: window.location.href
}
```

**활용**:
- (scroll_depth_50 / page_view) × 100 = 50% 스크롤 도달률
- 목표: 60% 이상. 경고 임계값: 40% 미만
- 랜딩 상단 콘텐츠 흡입력 지표

---

### 이벤트 3: scroll_depth_75

**이벤트명**: `scroll_depth_75`
**설명**: 사용자가 페이지 세로 길이의 75% 지점까지 스크롤했을 때 발생.

**트리거 조건**:
```
트리거 유형: 스크롤 깊이 (Scroll Depth)
스크롤 깊이 유형: 세로 (Percentage)
백분율: 75
조건: 1회만 발생
페이지 조건: incar-top.tistory.com 랜딩페이지만
```

**GA4 전송 파라미터**:
```javascript
{
  event: 'scroll_depth_75',
  scroll_percentage: 75,
  page_location: window.location.href
}
```

**활용**:
- CTA 말미 위치(보통 80~90% 구간)에 도달 직전 지점으로, 말미 CTA 노출 확률 예측 지표
- scroll_depth_75와 cta_click(말미) 간의 상관관계 분석에 활용

---

### 이벤트 4: scroll_depth_100

**이벤트명**: `scroll_depth_100`
**설명**: 사용자가 페이지 최하단까지 스크롤 완료 시 발생.

**트리거 조건**:
```
트리거 유형: 스크롤 깊이 (Scroll Depth)
스크롤 깊이 유형: 세로 (Percentage)
백분율: 90 (실용적으로 90%를 100% 근사치로 사용)
조건: 1회만 발생
페이지 조건: incar-top.tistory.com 랜딩페이지만
```

> kpi-tracking.md §3.1(지표 11)에서 `scroll_depth_90`으로 정의된 것과 동일.
> 이벤트명은 `scroll_depth_100`으로 통일하되, 트리거는 90%로 설정.

**GA4 전송 파라미터**:
```javascript
{
  event: 'scroll_depth_100',
  scroll_percentage: 90,
  page_location: window.location.href
}
```

**활용**:
- (scroll_depth_100 / page_view) × 100 = 완독률
- 목표: 30% 이상. 경고 임계값: 15% 미만
- 높은 관심도 사용자 세그먼트 식별에 사용

---

### 이벤트 5: cta_click

**이벤트명**: `cta_click`
**설명**: 랜딩페이지 및 블로그 내 CTA 버튼/링크 클릭 시 발생.
3/22 미팅 합의: "CTA 이원화 적용 (중간 정보형 + 말미 상담형)". 두 위치를 구분 추적.

**트리거 조건**:

트리거 A — 중간 CTA (정보형):
```
트리거 유형: 클릭 - 모든 요소 또는 링크 클릭
조건 1: Click Classes 포함 'cta-mid'
    OR Click ID 포함 'cta-mid'
    OR Click URL 포함 'utm_term=cta-mid'
실행 시점: 클릭 직후
```

트리거 B — 말미 CTA (상담형):
```
트리거 유형: 클릭 - 모든 요소 또는 링크 클릭
조건 1: Click Classes 포함 'cta-end'
    OR Click ID 포함 'cta-end'
    OR Click URL 포함 'utm_term=cta-end'
실행 시점: 클릭 직후
```

> **개발 협조 요청**: 랜딩페이지 HTML에서 중간 CTA 버튼에 `class="cta-mid"` 또는 `id="cta-mid"`, 말미 CTA에 `class="cta-end"` 또는 `id="cta-end"` 속성 부여 필요.

**GA4 전송 파라미터**:
```javascript
{
  event: 'cta_click',
  cta_position: 'mid' | 'end',  // 트리거에 따라 구분
  cta_text: {{Click Text}},     // 버튼 텍스트 ("조회해보기", "상담 신청" 등)
  page_location: window.location.href
}
```

**GA4 맞춤 측정기준**:
- `cta_position`: CTA 위치 (mid / end)
- `cta_text`: CTA 버튼 문구

**활용**:
- 중간 CTA vs 말미 CTA 클릭율 비교 (저마찰 문구 효과 검증)
- 3/22 합의: CTA "상담 신청" → "확인해보기", "조회해보기" 교체 후 효과 측정

---

### 이벤트 6: form_start

**이벤트명**: `form_start`
**설명**: 사용자가 문의/상담 신청 폼을 열고 첫 번째 필드에 입력을 시작했을 때 발생.

**트리거 조건**:
```
트리거 유형: 요소 가시성 또는 폼 상호작용
방법 1 (권장): 폼 첫 번째 input/textarea 포커스 이벤트
  조건: {{Form ID}} 또는 {{Form Classes}} 포함 'lead-form'
방법 2 (대안): 폼 컨테이너 첫 클릭
  조건: Click Classes 포함 'lead-form-container'

1회만 발생 (사용자 세션당)
```

> **개발 협조 요청**: 문의 폼 HTML에 `id="lead-form"` 속성 부여 필요.

**GA4 전송 파라미터**:
```javascript
{
  event: 'form_start',
  form_id: 'lead-form',
  page_location: window.location.href
}
```

**활용**:
- form_start 건수 = 폼 열기 의도 지표
- 목표: 일 3~5건, 월 90건
- form_complete / form_start = 폼 완료율 (목표 70% 이상, 경고 30% 미만)

---

### 이벤트 7: form_complete (주전환 이벤트)

**이벤트명**: `form_complete`
**설명**: 사용자가 문의/상담 신청 폼을 완전히 제출하고 제출 완료 응답(또는 감사 페이지 도달) 시 발생. **캠페인의 핵심 전환 이벤트**.

**트리거 조건**:

방법 1 — 감사 페이지 URL 도달 (권장):
```
트리거 유형: 페이지뷰
조건: Page URL 포함 '/apply/thanks' 또는 '/apply/complete'
실행 시점: 감사 페이지 로드 시
```

방법 2 — 폼 제출 성공 이벤트 (감사 페이지 없는 경우):
```
트리거 유형: 폼 제출 (Form Submission)
조건: Form ID = 'lead-form'
추가 조건: 폼 유효성 검사 통과 (JavaScript 커스텀 이벤트 'formSubmitSuccess' 수신 시)
```

> **개발 협조 요청**: 폼 제출 성공 시 `window.dataLayer.push({event: 'formSubmitSuccess'})` 코드 삽입 또는 감사 페이지 URL 구성 필요.

**GA4 전송 파라미터**:
```javascript
{
  event: 'form_complete',
  form_id: 'lead-form',
  conversion_type: 'lead',
  campaign: {{URL Query - utm_campaign}},    // AB_A_snu, AB_B_incar, recruiting-w{n}
  channel: {{URL Query - utm_source}},       // meta, google, naver, tistory 등
  cta_origin: {{Cookie - cta_position}},    // 어떤 CTA에서 폼에 진입했는지 (선택)
  page_location: window.location.href
}
```

**GA4 맞춤 측정기준**:
- `conversion_type`: lead
- `campaign`: utm_campaign 값 (A/B 그룹 식별용)
- `channel`: utm_source 값 (채널별 CPL 계산용)

**GA4 전환 이벤트 지정**: `form_complete`를 GA4에서 전환(Conversion)으로 표시.

**활용**:
- 캠페인의 핵심 KPI: 일 1~2건, 주 7~14건, 월 30건 목표
- CPL = 채널 광고비 / form_complete 수
- 24시간 연속 0건 = 즉시 알림 트리거 (kpi-tracking.md §4.4)

---

### 이벤트 8: phone_click

**이벤트명**: `phone_click`
**설명**: 랜딩페이지의 전화번호 링크(`tel:` 스킴)를 클릭했을 때 발생. 주로 모바일 사용자.

**트리거 조건**:
```
트리거 유형: 링크 클릭
조건: Click URL 시작 'tel:'
  OR Click Classes 포함 'phone-link'
  OR Click Element 태그 = 'a' AND Click URL 포함 '010'

실행 시점: 클릭 직후
```

> **개발 협조 요청**: 전화번호 링크에 `class="phone-link"` 속성 부여 필요.
> 형식 예시: `<a href="tel:010-XXXX-XXXX" class="phone-link">010-XXXX-XXXX</a>`

**GA4 전송 파라미터**:
```javascript
{
  event: 'phone_click',
  phone_number: {{Click URL}},   // 'tel:010-...' 형태
  device_category: {{Device Category}},  // mobile / desktop
  page_location: window.location.href
}
```

**GA4 전환 이벤트 지정**: 조건부 전환 지정 권장 (phone_click이 form_complete와 이중 카운트되지 않도록 별도 집계).

**활용**:
- 목표: 월 10회 이상. 경고 임계값: 월 3회 미만
- 모바일 직접 전화 의도 사용자 파악
- phone_click 높고 form_complete 낮으면 → 폼 장벽이 높다는 신호

---

## GTM 변수 설정

이벤트 파라미터 수집을 위해 아래 GTM 변수를 사전 생성합니다.

### URL 쿼리 변수 (Query String Variables)

| 변수명 | 유형 | 쿼리 파라미터 |
|--------|------|-------------|
| `URL Query - utm_source` | URL | utm_source |
| `URL Query - utm_medium` | URL | utm_medium |
| `URL Query - utm_campaign` | URL | utm_campaign |
| `URL Query - utm_content` | URL | utm_content |
| `URL Query - utm_term` | URL | utm_term |

### 클릭 관련 내장 변수 (활성화 필요)

GTM 관리자 > 변수 > 내장 변수 구성에서 아래 항목 활성화:

- Click Element
- Click Classes
- Click ID
- Click Target
- Click URL
- Click Text

### 스크롤 관련 내장 변수 (활성화 필요)

- Scroll Depth Threshold
- Scroll Depth Units
- Scroll Direction

### 폼 관련 내장 변수 (활성화 필요)

- Form Classes
- Form Element
- Form ID
- Form Target
- Form Text
- Form URL

---

## GA4 맞춤 측정기준 및 측정항목

GA4 관리자 > 속성 > 맞춤 정의에서 아래 항목을 추가합니다.

### 이벤트 범위 맞춤 측정기준 (Event-scoped Custom Dimensions)

| 측정기준명 | 파라미터명 | 관련 이벤트 |
|-----------|-----------|-----------|
| 캠페인 소스 | `campaign_source` | page_view, form_complete |
| 캠페인 매체 | `campaign_medium` | page_view, form_complete |
| 캠페인명 | `campaign_name` | page_view, form_complete |
| 전환 유형 | `conversion_type` | form_complete |
| CTA 위치 | `cta_position` | cta_click |
| CTA 텍스트 | `cta_text` | cta_click |
| 채널 | `channel` | form_complete |
| A/B 캠페인 그룹 | `ab_campaign` | form_complete (campaign 파라미터) |

---

## 설치 순서 (우선순위 기준)

### Step 1: 즉시 (P0, 오늘)

1. GTM 컨테이너에 내장 변수 활성화 (클릭/스크롤/폼)
2. URL 쿼리 변수 5개 생성 (utm_source ~ utm_term)
3. `page_view` 태그 및 트리거 생성 후 GA4 측정 ID 연결
4. `form_complete` 태그 및 트리거 생성 (캠페인의 핵심)
5. `form_start` 태그 및 트리거 생성
6. GTM 미리보기 모드로 page_view, form_start, form_complete 동작 확인
7. GTM 게시 (Publish)

### Step 2: 당일 완료

8. `scroll_depth_50`, `scroll_depth_75`, `scroll_depth_100` 트리거 및 태그 생성
9. `cta_click` (중간/말미 구분) 트리거 및 태그 생성
10. `phone_click` 트리거 및 태그 생성
11. GTM 미리보기에서 전체 이벤트 동작 확인
12. GTM 게시

### Step 3: 설치 다음 날

13. GA4 실시간 보고서에서 이벤트 수신 확인
14. GA4에서 `form_complete` 전환 이벤트로 표시
15. GA4 맞춤 측정기준 등록 (campaign_source, campaign_medium 등)
16. kpi-tracking.md §7.1 체크리스트 항목 완료 표시

---

## 검증 체크리스트

설치 완료 후 GTM 미리보기 모드에서 아래를 직접 확인합니다.

```
[ ] 랜딩페이지 접속 시 page_view 이벤트 발생
    → GA4 실시간 보고서에서 확인

[ ] 페이지 50% 스크롤 시 scroll_depth_50 이벤트 발생

[ ] 페이지 75% 스크롤 시 scroll_depth_75 이벤트 발생

[ ] 페이지 90% 스크롤 시 scroll_depth_100 이벤트 발생

[ ] 중간 CTA 클릭 시 cta_click (cta_position=mid) 이벤트 발생

[ ] 말미 CTA 클릭 시 cta_click (cta_position=end) 이벤트 발생

[ ] 폼 첫 필드 클릭/입력 시 form_start 이벤트 발생

[ ] 폼 제출 완료 시 form_complete 이벤트 발생
    → GA4 전환 보고서에서 확인

[ ] 전화번호 링크 클릭 시 phone_click 이벤트 발생

[ ] 각 이벤트의 utm_source, utm_medium, utm_campaign 파라미터 정상 수집
    → UTM이 붙은 URL로 테스트 (예: ?utm_source=meta&utm_medium=cpc_snu&utm_campaign=AB_A_snu)
```

---

## 트러블슈팅

### 문제: form_complete가 발생하지 않음

1. GA4 실시간 보고서 확인 → 클릭은 있고 form_complete만 없는 경우
2. GTM 미리보기 > 폼 제출 이벤트 탭 확인
3. 원인 A: 폼 유효성 검사 실패 (필드 오류) → 폼 코드 확인
4. 원인 B: 감사 페이지 URL이 다름 → 트리거의 URL 조건 수정
5. 원인 C: dataLayer.push가 없는 경우 → 개발팀에 삽입 요청

### 문제: scroll_depth 이벤트가 중복 발생

1. 트리거 설정에서 "이 트리거 1회만 실행" 옵션 확인
2. GTM 미리보기에서 스크롤 이벤트 수 확인 (페이지당 1회 기대)

### 문제: cta_click 이벤트가 발생하지 않음

1. GTM 미리보기 > 클릭 이벤트 확인
2. Click Classes 또는 Click URL 변수값 확인
3. 개발팀에 HTML의 CTA 버튼 class 속성 부여 여부 확인

### 문제: utm 파라미터가 undefined로 수집

1. GTM URL 쿼리 변수 설정 확인 (쿼리 파라미터 이름 정확히 입력)
2. 테스트 URL에 UTM이 실제로 붙어 있는지 확인
3. GA4 이벤트 파라미터 탭에서 값 직접 확인

---

**문서 작성**: 2026-03-27
**버전**: 1.0
**다음 검토**: GTM 설치 완료 확인 후 (설치일 + 1일)
