개인 블로그에 GA4 달고, 검색엔진 4곳에 등록한 기록 — SEO 최적화 Phase 1
TL;DR
- GTM(Google Tag Manager) + GA4를 블로그 전 페이지에 설치, BigQuery Export까지 연결
- Google Search Console, Naver Search Advisor, Bing Webmaster Tools, Daum 검색등록 — 4개 검색엔진에 사이트맵 제출
- SEO/AEO/GEO 최적화 로드맵을 Phase 1~4로 나누고, 오늘은 Phase 1(측정 인프라) 완료
- Phase 2에서 baseline 불필요한 항목(tags, llms.txt, IndexNow)은 먼저 처리
왜 갑자기 SEO를
블로그 글이 13개쯤 쌓였다. 쓰는 건 재밌는데, 이 글들이 누군가에게 닿고 있는지는 전혀 모르는 상태였다. Google Analytics도 없고, 검색엔진에 등록도 안 되어 있었다. 말 그대로 글을 써서 인터넷에 올려두기만 한 셈이다.
SEO를 본격적으로 파려는 건 아니다. 다만 최소한의 측정 도구를 달아두면, 나중에 뭘 해야 할지 데이터로 판단할 수 있다. 측정 없이 최적화하는 건 눈 감고 튜닝하는 거랑 같으니까.
전체 로드맵 — 왜 Phase를 나눴는가
처음에는 GA4도 달고, JSON-LD 구조화 데이터도 넣고, robots.txt도 만들고, 메타 태그도 보강하고… 한 번에 다 하려고 했다. 그런데 생각해보니 before 데이터가 없으면 after가 의미 없다.
robots.txt를 추가하면 크롤링이 개선될까? JSON-LD를 넣으면 리치 결과가 나올까? 모른다. 감으로 “좋아졌겠지”라고 추측할 수는 있지만, 수치로 확인하고 싶었다.
그래서 이렇게 나눴다:
| Phase | 내용 | 시점 |
|---|---|---|
| 1. 측정 인프라 | GA4 + 검색엔진 등록 | 지금 (오늘) |
| 2. 기술적 SEO | robots.txt, JSON-LD, 메타 태그 보강 등 | 1~2주 뒤 (baseline 확보 후) |
| 3. 발견 가능성 | 관련 글 추천, 사이트 내 검색 | Phase 2 이후 |
| 4. 효과 측정 | before/after 비교, 데이터 기반 개선 | Phase 2~3 완료 후 |
핵심은 Phase 1에서 baseline을 쌓고, Phase 2에서 변경하고, Phase 4에서 비교하는 것이다. 1~2주 정도 아무것도 안 건드리고 현재 상태의 데이터를 모으는 게 첫 번째 할 일이다.
baseline이 필요 없는 것도 있더라
Phase 2 항목을 정리하다 보니, 전부 baseline 데이터가 필요한 건 아니었다.
| 항목 | baseline 필요? | 이유 |
|---|---|---|
| robots.txt | ⭕ | 크롤링 통계 before/after 비교 가능 |
| JSON-LD 구조화 데이터 | ⭕ | 리치 결과 노출 여부를 Search Console에서 확인 |
| OG 메타 태그 보강 | ⭕ | 소셜 유입, CTR 변화 측정 가능 |
| tags/author 필드 | ❌ | 구조적 변경일 뿐, 검색 지표와 직접 연관 없음 |
| llms.txt | ❌ | AI 인용을 측정할 방법 자체가 없음 |
| IndexNow | ❌ | 새 글 인덱싱 속도를 높이는 거라 기존 데이터와 무관 |
before/after 비교가 의미 없는 항목은 기다릴 이유가 없다. 그래서 이 세 가지는 Phase 2에서 빼서 오늘 같이 처리했다.
Phase 1: 오늘 한 일
GTM + GA4 설치
GA4를 직접 심는 대신 GTM(Google Tag Manager)을 거쳐서 설치했다. GTM을 쓰면 나중에 태그를 추가하거나 변경할 때 코드를 건드리지 않아도 된다. 이벤트 추적을 붙이거나, 다른 분석 도구를 연결할 때도 GTM 콘솔에서 처리할 수 있다.
Astro 블로그의 모든 페이지가 공유하는 BaseHead.astro 컴포넌트에 GTM 스크립트를 추가했다:
<!-- Google Tag Manager -->
<script is:inline>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXXX');</script>
<body> 직후에는 JavaScript가 꺼진 환경을 위한 noscript 폴백도 넣었다. BlogPost 레이아웃과 index, blog, about 페이지 — 총 4곳에 추가했다.
배포 후 브라우저에서 확인하니 dataLayer에 GTM 이벤트가 기록되고, google-analytics.com/g/collect로 page_view 이벤트가 전송되는 걸 확인했다.
GA4 → BigQuery Export
GA4 데이터를 BigQuery로도 내보내도록 연결했다. GA4 UI에서 보는 것보다 원시 데이터를 직접 쿼리하는 게 훨씬 유연하다. 매일(Daily) 배치로 이벤트 데이터와 사용자 데이터를 적재한다.
중요한 건 BigQuery Export는 연결 시점부터만 데이터를 적재하고, 과거 데이터는 소급하지 않는다는 점이다. GA4 설치와 같은 날 바로 연결한 이유다.
검색엔진 등록 4곳
| 검색엔진 | 방법 | 비고 |
|---|---|---|
| Google Search Console | URL 접두어 방식, GTM으로 자동 소유권 인증 | sitemap 제출 완료, 상태 “성공” |
| Naver Search Advisor | HTML 메타 태그 소유권 인증 | sitemap 제출 완료 |
| Bing Webmaster Tools | GSC에서 가져오기 (원클릭) | sitemap 자동 가져옴 |
| Daum 검색등록 | 블로그 URL 제출 | 심사 후 최대 5일 내 노출 |
Google은 GTM이 이미 설치되어 있어서 소유권 인증이 자동으로 됐다. Bing은 GSC 연동으로 한 번에 가져올 수 있어서 편했다. Naver는 HTML 메타 태그 방식으로 인증했는데, 태그를 추가하고 배포한 뒤에 인증 버튼을 눌러야 해서 한 번 왕복이 필요했다.
Astro 블로그에는 이미 @astrojs/sitemap 통합이 설정되어 있어서 빌드 시 sitemap-index.xml이 자동 생성된다. 이걸 각 검색엔진에 제출했다.
baseline 없이 처리한 것들
콘텐츠 태그 시스템
Astro의 콘텐츠 스키마(content.config.ts)에 tags와 author 필드를 추가했다. 기존 글 14개에도 글 내용에 맞는 태그를 달았다.
tags: z.array(z.string()).default([]),
author: z.string().default('Jaypy'),
태그 자체는 검색 순위에 직접 영향을 주지 않는다. 하지만 나중에 태그별 목록 페이지(/tags/[tag])를 만들면 내부 링크가 강화되고, 관련 글끼리 묶이면서 체류 시간이 늘어날 수 있다. 태그 페이지는 Phase 3에서 만들 예정이고, 지금은 데이터만 미리 심어둔 것이다.
llms.txt — AI 크롤러용 사이트 안내
llmstxt.org 표준에 따라 public/llms.txt를 추가했다. ChatGPT, Perplexity 같은 AI 검색 엔진이 이 파일을 읽고 사이트 구조와 콘텐츠를 파악할 수 있다.
# Jaypy.dev
> 생각을 코드와 글로 끄적이는 공간
이 사이트는 개인 기술 블로그입니다.
홈랩 인프라, Kubernetes, 사이드 프로젝트 개발기를 주로 다룹니다.
...
솔직히 AI 검색에서 이 파일을 얼마나 활용하는지는 알 수 없다. 측정할 방법도 마땅치 않다. 그래서 baseline을 기다릴 이유가 없었고, 파일 하나 추가하는 데 5분이면 되니까 그냥 해둔 거다.
IndexNow — 배포 시 자동 인덱싱 요청
IndexNow는 새 글을 발행하거나 기존 글을 수정했을 때, 검색엔진에 “이 URL이 바뀌었으니 다시 크롤링해줘”라고 알려주는 프로토콜이다. Bing과 Naver가 지원한다.
구성은 세 가지:
- API 키 파일 —
public/에 키 파일을 배치. 검색엔진이 이 파일에 접근해서 키 소유를 검증한다. - 제출 스크립트 —
git diff로 변경된 블로그 파일을 감지하고, IndexNow API에 URL 목록을 POST한다. - GitHub Actions 워크플로우 —
main브랜치에 블로그 파일이 push되면 자동으로 제출 스크립트를 실행한다.
이것도 기존 데이터와 비교할 성격이 아니다. 새 글이 빠르게 인덱싱되는지는 IndexNow가 있을 때와 없을 때를 비교하는 게 아니라, 그냥 있으면 좋은 거니까.
솔직히 말하면
이 블로그의 트래픽이 폭발적으로 늘 거라고 기대하지는 않는다. 개인 기술 블로그가 SEO로 대박나는 시대는 아니다.
그래도 해본 이유는 간단하다:
- 안 하면 영영 모른다. GA4를 안 달면 내 글을 누가 읽는지 영원히 모른다. Search Console을 안 등록하면 어떤 키워드로 검색되는지 모른다.
- 측정 인프라는 일찍 깔수록 좋다. BigQuery Export도, Search Console 데이터도, 등록 시점부터만 쌓인다. 나중에 “아 그때 달아놓을 걸” 하는 것보다 지금 10분 쓰는 게 낫다.
- 나중에 Phase 2를 할 때 before/after 비교가 된다. JSON-LD를 추가했더니 리치 결과가 나왔는지, robots.txt를 넣었더니 크롤링이 개선됐는지 — 숫자로 확인할 수 있다.
1~2주 뒤에 데이터가 쌓이면 Phase 2(기술적 SEO)를 진행하고, 그 결과를 다시 글로 쓸 예정이다.
다음 할 일
- 1~2주간 baseline 데이터 수집 (GA4 + Search Console + Lighthouse 스코어)
- Phase 2: robots.txt, JSON-LD 구조화 데이터, OG 메타 태그 보강
- Phase 3: 태그 목록 페이지, 관련 글 추천, 사이트 내 검색
- Phase 4: before/after 비교 → 효과 있으면 계속, 없으면 그만