활성 사용자 급락의 범인을 찾아서 — 봇, 착시, 그리고 색인 붕괴#
2026-07-17

GA(Google Analytics)의 활성 사용자 그래프가 가파르게 떨어지고 있었습니다. 블로그를 운영하는 사람에게 이만큼 심장이 내려앉는 그래프도 없습니다. 독자가 떠나는 걸까, 도메인 이전이 잘못된 걸까, 아니면 뭔가 설정이 망가진 걸까. 필자는 Claude Code에게 전체 조사를 맡겼고, 그 결과는 예상과 상당히 달랐습니다. 급락의 대부분은 착시였고, 진짜 문제는 전혀 다른 곳에서 조용히 진행되고 있었습니다.
이 글은 그 조사의 전 과정을 정리한 것입니다. 비슷한 상황을 만난 분이라면 같은 순서로 점검해 볼 수 있도록, 판별 기준과 점검 순서를 그대로 남깁니다.
발단: 그래프는 분명히 떨어지고 있었다#
배경을 먼저 설명하면, 이 블로그는 한 달 전쯤 대표 도메인을 이전했습니다. 구 도메인에서 새 도메인으로 301 리다이렉트(영구 이동을 알리는 HTTP 응답)를 걸고, Google Search Console(이하 GSC)에 주소 변경 신고까지 마친 상태였습니다. 그런데 이전 후 한동안 오르던 활성 사용자 수가 어느 시점부터 뚝뚝 떨어지기 시작했습니다.
일 단위 그래프만 보면 하락은 분명했습니다. 그러나 조사를 시작하자마자 세 가지 착시가 겹쳐 있다는 것이 드러났습니다.
착시 세 겹: 스파이크 회귀, 미완성 주간, 그리고 봇#
첫 번째 착시는 기준점이었습니다. 30일 단위로 묶어 보면 활성 사용자는 최근 석 달간 꾸준한 상승 추세였습니다. “급락"으로 보였던 것은 한 차례 비정상적으로 치솟았던 고점에서 평균으로 되돌아오는 구간이었습니다. 스파이크 직후의 평균 회귀는 하락이 아닌데, 일 단위 그래프는 이것을 하락처럼 보여줍니다.
두 번째 착시는 집계가 끝나지 않은 주간이었습니다. 주별 그래프의 마지막 값이 바닥까지 폭락해 보였는데, 이는 그 주가 하루치만 집계된 상태였기 때문입니다. 당연한 이야기 같지만, 그래프 위에서는 진짜 급락과 구분되지 않습니다.
세 번째 착시가 가장 큽니다. 활성 사용자의 절반 가까이가 사람이 아니었습니다. 국가별로 쪼개 보면 패턴이 뚜렷하게 갈립니다.
| 트래픽 | 사용자:세션:페이지뷰 비율 | 참여율 | 세션당 체류 |
|---|---|---|---|
| 특정 해외 데이터센터 지역발 | 정확히 1:1:1 | 한 자릿수 | 0초에 수렴 |
| 한국 | 1:2.4:5.8 | 절반 이상 | 1분 이상 |
앞의 패턴은 방문자 전원이 각자 딱 한 페이지만 보고, 머문 시간은 0초에 가깝다는 뜻입니다. 사람의 이탈 패턴이 아니라 자동화된 접근, 즉 데이터센터의 크롤러나 AI 스크레이퍼입니다. GA4(GA의 현행 버전)가 알려진 봇은 기본으로 걸러주지만, 미탐지 크롤러는 리퍼러 없는 직접 유입((direct) / (none))으로 잡혀 활성 사용자 수를 부풀립니다.
여기서 유용했던 판별 기준이 GA4의 참여 세션(engaged session) 지표입니다. 10초 이상 머물거나, 두 페이지 이상 보거나, 전환 이벤트가 있어야 집계되는 지표라서 봇이 거의 만들어내지 못합니다. 이 기준으로 다시 보면 그림이 완전히 달라집니다. 활성 사용자 수로는 미국이 한국보다 많아 보였지만, 참여 세션으로 비교하자 한국이 열 배 이상으로 역전했습니다. 실제 독자 구성은 한국과 해외가 대략 8:2였고, 해외 독자는 소수지만 분명히 존재하며 주로 영어 페이지를 읽고 있었습니다.
정리하면: 활성 사용자 수는 블로그의 건강 지표로 쓰기에 너무 쉽게 오염됩니다. 봇 물결이 밀려왔다 빠지는 것만으로 그래프가 출렁이고, 운영자는 존재하지 않는 위기에 반응하게 됩니다. 실제 독자 규모는 참여 세션으로 봐야 합니다.
진짜 문제는 조용히 진행되고 있었다#
착시를 걷어내고 나니 실제 독자는 평탄했습니다. 그럼 문제가 없었던 걸까요? 아닙니다. GSC의 검색 노출 데이터를 열어보자 전혀 다른 이야기가 나왔습니다.
한 달 내내 일정한 수준을 유지하던 일간 검색 노출이 어느 날을 기점으로 바닥 근처까지 꺾이더니, 이틀 뒤부터는 사실상 0이 되었습니다. 그리고 열흘 넘게 회복되지 않았습니다. 활성 사용자 그래프에는 잘 보이지도 않는 변화였습니다. 검색 유입 자체가 워낙 적었기 때문입니다. 하지만 방치하면 블로그가 검색에서 영구히 사라질 수 있는, 이번 조사에서 발견된 유일한 진짜 문제였습니다.
색인 커버리지 점검: 수백 개 제출, 색인은 홈뿐#
원인을 좁히기 위해 GSC의 URL 검사 API로 색인(검색 결과에 노출될 수 있도록 Google 데이터베이스에 등록되는 것) 상태를 일괄 점검했습니다. 결과는 명확했습니다.
- 사이트맵으로 제출한 수백 개 URL 중 색인된 것: 홈을 포함한 단 두 페이지
- 표본 검사한 주요 페이지 대부분: “크롤링됨 - 현재 색인이 생성되지 않음”
- 크롤 자체는 정상: robots.txt 허용, 페이지 fetch 성공, 조사 당일에도 크롤 흔적
이 상태가 흥미로운 이유는, 기술적으로 잘못된 것이 하나도 없었기 때문입니다. 리다이렉트, canonical 태그, hreflang(다국어 페이지 연결 태그), 사이트맵, 내부 링크까지 전부 점검했지만 모두 정상이었습니다. Googlebot은 부지런히 페이지를 가져가면서도 색인에 넣는 것만 거부하고 있었습니다.
이것은 오류가 아니라 판정입니다. Google은 신뢰가 쌓이지 않은 신생 도메인에 대해 색인을 매우 보수적으로 골라 담는데, 이전한 지 한 달 된 도메인이 정확히 그 상태였습니다. 그리고 이 블로그의 사이트맵은 그 판정에 몹시 불리한 구성이었습니다.
사이트맵을 열어보니: 57%가 태그 페이지#
제출된 URL 400여 개의 구성을 분석해 보니 이랬습니다.
| 구성 | URL 수 | 비중 |
|---|---|---|
| 태그·카테고리 페이지 | 233 | 57% |
| 뉴스 브리프 (아카이브 포함) | 46 | 11% |
| 실질 콘텐츠 (에세이·책·앱·위젯 등) | 130 | 32% |
태그 페이지는 글 목록만 나열된 얇은 페이지입니다. Hugo(정적 사이트 생성기)가 태그마다 자동 생성해 주는데, 국문·영문 합쳐 233개가 사이트맵의 절반 이상을 차지하고 있었습니다. Google 입장에서 이 사이트는 “제출한 페이지 대부분이 내용 없는 목록"인 셈입니다. 신생 도메인이 첫인상으로 보여주기에 최악의 구성입니다.
대응: 색인 다이어트#
대응은 세 갈래로 진행했습니다.
첫째, 사이트맵 재제출과 수동 색인 요청. GSC에서 사이트맵을 다시 제출해 재처리를 유도하고, 반응이 좋았던 에세이 등 우선순위 페이지 10개를 URL 검사 도구로 직접 색인 요청했습니다. 색인 요청은 하루 할당량(약 10건)이 있어서 우선순위를 정해야 합니다.
둘째, 색인 다이어트. 사이트맵과 색인 대상에서 얇은 페이지를 걷어내 평균 품질을 끌어올리는 작업입니다. Hugo 템플릿에 판정 로직을 하나 두고, 사이트맵 제외와 noindex 메타 태그(검색엔진에 색인하지 말라고 알리는 태그) 출력이 항상 같은 판정을 공유하도록 구성했습니다.
판정 partial (하나의 로직)
├─ 태그·카테고리 페이지 → 전부 제외
├─ 발행 30일 지난 뉴스 브리프 → 제외 (시의성 소멸)
└─ front matter의 noindex: true → 수동 제외용 탈출구
↓ ↓
sitemap.xml에서 제외 <meta name="robots" content="noindex"> 출력뉴스 브리프에 30일 조건을 둔 것은, 시의성이 지난 뉴스 요약은 검색 가치가 낮은 반면 발행량은 많아서(최근 90일 발행물의 60%) 색인 품질 평균을 계속 끌어내리기 때문입니다. 사이트는 주 2~3회 재빌드되므로 30일 윈도우는 자동으로 굴러갑니다.
결과적으로 사이트맵은 409개에서 148개로 64% 줄었습니다. Google에 제출하는 페이지 세트가 “태그 목록 위주 409개"에서 “실질 콘텐츠 148개"로 바뀐 것입니다.
셋째, 관측 도구 정비. 이번 조사에서 매번 손으로 짰던 질의들 — 일·주별 추이, 국가별 봇 판정, 도메인별 트래픽 — 을 GA 조회 스킬의 정식 모드로 편입했습니다. 다음에 같은 증상이 오면 “추이 → 봇 오염 → 도메인” 순서로 바로 진단할 수 있습니다.
덤으로 얻은 것: 콘텐츠 구성의 비대칭#
조사 과정에서 섹션별 성과를 함께 뽑았는데, 예상 밖의 비대칭이 드러났습니다. 최근 90일 발행 노력의 60%가 뉴스 브리프에 들어갔지만, 신규 독자를 데려온 것은 발행량 25%의 에세이가 거의 전부였습니다. 검색 클릭도, 해외 독자의 자연 유입도 모두 에세이에서 나왔습니다. 반면 뉴스 브리프는 소수 고정 독자의 반복 소비에 머물렀습니다.
이 발견이 뉴스 발행을 중단할 이유는 아닙니다. 다만 역할을 다시 정의하게 됩니다. 뉴스는 소재를 수집하고 흐름을 놓치지 않는 장치로 두고, 거기서 반응이 있던 주제를 에세이로 승격시키는 파이프라인 — 이것이 데이터가 가리키는 구성입니다.
정리: 숫자를 의심하는 순서#
이번 조사에서 얻은 교훈을 점검 순서로 정리하면 이렇습니다.
- 기간을 바꿔서 다시 본다. 일 단위 급락이 30일 단위에서도 급락인지. 스파이크 직후의 평균 회귀와 미완성 집계 구간은 하락이 아닙니다.
- 활성 사용자 대신 참여 세션을 본다. 국가별로 사용자:세션:페이지뷰가 1:1:1에 가깝고 참여율이 한 자릿수라면 봇입니다. 실제 독자는 참여 세션에만 나타납니다.
- GA가 평온해도 GSC를 연다. 검색 노출 붕괴는 방문자 그래프에 거의 보이지 않습니다. 특히 도메인 이전 후라면 색인 상태를 직접 확인해야 합니다.
- “크롤링됨 - 색인 안 됨"이 대량이면 설정이 아니라 품질 판정을 의심한다. 그리고 사이트맵 구성을 열어봅니다. 검색엔진에 보여줄 가치가 있는 페이지만 제출하고 있는지.
활성 사용자 그래프의 급락은 결국 독자가 떠난 신호가 아니었습니다. 봇이 빠져나간 자리, 끝나지 않은 주간, 그리고 그 뒤에 숨어 있던 진짜 문제 — 신생 도메인의 색인 붕괴. 숫자는 거짓말을 하지 않지만, 어떤 숫자를 보느냐가 이야기 전체를 바꿉니다.
색인 다이어트의 효과는 앞으로 1~3주에 걸쳐 확인될 예정입니다. 회복 경과는 후속 글로 남기겠습니다.