2026-09-08 작업분. GA4 에서 AI 답변엔진 유입을 채널로 갈라 보는 뼈대를 세웠다. - data/ai_channels.json: AI 답변엔진 리퍼러 목록(채널 그룹 정의의 근거) - scripts/ga4_ai_traffic.py: GA4 Data API 로 AI 유입을 뽑는 러너. --mock 으로 합성 데이터 검증까지 마쳤다. 실제 속성 연결은 GCP 계정이 정해진 뒤다 - supporters/src/layouts/Base.astro + 템플릿 site.json 2곳: ga4MeasurementId 태그. 쿠키 고지 배너 결정 전까지 미리보기에는 ID 를 넣지 않는다 - scripts/build_discovery_report.ts: Integrity 절에 "측정 가능 범위" 를 넣어 무엇을 재고 무엇을 못 재는지 리포트가 스스로 밝히게 했다 - 원진 진단 리포트 v2.1(HTML·PDF) 재생성분 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
58 lines
3.3 KiB
Markdown
58 lines
3.3 KiB
Markdown
# GA4 AI 검색 유입 연동 안내 v0.1
|
|
|
|
작성 2026-09-08 · 스크립트 `scripts/ga4_ai_traffic.py` · 분류 기준 `data/ai_channels.json` · 태그 `supporters/src/layouts/Base.astro`
|
|
|
|
## 1. 구조
|
|
|
|
| 대상 | 누가 계측하는가 | 필요한 것 |
|
|
|---|---|---|
|
|
| 서포터즈 사이트 | INFINITH가 직접. `site.json`의 `ga4MeasurementId`(G-XXXX)를 넣으면 빌드 시 태그가 들어간다 | INFINITH GA4 속성 1개(병원별 데이터 스트림) |
|
|
| 병원 공식 사이트 | 병원이 이미 쓰는 GA4 속성에 INFINITH 서비스 계정을 뷰어로 추가 | 병원 GA4 관리자 권한자 1명, 5분 |
|
|
|
|
코드 설치는 없다. 병원 사이트에 GA4가 없으면 태그 설치가 먼저이고 그건 병원 웹 담당자 일이다.
|
|
|
|
## 2. 연동 절차 (병원 사이트)
|
|
|
|
1. INFINITH: Google Cloud 프로젝트에서 Google Analytics Data API 사용 설정, 서비스 계정 생성, 키(JSON) 발급. `.env`에 `GA4_SERVICE_ACCOUNT_JSON=<경로>`. 계정은 haewon이 지정한다(이전 GCP 재인증 이슈 있음).
|
|
2. 병원: GA4 관리 → 속성 액세스 관리 → 사용자 추가 → 서비스 계정 이메일, 역할 **뷰어**.
|
|
3. 병원: 속성 ID(숫자 9자리) 전달.
|
|
4. INFINITH: `python3 scripts/ga4_ai_traffic.py --property <ID> --days 90 --clinic <id> --out docs/reports/<id>/05_ai_traffic`.
|
|
5. 월간 실행 → 리포트 카드와 병원 확인 패널에 붙인다(다음 단계).
|
|
|
|
API 없이 받을 때: 병원이 GA4 탐색에서 날짜·세션 소스·세션 매체·방문 페이지·세션수·주요 이벤트를 CSV로 내보내면 `--from-csv`로 같은 리포트를 만든다.
|
|
|
|
## 3. AI 채널 분류 규칙
|
|
|
|
`data/ai_channels.json` 한 곳에서 관리한다. 세션 출처 호스트(경계 일치)와 `utm_source`로 묶는다.
|
|
|
|
| 채널 | 측정 | 이유 |
|
|
|---|---|---|
|
|
| ChatGPT | 가능 | 링크에 utm_source=chatgpt.com |
|
|
| Gemini, Claude | 가능 | 고유 리퍼러 |
|
|
| Perplexity, Copilot, 기타 AI | 일부만 | 리퍼러를 자주 비움 → direct로 섞임 |
|
|
| Google AI Overview · AI Mode | 불가 | google / organic과 구분되지 않음 |
|
|
| 네이버 AI 브리핑 | 불가 | search.naver.com과 구분되지 않음 |
|
|
|
|
리포트마다 "측정 가능 범위" 절이 자동으로 들어간다. 불가 채널에는 숫자를 만들지 않는다.
|
|
|
|
## 4. 키 이벤트
|
|
|
|
서포터즈 사이트 태그가 보내는 이벤트. GA4에서 **주요 이벤트로 표시**해야 전환으로 집계된다.
|
|
|
|
| 이벤트 | 조건 |
|
|
|---|---|
|
|
| click_tel | `tel:` 링크 |
|
|
| click_reservation | 헤더 상담 예약 버튼(`a.cta`) 또는 `data-ga="reservation"` |
|
|
| click_clinic_site | `data-ga="clinic-site"` (병원 홈페이지 이동) |
|
|
| click_map | `data-ga="map"` (지도·길찾기) |
|
|
|
|
## 5. 개인정보
|
|
|
|
GA4 태그는 쿠키를 쓴다. `anonymize_ip`는 켜 두었다. 쿠키 고지 배너를 넣을지, 쿠키 없는 대안(서버 로그, Vercel Web Analytics)으로 갈지는 haewon 결정 대기. 결정 전까지 서포터즈 미리보기(noindex)에는 측정 ID를 넣지 않는다.
|
|
|
|
## 6. 남은 일
|
|
|
|
- 리포트 카드(`build_discovery_report.ts`)에 AI 유입 요약 카드와 실측 언급률 동일 시간축 그래프.
|
|
- 병원 확인 패널(`/supporters/:id`)에 "GA4 뷰어 추가" 안내와 속성 ID 입력란.
|
|
- 월간 실행을 워커 또는 cron에.
|