개발
구글 경고 메일을 계기로 GA4와 Search Console을 도입해봤습니다
| 서론
안녕하세요, 팡일입니다.
"당신의 사이트에서 문제가 감지되었습니다."
어느 날 구글에서 이런 메일이 오면, 덜컥 겁이 나지 않으세요? 저도 그랬습니다. 그런데 이 메일 한 통이 결국 우리 홈페이지에 제대로 된 방문자 분석 시스템을 갖추는 계기가 되었습니다. 오늘은 그 과정을 처음부터 끝까지, 그대로 공유해봅니다. (Google Analytics 4 + Search Console, 둘 다 무료입니다!)
| "구조화된 데이터 문제"? 이게 대체 뭔가요

메일 내용은 이랬습니다. 우리 사이트의 이벤트(Event) 구조화 데이터에 권장 필드 5개(address, performer, eventStatus, offers, endDate)가 빠져 있다는 것이었죠.
처음엔 "뭘 잘못했나?" 싶었지만, 찬찬히 뜯어보니 핵심은 "심각하지 않은 문제(non-critical)" 였습니다. 검색 순위가 떨어지거나 색인에서 빠지는 게 아니라, "이 정보를 더 채우면 검색 결과가 풍부해집니다"라는 권장 안내였어요.
우리 홈페이지는 무료 집회를 소개하는 곳이라, performer(공연자)·offers(티켓 가격) 같은 필드는 사실상 필요가 없었습니다. 해당 필드는 원래 유료 콘서트·공연을 위한 규격이거든요.
? 교훈 1: 구글의 경고가 다 "고쳐야 할 오류"는 아닙니다. 필수(error)인지 권장(warning)인지부터 구분하세요. 권장 항목은 무리해서 채우기보다, 우리 서비스에 정말 맞는지 먼저 따져보는 게 맞습니다.
그런데 이 메일을 계기로 문득 이런 생각이 들었습니다.
"그러고 보니… 우리 홈페이지에 사람들이 얼마나, 어디서, 어떻게 들어오는지 나는 전혀 모르고 있잖아?"
그래서 방문자 분석 도구를 도입하기로 했습니다.
| 어떤 분석 도구를 골라야 할까?
도구 | 특징 |
Google Analytics 4 (GA4) | 무료, 가장 상세한 유입 분석, Search Console 연동 가능 |
Cloudflare Web Analytics | 무료, 쿠키 없음(프라이버시 친화적), 대신 분석은 얕음 |
Netlify Analytics | 설치 불필요, 대신 월 $9 유료 |
찾아보니 선택지가 여러 개였는데요? 그중에서 저는 GA4를 골랐고, 이유는 명확했습니다.
이미 Search Console을 쓰고 있었으니, 연동하면 "검색에서 어떤 키워드로 들어왔나" + "들어와서 뭘 했나" 가 하나로 이어집니다.
무료인데 유입 분석 기능이 가장 강력합니다.
우리 사이트(Next.js)에 붙이기도 쉬웠습니다.
| GA4 속성 만들기

구글 애널리틱스에 들어가니, 처음엔 당황했습니다. essence 전용이 안 보였거든요. 그런데 알고 보니 오류가 아니라 아직 안 만든 것이었습니다.. ㅎㅎ
GA는 계정 → 속성 → 데이터 스트림 3단계 구조라, essence 속성을 새로 만들면 되는 거였죠.
왼쪽 아래 "⚙️ 관리" 클릭
계정은 기존 것 아무거나 써도 되지만, 관리 편하게 하려면 상단에서 계정을 고른 뒤 "속성 만들기" 클릭
속성 이름, 보고 시간대, 통화를 입력 및 선택하고 "다음" 클릭
시간대: 대한민국
통화: 대한민국 원
업종, 비즈니스 세부정보 선택 후 "다음" 클릭
비즈니스 목표 선택 후 "만들기" 클릭
플랫폼 중 하나를 선택
데이터 스트림 설정 패널에서 웹사이트 URL, 스트림 이름을 입력 후 "만들고 계속하기" 클릭

만들고 나니, G-XXXXXXXXXX 형식의 측정 ID가 나왔습니다. 이게 홈페이지와 GA를 잇는 열쇠입니다.
| 홈페이지에 GA 연결하기 (Next.js + Netlify)
여기서 개발 팁 하나. 구글이 주는 <script> 스니펫을 그냥 붙여도 되지만, Next.js에서는 공식 패키지를 쓰는 게 더 좋습니다.
npm install @next/third-parties// app/layout.tsx
import { GoogleAnalytics } from "@next/third-parties/google";
const GA_ID = process.env.NEXT_PUBLIC_GA_ID;
// ...body 아래에
{GA_ID && <GoogleAnalytics gaId={GA_ID} />}이렇게 하면 두 가지 이득이 있습니다.
페이지 이동(클라이언트 라우팅) 시에도 조회수를 정확히 잡아줍니다.
환경변수로 관리하니, 로컬 개발 중엔 GA가 안 붙어 내 접속이 통계에 안 잡힙니다. (은근 중요해요!)
측정 ID는 코드에 박지 않고 Netlify 환경변수로 넣었습니다. Netlify가 아니더라도, 사용하고 있는 배포 플랫폼에서 환경 변수로 넣으면 됩니다.
Key: NEXT_PUBLIC_GA_ID
Value: G-... (내 측정 ID)

? 주의: GA 측정 ID는 Secret으로 설정하면 안 됩니다. 브라우저에 노출돼야 하는 값이라, Secret으로 잡으면 오히려 작동하지 않아요.
배포 후 사이트에 접속해 GA 실시간 보고서를 보니, 제 접속이 딱 1명으로 잡혔습니다. 이 순간이 제일 짜릿했습니다.
| Search Console 연결 — 유입 분석의 화룡점정
GA만으로도 "누가 들어왔나"는 알 수 있지만, "어떤 검색어로 들어왔나" 까지 보려면 Search Console을 연결해야 합니다.

1. 좌측 하단의 톱니바퀴 설정을 클릭합니다.

2. 좌측 사이드바의 제품 링크 > Search Console 링크를 클릭합니다.

3. 우측의 '연결' 버튼을 클릭합니다.

4. 우측의 '계정 선택'을 클릭합니다.

5. 다양한 속성들 중에서 연결하고자 하는 대상을 선택하고, 우측 상단의 '확인'을 클릭합니다.

6. '다음'을 클릭합니다.

7. 우측의 "선택"을 클릭합니다.

8. 앞서 생성한 데이터 스크림을 선택합니다.

10. 선택된 웹 스트림을 확인하고, '다음'을 클릭합니다.

11. 선택된 웹 스트림까지 확인한 뒤, '제출'을 클릭합니다.

12. 성공적으로 링크가 생성된 것을 확인합니다.

13. 곧이어 구글에서 연결 완료 확인 메일 까지 도착하면 성공입니다.

14. 관리 화면의 Search COnsole 링크 목록에서도 정상 연결을 확인할 수 있습니다.
| 그리고, 첫 데이터를 마주하다

연결이 끝나자 GA4 보고서 메뉴에 "Search Console" 섹션이 생겼습니다. 쿼리와 Google 자연 검색 트래픽 두 보고서가요.
두근거리며 열어보니… 이미 데이터가 들어와 있었습니다!
총 클릭 5회 / 노출 11회 / CTR 45.45% / 평균 게재순위 2.09위
특히 홈페이지(/)가 검색 순위 평균 1.57위 — 거의 최상단에 노출되고 있었습니다!
숫자 자체는 작지만, "우리 홈페이지가 검색에 이렇게 잡히는구나"를 눈으로 확인한 첫 순간이었습니다.
? 지표 읽는 법 (초보 탈출용)
노출: 검색 결과에 우리 페이지가 뜬 횟수
클릭: 그중 실제로 눌러 들어온 횟수
CTR: 클릭÷노출 (제목·설명이 매력적일수록 높아요)
평균 게재순위: 검색 결과 몇 번째에 떴나 → 낮을수록 좋습니다
| 마무리
돌아보면 구글의 그 "문제 감지" 메일은 사실 문제가 아니었습니다. 오히려 그동안 미뤄왔던 "우리 홈페이지를 데이터로 들여다보기" 를 시작하게 만든 좋은 계기였죠.
혹시 여러분도 "방문자가 얼마나 오는지 궁금했지만 막막했다"면, 오늘 글이 작은 출발점이 되면 좋겠습니다. 딱 한 시간만 투자하면 됩니다.
P.S. ESSENCE가 궁금하신 분들을 보러 오세요!