개인 블로그에 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. 기술적 SEOrobots.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.txtAI 인용을 측정할 방법 자체가 없음
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/collectpage_view 이벤트가 전송되는 걸 확인했다.

GA4 → BigQuery Export

GA4 데이터를 BigQuery로도 내보내도록 연결했다. GA4 UI에서 보는 것보다 원시 데이터를 직접 쿼리하는 게 훨씬 유연하다. 매일(Daily) 배치로 이벤트 데이터와 사용자 데이터를 적재한다.

중요한 건 BigQuery Export는 연결 시점부터만 데이터를 적재하고, 과거 데이터는 소급하지 않는다는 점이다. GA4 설치와 같은 날 바로 연결한 이유다.

검색엔진 등록 4곳

검색엔진방법비고
Google Search ConsoleURL 접두어 방식, GTM으로 자동 소유권 인증sitemap 제출 완료, 상태 “성공”
Naver Search AdvisorHTML 메타 태그 소유권 인증sitemap 제출 완료
Bing Webmaster ToolsGSC에서 가져오기 (원클릭)sitemap 자동 가져옴
Daum 검색등록블로그 URL 제출심사 후 최대 5일 내 노출

Google은 GTM이 이미 설치되어 있어서 소유권 인증이 자동으로 됐다. Bing은 GSC 연동으로 한 번에 가져올 수 있어서 편했다. Naver는 HTML 메타 태그 방식으로 인증했는데, 태그를 추가하고 배포한 뒤에 인증 버튼을 눌러야 해서 한 번 왕복이 필요했다.

Astro 블로그에는 이미 @astrojs/sitemap 통합이 설정되어 있어서 빌드 시 sitemap-index.xml이 자동 생성된다. 이걸 각 검색엔진에 제출했다.


baseline 없이 처리한 것들

콘텐츠 태그 시스템

Astro의 콘텐츠 스키마(content.config.ts)에 tagsauthor 필드를 추가했다. 기존 글 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가 지원한다.

구성은 세 가지:

  1. API 키 파일public/에 키 파일을 배치. 검색엔진이 이 파일에 접근해서 키 소유를 검증한다.
  2. 제출 스크립트git diff로 변경된 블로그 파일을 감지하고, IndexNow API에 URL 목록을 POST한다.
  3. GitHub Actions 워크플로우main 브랜치에 블로그 파일이 push되면 자동으로 제출 스크립트를 실행한다.

이것도 기존 데이터와 비교할 성격이 아니다. 새 글이 빠르게 인덱싱되는지는 IndexNow가 있을 때와 없을 때를 비교하는 게 아니라, 그냥 있으면 좋은 거니까.


솔직히 말하면

이 블로그의 트래픽이 폭발적으로 늘 거라고 기대하지는 않는다. 개인 기술 블로그가 SEO로 대박나는 시대는 아니다.

그래도 해본 이유는 간단하다:

  1. 안 하면 영영 모른다. GA4를 안 달면 내 글을 누가 읽는지 영원히 모른다. Search Console을 안 등록하면 어떤 키워드로 검색되는지 모른다.
  2. 측정 인프라는 일찍 깔수록 좋다. BigQuery Export도, Search Console 데이터도, 등록 시점부터만 쌓인다. 나중에 “아 그때 달아놓을 걸” 하는 것보다 지금 10분 쓰는 게 낫다.
  3. 나중에 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 비교 → 효과 있으면 계속, 없으면 그만