birchholt 직접 해보고 남기는 기록

티스토리 방문통계를 칸별로 대조해봤습니다 — 되는 칸, 오히려 나아지는 칸, 영원히 안 되는 칸

블로그를 세 곳 굴리고 있습니다. 하나는 직접 만든 정적 사이트고 둘은 티스토리입니다. 티스토리 관리자에는 방문통계 화면이 있고, 제가 실제로 열어보던 값은 결국 하나였습니다 — 어떤 글에 몇 명이 들어왔나. 이걸 서버 없이, 쿠키 없이, 돈 안 들이고 가져갈 수 있는지 재봤습니다.

처음 세운 질문은 「티스토리 통계를 대체할 수 있나」였습니다. 이 질문으로는 답이 안 나옵니다. 「대체로 됩니다」 같은 말밖에 안 나오는데, 그 말은 정작 안 되는 칸을 만났을 때 아무 도움이 안 됩니다.

그래서 화면을 항목 단위 12칸으로 쪼개고 칸마다 따로 판정했습니다. 쪼개고 나니 답이 세 종류로 갈렸습니다. 되는 칸, 오히려 나아지는 칸, 도구를 바꿔도 영원히 안 되는 칸.

12칸 판정표

티스토리 항목대체판정비고
개별 글 조회수Path 차원완전대체티스토리 URL이 /51 같은 숫자라 제목이 아니라 글번호로 뜹니다
인기글Path 정렬완전대체전용 탭이 아니라 표 정렬로 봅니다
블로그별 분리Host 차원완전대체Site 가 아닙니다 (아래)
국가·기기·브라우저·OS기본 차원완전대체티스토리보다 넓습니다
여러 블로그를 한 화면에계정 집계 뷰얻는 것티스토리엔 없던 기능입니다
통계 백업·이관API얻는 것티스토리 백업에는 통계가 안 담깁니다
유입 경로(리퍼러)Referer 차원부분대시보드는 호스트까지, 경로는 API에서만
조회수 정확도부분광고 차단 + 7일 뒤 샘플링
방문자 수부분Visits사람 수가 아닙니다
유입 검색어검색엔진 콘솔가장 크게 잃는 칸다음·빙은 불가
「이 글 × 이 검색어」서치 콘솔 실적부분구글 한정, 클릭·노출이지 방문자가 아님
댓글·공감·구독자없음대체 대상 아님티스토리에서 계속 봅니다

여덟 칸이 완전대체 또는 얻는 것이고, 세 칸이 부분이고, 한 칸이 못 넘어옵니다. 「대체로 된다」와 이 표는 정보량이 다릅니다.

두 칸은 대체가 아니라 오히려 얻는 것이었습니다

티스토리는 블로그마다 관리자에 따로 들어가야 했습니다. 세 곳이면 세 번, 다섯 곳이면 다섯 번입니다. 계측 토큰 하나를 여러 사이트가 공유하면 대시보드를 여는 순간 합산이 뜨고 거기서 블로그별로 쪼갭니다. 없던 기능이 생기는 쪽입니다.

두 번째는 백업입니다. 티스토리 백업 파일을 받아보면 글과 첨부는 들어 있는데 통계는 안 들어옵니다. 플랫폼을 떠나는 순간 지난 방문 기록은 같이 못 나옵니다. 바깥 계측으로 옮기면 그 값이 API로 빠집니다.

앞선 글에서 티스토리 쪽 비콘이 POST 404를 돌려주는 데서 막혔고, 남은 가설 하나를 미확인으로 남겨뒀습니다 — 사이트가 자동 설치 모드라 수동 수집 경로가 안 열려 있다는 가설이었습니다. 그 가설이 맞았습니다. 관리 화면에서 스니펫 설치 방식으로 바꾸니 세 호스트 전부 204로 바뀌었습니다. 다만 curl 재현은 전환 뒤에도 404였습니다. 손으로 만든 요청이 브라우저와 어딘가 다르다는 뜻이라, 최종 확인은 개발자 도구로 했습니다.

그리고 여기서 축을 잘못 적어뒀던 게 드러났습니다

「블로그별로 나눠 본다」 칸을 저는 Site 차원으로 적어뒀습니다. 사이트를 구분하는 차원이니 당연히 그걸로 나뉠 거라고 생각했습니다.

아닙니다. 토큰 하나를 여러 호스트가 공유하면 그 전부가 같은 Site 값 하나로 들어옵니다. 실제 분리축은 Host 입니다. 그러니 이건 표기 실수가 아니라 택일 구조였습니다.

통합 뷰블로그별 분리비고
토큰 1개 + Host 로 분리된다된다「한 곳에서 본다」는 이쪽
토큰 N개 + Site 로 분리안 된다된다대시보드를 N번 연다

둘 다 「블로그별로 보인다」까지는 같아서, 차원 이름만 보고는 차이가 안 드러납니다. 차이는 통합 뷰를 잃느냐에서 납니다. 그리고 제가 원래 원했던 게 정확히 그 통합 뷰였습니다. Site 로 적어둔 채 진행했으면 토큰을 사이트마다 새로 발급했을 것이고, 얻으려던 칸을 스스로 버린 상태로 「대체 완료」라고 적었을 겁니다.

유입 검색어는 도구를 바꿔도 안 풀립니다

이 칸만 다른 칸과 성질이 다릅니다. 도구 선택 문제가 아니라 구조입니다. 세 겹으로 막혀 있습니다.

하나, 계측 쪽이 쿼리스트링을 아예 안 받습니다. 제공되는 차원은 열 종입니다 — Country · Host · Path · Referer · Device type · Browser · OS · Site · Exclude Bots · Navigation type. 이 목록에 쿼리스트링도 UTM도 없습니다. 민감정보 회피가 이유라 API로 내려받아도 나오지 않습니다. (Navigation type 은 2026-04-30에 추가된 차원인데 문서 로드 방식 진단용이라 유입 분석에는 기여가 없습니다.)

둘, 다른 도구로 갈아타도 그 칸이 없습니다. GA4에는 「구글 오가닉 검색어」 차원이 없습니다. GA4의 Search term사이트 내부 검색어고, Manual termutm_term 입니다. 이름이 비슷해서 있는 줄 알기 딱 좋게 생겼습니다.

셋, 애초에 브라우저가 안 보냅니다. 구글의 referrer-policystrict-origin-when-cross-origin 이라 리퍼러에 오리진까지만 실립니다. 검색어는 거기에 실려 있질 않습니다.

그러니 검색어는 검색엔진이 자기 콘솔로 되돌려주는 경로로만 옵니다. 구글은 서치 콘솔, 네이버는 서치어드바이저입니다. 다음과 빙은 어디에서도 못 봅니다. 티스토리는 전 검색엔진 키워드를 한 화면에 섞어서 보여줬으므로, 이 칸은 무엇을 붙여도 완전히는 복구되지 않습니다.

콘솔로 오는 값도 같은 값이 아닙니다. 클릭·노출·순위지 방문자가 아니고, 글별 검색어 교차도 구글 한정입니다.

「방문자 수」로 읽던 지표가 사람 수가 아니었습니다

여기가 조용히 틀리기 쉬운 칸입니다. 이 계측의 Visits 는 쿠키를 쓰지 않고, 리퍼러가 자기 호스트와 다른 페이지뷰를 셉니다. 방문자 수라는 이름이 붙어 있지만 사람 수가 아닙니다. 사람 수에 가까운 값은 GA4의 Total users 인데 그건 2년짜리 쿠키를 씁니다.

「쿠키 없이 방문자 수」는 이 스택 어디에서도 얻을 수 없습니다.

이 칸을 티스토리 「방문자」 옆에 나란히 놓고 늘었다·줄었다를 말하면 그 문장은 그냥 틀린 문장입니다.

대체하는 쪽의 한계도 먼저 적어둡니다

항목
보관6개월 (하드캡)
샘플링최근 7일은 무샘플, 이후 약 10%로 축소
UTM·쿼리스트링미수집
커스텀 이벤트미지원
광고 차단차단됨 — 비율의 공개 자료 없음
사이트 상한프록시 없는 사이트 10개 소프트 리밋
비용무료 · 쿠키 없음

보관 6개월은 「작년 이맘때」를 영영 못 본다는 뜻입니다. 백업 칸을 얻는 것으로 판정해놓고 백업을 안 돌리면 그 이득은 없는 것과 같습니다.

지금 아니면 영영 못 재는 값이 하나 있습니다

광고 차단으로 얼마나 잃는지입니다. 차단된다는 것 자체는 확정입니다 — 공개 필터 목록에 비콘 호스트를 막는 규칙이 있고(6579행), 경로 단위 규칙도 따로 있습니다(566·568·569행).

여기서 또 하나 틀렸습니다. 저는 자동 설치가 퍼스트파티 경로로 나가니 차단을 덜 탈 거라고 생각했습니다. 위의 경로 규칙들이 도메인과 무관하게 걸려서 자동 설치도 똑같이 막힙니다. 이 축에서 자동과 수동은 우열이 없습니다.

비율은 1차 자료가 존재하지 않습니다. 만든 쪽도 「차단된다」까지만 인정하고 숫자를 낸 적이 없습니다. 그런데 지금 제 손에 대조군이 있습니다. 티스토리 자체 통계는 플랫폼이 자기 쪽에서 세므로 차단을 안 타고, 바깥 비콘은 브라우저에서 도니 차단을 탑니다. 두 계측이 같은 블로그에 동시에 붙어 있는 지금, 같은 기간 수치를 대조하면 이 블로그들의 실제 손실률이 나옵니다.

티스토리를 접으면 대조군은 사라집니다. 그리고 안 재두면, 나중에 숫자가 낮게 나올 때 「트래픽이 줄었다」로 오독하게 됩니다.

확인하지 못한 것

정리