# 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 --days 90 --clinic --out docs/reports//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에.