productivity Claude Code Google Analytics Performance Automation

Claude Code 스킬로 블로그 트래픽 리포트 자동화하기

GA 대시보드 들여다보는 대신 /ga-report 한 줄로 트래픽과 성능을 확인합니다. Google Analytics 연동부터 스킬 구현, 실제 성능 개선 사례까지 공유합니다.

블로그 트래픽, 어떻게 확인하고 계신가요

블로그를 운영하면 트래픽이 궁금해집니다. 글을 올리면 얼마나 봤는지, 어디서 들어왔는지 확인하고 싶어집니다.

보통은 이런 루틴이 됩니다:

  1. Google Analytics 접속
  2. 대시보드에서 숫자 확인
  3. “이 숫자가 좋은 건가? 나쁜 건가?” 해석
  4. 어떤 콘텐츠가 잘 나가는지, 어디서 유입이 많은지 분석
  5. 그래서 뭘 해야 하지?

GA 대시보드를 열어서 숫자를 확인하는 건 금방인데, 그 숫자가 의미하는 바를 해석하고 다음 행동을 결정하는 게 번거롭습니다. 그래서 Claude Code 스킬로 자동화했습니다.

/ga-report

이 한 줄로 트래픽 요약, 인기 콘텐츠, PageSpeed 점수까지 한 번에 확인합니다.


Google Analytics 연동하기

스킬이 GA 데이터를 가져오려면 API 연동이 필요합니다.

1. GA4 Property ID 확인

GA4 관리 페이지에서 Property ID를 확인합니다:

관리 → 속성 설정 → 속성 → 속성 세부정보

9자리 숫자 형태입니다 (예: 123456789).

2. 서비스 계정 생성

Google Cloud Console에서 서비스 계정을 만들고 JSON 키를 다운로드합니다:

  1. Google Cloud Console 접속
  2. 프로젝트 선택 (없으면 생성)
  3. APIs & Services → Credentials → Create Credentials → Service Account
  4. 이름 입력 후 생성
  5. Keys → Add Key → Create new key → JSON 다운로드
  6. 파일을 안전한 위치에 저장 (예: ~/.config/gcloud/ga-service-account.json)

3. GA4에 서비스 계정 권한 부여

GA4가 이 서비스 계정의 요청을 허용하도록 설정합니다:

  1. GA4 관리 페이지 → 속성 액세스 관리
  2. 사용자 추가 클릭
  3. 서비스 계정 이메일 입력 (예: xxx@project-id.iam.gserviceaccount.com)
  4. 역할: 뷰어 선택

GA4 속성 액세스 관리

4. Analytics Data API 활성화

Google Cloud Console에서 API를 활성화합니다:

APIs & Services → Library → "Google Analytics Data API" 검색 → Enable

5. 사이트에 GA 스크립트 삽입

사이트에서 데이터를 수집하려면 GA 스크립트를 삽입해야 합니다. Google에서 제공하는 표준 스니펫을 <head>에 추가합니다:

<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'GA_MEASUREMENT_ID');
</script>

Measurement ID를 환경변수로 관리하면 로컬 개발 시 GA가 로드되지 않도록 조건 처리할 수 있습니다.


Claude Code 스킬로 리포트 자동화

스킬 구조

Claude Code 스킬은 SKILL.md와 스크립트로 구성됩니다:

.claude/skills/ga-report/
├── SKILL.md # 스킬 설명 + 워크플로우
├── scripts/
│ └── fetch-ga4.py # GA4 API 호출 스크립트
└── references/
└── metrics-glossary.md # 메트릭 설명 (옵션)

SKILL.md

스킬이 언제 호출되고 어떻게 동작하는지 정의합니다:

---
name: ga-report
description: GA4 데이터를 분석하여 트래픽 보고서와 인사이트를 생성합니다.
"/ga-report", "블로그 보고서 부탁해", "이번 주 트래픽", "인기 콘텐츠" 등의 요청 시 사용합니다.
---

Python 스크립트

GA4 API를 호출해서 데이터를 가져오고, 인사이트를 생성합니다:

from google.oauth2 import service_account
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest, DateRange, Metric
# 인증
credentials = service_account.Credentials.from_service_account_file(
"~/.config/gcloud/ga-service-account.json"
)
client = BetaAnalyticsDataClient(credentials=credentials)
# 트래픽 요약 조회
request = RunReportRequest(
property=f"properties/{PROPERTY_ID}",
date_ranges=[DateRange(start_date="7daysAgo", end_date="today")],
metrics=[
Metric(name="activeUsers"),
Metric(name="sessions"),
Metric(name="screenPageViews"),
Metric(name="bounceRate"),
],
)
response = client.run_report(request)

스크립트 전체 구조

실제 스크립트는 약 800줄로, 데이터 수집부터 인사이트 생성까지 파이프라인으로 구성됩니다:

main()
├── 데이터 수집
│ ├── get_traffic_summary() # 트래픽 요약
│ ├── get_top_pages() # 인기 페이지
│ ├── get_traffic_sources() # 채널별 분석
│ ├── get_daily_trend() # 일별 추이
│ └── get_pagespeed_data() # PageSpeed API
├── 패턴 분석
│ ├── detect_trends() # 상승/하락 추세
│ ├── detect_anomalies() # 트래픽 급증/급감
│ ├── analyze_channels() # 채널 효율성
│ └── analyze_pagespeed() # 성능 문제
└── 결과 생성
├── generate_insights() # 인사이트 종합
└── generate_actions() # 액션 제안

주요 함수들:

def get_pagespeed_data(url: str, strategy: str = "mobile") -> dict:
"""PageSpeed Insights API 호출 → Core Web Vitals 반환"""
def detect_trends(daily_trend: list) -> list:
"""N일 연속 상승/하락 패턴 감지"""
def detect_anomalies(daily_trend: list) -> list:
"""Z-score 기반 트래픽 급증/급감 탐지"""
def analyze_channels(sources: list) -> list:
"""높은 유입 + 높은 이탈 채널, 누락된 채널 분석"""
def generate_insights(summary, top_pages, sources, ...) -> list:
"""모든 분석 결과를 종합해서 인사이트 생성"""
def generate_actions(summary, top_pages, channel_insights, ...) -> list:
"""인사이트 기반 우선순위별 액션 제안"""

가져오는 데이터

항목설명
트래픽 요약사용자, 세션, 페이지뷰, 이탈률, 평균 체류 시간
인기 페이지조회수 + 참여도 기준 Top 10
트래픽 소스Direct, Organic Social, Search 비율
일별 추이최근 N일 트래픽 변화
PageSpeedPerformance, SEO, Core Web Vitals

자동 인사이트

단순히 숫자만 보여주는 게 아니라, 패턴을 분석해서 인사이트를 생성합니다:

# 트렌드 감지
if 3일_연속_상승:
insights.append("상승 추세")
# 채널 분석
if 높은_유입 and 높은_이탈률:
insights.append(f"{채널}에서 유입 많지만 이탈률 높음")
# 검색 유입 체크
if "Organic Search" not in sources:
insights.append("검색 유입 없음 - SEO 기회")

권장 액션

인사이트를 바탕으로 우선순위별 액션을 제안합니다:

📋 권장 액션
1. [High] LCP 개선 (18.74s → 2.5s 목표)
2. [High] LinkedIn 랜딩 경험 최적화
3. [Medium] SEO 메타 태그 추가

실제 사용과 성능 개선

문제 발견

스킬을 만들고 실행해보니 이런 결과가 나왔습니다:

ga-report 터미널 실행

⚡ 페이지 성능 (mobile)
🟡 Performance: 55/100
🟢 SEO: 100/100
Core Web Vitals:
LCP: 18.74s (Poor)
💡 인사이트
• 성능 점수 개선 필요 (55점)
• LCP 느림 (18.74s) - 이미지/폰트 최적화 필요
📋 권장 액션
1. [High] LCP 개선 (18.74s → 2.5s 목표)

체감상 빠르게 느껴졌는데 LCP가 18초라니. PageSpeed Insights는 느린 4G + 저사양 모바일을 시뮬레이션하기 때문에 실제 체감과 다를 수 있습니다.

원인 분석

무엇이 느린지 확인해보니:

리소스크기
Pretendard-Regular.woff2767KB
Pretendard-Medium.woff2780KB
Pretendard-SemiBold.woff2787KB
Pretendard-Bold.woff2792KB
합계3.1MB

Pretendard 폰트 4개가 각각 로드되고 있었습니다. 느린 4G 환경(1.6Mbps)에서 3.1MB를 다운로드하면 약 15초가 걸립니다. (1.6 Megabits/s ÷ 8 = 0.2 Megabytes/s)

최적화 적용

몇 가지 옵션을 비교했습니다:

옵션크기유지보수
현재 (Static 4개)3.1MB-
Variable 전체2.0MB쉬움
Variable + Dynamic Subset~200KB쉬움

Variable + Dynamic Subset을 선택했습니다. 페이지에 사용된 글자만 로드하는 방식입니다:

<!-- 변경 전 -->
<link href=".../static/pretendard.min.css" />
<!-- 변경 후 -->
<link href=".../variable/pretendardvariable-dynamic-subset.min.css" />

결과

다시 /ga-report를 실행해서 확인했습니다:

PageSpeed 개선 후

지표이전이후개선
Performance55점68점+13점
LCP18.74s5.47s-71%
폰트 크기3.1MB~200KB-94%

목표(LCP 2.5초)에는 아직 못 미치지만, 폰트 하나 바꾸는 것만으로 큰 개선을 이뤘습니다.


스킬 하나로 바뀐 것

측정 → 발견 → 개선 사이클

/ga-report 한 줄로 트래픽과 성능을 함께 확인합니다. 자주 확인하게 되니 문제도 빨리 발견합니다.

/ga-report
문제 발견 (LCP 18초)
원인 분석 (폰트 3.1MB)
최적화 적용
/ga-report 로 검증

콘텐츠 방향성 제안

스킬이 트래픽 데이터를 분석해서 다음 콘텐츠 방향을 제안합니다:

🔥 인기 콘텐츠
1. Claude Code Daily Automation... - 45회, 3분
2. DevSecOps Pipeline Guide... - 32회, 2분
📋 권장 액션
1. [High] "Claude Code" 시리즈 확장 - 검증된 수요 (45회)

어떤 주제가 반응이 좋은지, 어디서 유입이 많은지 숫자로 확인하고, 스킬이 “이 시리즈를 확장하세요”까지 제안해줍니다. 감으로 쓰던 글을 데이터 기반으로 결정할 수 있게 됐습니다.

매주 15~20분 절약

GA 대시보드 열어서 숫자 확인하고, 의미를 해석하고, 어떤 조치가 필요한지 판단하는 시간이 줄었습니다. 스킬이 인사이트와 권장 액션까지 제안해주니 바로 행동으로 옮길 수 있습니다.


정리

항목내용
스킬/ga-report
데이터GA4 API + PageSpeed Insights
출력트래픽 요약, 인기 콘텐츠, 성능 점수, 인사이트, 권장 액션
성과LCP 18s → 5.4s (-71%), 폰트 3.1MB → 200KB (-94%)

블로그 운영하면서 트래픽과 성능을 확인하고 싶은데 매번 대시보드 열기 귀찮다면, Claude Code 스킬로 자동화해보세요. 한 번 만들어두면 계속 쓸 수 있습니다.

관련 콘텐츠

댓글