Skip to content

feat(analytics): GA4 UTM 캠페인 파라미터 수집 - #133

Open
minbros wants to merge 1 commit into
mainfrom
codex/ga4-utm-page-location
Open

feat(analytics): GA4 UTM 캠페인 파라미터 수집#133
minbros wants to merge 1 commit into
mainfrom
codex/ga4-utm-page-location

Conversation

@minbros

@minbros minbros commented Aug 7, 2026

Copy link
Copy Markdown
Member

변경 사항

  • page_location에 GA4 표준 UTM 캠페인 파라미터 허용 목록을 적용했습니다.
  • 로그인·비로그인 라우트 트래커가 실제 window.location.search를 페이지뷰 생성에 전달하도록 변경했습니다.
  • 검색어·초대 코드 등 허용되지 않은 쿼리와 해시는 계속 제거하고, page_pathpage_referrer에는 쿼리를 포함하지 않습니다.
  • 회귀 테스트와 GA4 운영·배포 확인 문서를 갱신했습니다.

배경

기존 URL 정규화가 개인정보 보호를 위해 모든 쿼리를 제거하면서, 동의한 사용자의 UTM 캠페인 정보도 page_location에서 사라져 GA4 수동 캠페인 획득 분석에 사용할 수 없었습니다.

영향

표준 UTM으로 태깅한 캠페인의 유입 정보는 GA4에 전달되며, 그 밖의 URL 식별 정보에 대한 기존 보호 정책은 유지됩니다.

검증

  • npm test: 55개 파일, 242개 테스트 통과
  • npx tsc --noEmit: 통과
  • 변경된 TS/TSX 파일 ESLint: 통과
  • git diff --check: 통과
  • npm run lint: 저장소 기존 파일의 기준선 문제로 실패(34 errors, 20 warnings). 이번 변경 파일에는 오류가 없습니다.

Summary by CodeRabbit

  • 개선 사항

    • 페이지 조회 분석에서 표준 UTM 캠페인 정보만 수집하도록 정리했습니다.
    • 기타 쿼리 문자열과 URL 해시는 분석 데이터에서 제외됩니다.
    • 페이지 경로와 리퍼러에서 불필요한 쿼리 정보가 제거됩니다.
    • 잘못된 형식의 URL에서도 분석 정보가 안정적으로 기록됩니다.
  • 문서

    • UTM 값에 개인정보나 사용자 입력값을 포함하지 않도록 운영 지침을 추가했습니다.
    • 배포 전 캠페인 보고, 쿼리 제거, 리퍼러 정규화 및 개인정보 검증 항목을 보강했습니다.

- page_location에 표준 UTM 허용 목록 적용
- 라우트 트래커에서 현재 검색 문자열 전달
- 운영 문서 및 회귀 테스트 갱신
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
frontend-server Ready Ready Preview Aug 7, 2026 7:54am

Request Review

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

GA4 페이지뷰가 현재 URL의 검색 문자열을 받아 허용된 UTM 파라미터만 page_location에 포함하도록 변경했습니다. 비표준 쿼리와 해시는 제거합니다. 라우트 추적기, 테스트, 운영 문서를 갱신했습니다.

Changes

GA4 캠페인 추적

Layer / File(s) Summary
UTM 정규화와 페이지뷰 계약
src/lib/analytics/context.ts
AnalyticsPageViewInputsearch를 추가했습니다. 허용된 UTM 파라미터만 trim 및 재직렬화합니다. 정규화된 캠페인 쿼리를 page_location에 포함합니다.
라우트 검색 문자열 전달
src/components/analytics/AnalyticsRouteTracker.tsx, src/components/analytics/AnonymousAnalyticsRouteTracker.tsx
두 라우트 추적기가 window.location.search를 페이지뷰 입력에 전달합니다.
정규화 검증과 운영 정책
src/lib/analytics/context.test.ts, docs/analytics/ga4-operations.md
표준 UTM 보존, 비표준 쿼리 및 해시 제거, 외부 리퍼러 정규화를 테스트합니다. 운영 문서에 허용 목록과 배포 전 검증 항목을 추가했습니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant AnalyticsRouteTracker
  participant buildAnalyticsPageView
  participant analyticsPageLocation
  Browser->>AnalyticsRouteTracker: 현재 URL의 search 제공
  AnalyticsRouteTracker->>buildAnalyticsPageView: search 전달
  buildAnalyticsPageView->>analyticsPageLocation: origin, path, search 전달
  analyticsPageLocation-->>buildAnalyticsPageView: UTM만 포함한 page_location 반환
Loading

Possibly related PRs

  • uttae/frontend-server#120: 동일한 GA4 URL 및 페이지뷰 정규화 영역을 수정했으며, 이 변경은 UTM 허용 목록 처리를 확장합니다.
  • uttae/frontend-server#121: 동일한 분석 컨텍스트와 라우트 추적기 변경을 기반으로 UTM 검색 문자열 처리를 확장합니다.
  • uttae/frontend-server#122: AnonymousAnalyticsRouteTracker를 수정했으며, 이 변경은 해당 추적기에 UTM 검색 문자열 전달을 추가합니다.

Poem

당근 들고 URL 길을 달려
허용된 UTM만 살포시 남겨
해시와 잡음은 굴속으로 보내고
페이지뷰에는 맑은 길을 그려
깡총, GA4 기록이 반짝여! 🐇

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 GA4 UTM 캠페인 파라미터 수집이라는 변경의 핵심 목적을 정확하고 간결하게 설명합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/lib/analytics/context.ts (1)

197-203: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

page_location의 실제 전송을 통합 테스트로 확인하세요.

src/lib/analytics/context.test.ts:133-150은 정규화 결과를 확인합니다. 그러나 src/lib/analytics/client.test.ts:114-159page_view에서 page_path만 확인합니다. 클라이언트가 page_location을 누락해도 현재 테스트가 통과할 수 있습니다.

정규화된 UTM이 포함된 page_location이 실제 page_view 명령에 도착하는지 확인하는 어서션을 추가하세요. 두 라우트 트래커의 window.location.search 전달도 통합 테스트에서 확인하세요.

근거: src/lib/analytics/client.test.ts:114-159의 현재 어서션은 page_path만 검증합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/analytics/context.ts` around lines 197 - 203,
AnalyticsPageViewParams의 page_location이 실제 page_view 전송 명령에 포함되는지 client 통합 테스트의
기존 page_path 검증에 어서션을 추가하세요. 정규화된 UTM 쿼리 문자열이 유지되는지 확인하고, 두 라우트 트래커가
window.location.search를 page-view 입력으로 전달하는 경우도 통합 테스트에서 검증하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/lib/analytics/context.ts`:
- Around line 197-203: AnalyticsPageViewParams의 page_location이 실제 page_view 전송
명령에 포함되는지 client 통합 테스트의 기존 page_path 검증에 어서션을 추가하세요. 정규화된 UTM 쿼리 문자열이 유지되는지
확인하고, 두 라우트 트래커가 window.location.search를 page-view 입력으로 전달하는 경우도 통합 테스트에서 검증하세요.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f5a48de0-a705-4235-bbdd-37cd41e0fc49

📥 Commits

Reviewing files that changed from the base of the PR and between ffeb55d and ddc81a2.

📒 Files selected for processing (5)
  • docs/analytics/ga4-operations.md
  • src/components/analytics/AnalyticsRouteTracker.tsx
  • src/components/analytics/AnonymousAnalyticsRouteTracker.tsx
  • src/lib/analytics/context.test.ts
  • src/lib/analytics/context.ts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant