Renumber 12 existing skills to new ranges: - SEO: 11→13, 12→18, 13→16, 14→17, 15→14, 16→15, 17→29, 18→30, 19→12 - GTM: 20→60, 21→61, 22→62 Update cross-references in gateway architect/builder skills, GTM guardian README, CLAUDE.md (skill tables + directory layout), and AGENTS.md (domain routing ranges). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
194 lines
3.8 KiB
Markdown
194 lines
3.8 KiB
Markdown
# DataLayer Schema Reference
|
|
|
|
GA4 권장 이벤트 기반 DataLayer 스키마 정의.
|
|
|
|
## Core Principles
|
|
|
|
1. GTM 스니펫 이전에 dataLayer 초기화
|
|
2. 이벤트 발생 시점에 push (사전 아님)
|
|
3. ecommerce 객체는 push 전 clear 필수
|
|
4. PII 데이터 직접 수집 금지
|
|
|
|
## Base Structure
|
|
|
|
### Page Load
|
|
```javascript
|
|
window.dataLayer = window.dataLayer || [];
|
|
dataLayer.push({
|
|
'event': 'page_data',
|
|
'page': {
|
|
'type': 'home|category|product|cart|checkout|thankyou|content|search',
|
|
'name': 'Page Name',
|
|
'category': 'Category/Subcategory',
|
|
'language': 'ko'
|
|
},
|
|
'user': {
|
|
'status': 'logged_in|logged_out',
|
|
'id': 'hashed_user_id', // SHA256, 로그인 시에만
|
|
'type': 'new|returning|member|guest',
|
|
'loginMethod': 'email|kakao|naver|google'
|
|
}
|
|
});
|
|
```
|
|
|
|
## E-commerce Events
|
|
|
|
### view_item
|
|
```javascript
|
|
dataLayer.push({ ecommerce: null });
|
|
dataLayer.push({
|
|
'event': 'view_item',
|
|
'ecommerce': {
|
|
'currency': 'KRW',
|
|
'value': 29000,
|
|
'items': [{
|
|
'item_id': 'SKU_12345',
|
|
'item_name': 'Product Name',
|
|
'item_brand': 'Brand Name',
|
|
'item_category': 'Category',
|
|
'item_variant': 'Blue / Large',
|
|
'price': 29000,
|
|
'quantity': 1
|
|
}]
|
|
}
|
|
});
|
|
```
|
|
|
|
### add_to_cart
|
|
```javascript
|
|
dataLayer.push({ ecommerce: null });
|
|
dataLayer.push({
|
|
'event': 'add_to_cart',
|
|
'ecommerce': {
|
|
'currency': 'KRW',
|
|
'value': 29000,
|
|
'items': [{
|
|
'item_id': 'SKU_12345',
|
|
'item_name': 'Product Name',
|
|
'price': 29000,
|
|
'quantity': 1
|
|
}]
|
|
}
|
|
});
|
|
```
|
|
|
|
### begin_checkout
|
|
```javascript
|
|
dataLayer.push({ ecommerce: null });
|
|
dataLayer.push({
|
|
'event': 'begin_checkout',
|
|
'ecommerce': {
|
|
'currency': 'KRW',
|
|
'value': 58000,
|
|
'coupon': 'WELCOME10',
|
|
'items': [/* cart items */]
|
|
}
|
|
});
|
|
```
|
|
|
|
### purchase
|
|
```javascript
|
|
dataLayer.push({ ecommerce: null });
|
|
dataLayer.push({
|
|
'event': 'purchase',
|
|
'ecommerce': {
|
|
'transaction_id': 'T_20250115_001',
|
|
'affiliation': 'Store Name',
|
|
'value': 53000,
|
|
'tax': 4818,
|
|
'shipping': 3000,
|
|
'currency': 'KRW',
|
|
'coupon': 'WELCOME10',
|
|
'items': [{
|
|
'item_id': 'SKU_12345',
|
|
'item_name': 'Product Name',
|
|
'price': 29000,
|
|
'quantity': 1
|
|
}]
|
|
}
|
|
});
|
|
```
|
|
|
|
## Lead Gen Events
|
|
|
|
### generate_lead
|
|
```javascript
|
|
dataLayer.push({
|
|
'event': 'generate_lead',
|
|
'currency': 'KRW',
|
|
'value': 50000,
|
|
'lead': {
|
|
'source': 'contact_form|landing_page',
|
|
'type': 'inquiry|quote_request'
|
|
}
|
|
});
|
|
```
|
|
|
|
### form_submit
|
|
```javascript
|
|
dataLayer.push({
|
|
'event': 'form_submit',
|
|
'form': {
|
|
'id': 'contact_form',
|
|
'name': 'Contact Us Form',
|
|
'type': 'contact',
|
|
'success': true
|
|
}
|
|
});
|
|
```
|
|
|
|
## Engagement Events
|
|
|
|
### login / sign_up
|
|
```javascript
|
|
dataLayer.push({
|
|
'event': 'login', // or 'sign_up'
|
|
'method': 'email|kakao|naver|google'
|
|
});
|
|
```
|
|
|
|
### search
|
|
```javascript
|
|
dataLayer.push({
|
|
'event': 'search',
|
|
'search_term': 'user search query',
|
|
'search': {
|
|
'results_count': 42,
|
|
'category': 'product|content'
|
|
}
|
|
});
|
|
```
|
|
|
|
## Item Object Reference
|
|
|
|
| Parameter | Type | Required | Description |
|
|
|-----------|------|----------|-------------|
|
|
| item_id | string | Yes | SKU |
|
|
| item_name | string | Yes | 상품명 |
|
|
| price | number | Yes | 단가 |
|
|
| quantity | number | Yes | 수량 |
|
|
| item_brand | string | No | 브랜드명 |
|
|
| item_category | string | No | 카테고리 |
|
|
| item_category2-5 | string | No | 하위 카테고리 |
|
|
| item_variant | string | No | 옵션 |
|
|
| coupon | string | No | 쿠폰 코드 |
|
|
| discount | number | No | 할인 금액 |
|
|
| index | number | No | 목록 위치 |
|
|
|
|
## Validation Rules
|
|
|
|
```javascript
|
|
// ✅ Correct
|
|
'price': 29000 // number
|
|
'quantity': 1 // number
|
|
'currency': 'KRW' // uppercase
|
|
|
|
// ❌ Wrong
|
|
'price': '29000' // string
|
|
'currency': 'krw' // lowercase
|
|
```
|
|
|
|
### Array Limits
|
|
- items[]: 최대 200개
|
|
- 초과 시 분할 전송
|