다국어 사이트의 통계를 보다 보면 이상한 장면이 나온다.
“기본 언어 트래픽이 줄었나?” “대신 영어, 중국어, 다른 언어 페이지는 늘고 있네?” “잠깐, 기본 언어 숫자에 내 방문도 들어가 있는 것 아닌가?”
세 가지가 동시에 맞을 수 있다.
외국어 검색 유입은 실제로 늘고 있을 수 있다. 기본 언어의 외부 유입은 약해질 수 있다. 그리고 운영자는 새 글을 열고, 링크를 확인하고, 홈으로 돌아가고, 수정 뒤 새로고침을 반복한다.
그래서 기본 언어 쪽에는 정체불명의 충성 독자가 하나 생긴다.
대부분 운영자 본인이다.
이 글에서는 자신의 브라우저를 분석에서 제외하는 방법, localStorage와 Cookie의 차이, “페이지를 열었으니 등록됐나?”라는 오해, 과거 데이터 처리, 그리고 다국어 트래픽을 제대로 읽는 방법을 정리한다.
1. 총 PV보다 외부 랜딩과 내부 이동을 먼저 나눠 본다
운영자가 기본 언어 페이지를 자주 확인하면 총 PV는 쉽게 왜곡된다.
대표적인 행동은 다음과 같다.
- 새 글을 직접 열기
- 홈에서 글로 이동하기
- 관련 글 링크 클릭하기
- PC와 스마트폰에서 각각 확인하기
- 배포 후 여러 번 새로고침하기
- 시간이 지난 뒤 다시 본서비스를 확인하기
일반 독자는 한 번 읽고 떠날 수 있다. 운영자는 편집자, QA, 독자, 감시 시스템을 한 몸에 수행한다.
따라서 다국어 사이트에서는 최소한 외부에서 처음 들어온 랜딩과 사이트 내부 이동을 분리해서 봐야 한다.
외국어 페이지의 외부 랜딩이 늘고 기본 언어에서 내부 이동 비중이 높다면, “기본 언어가 압도적으로 인기”라기보다 “운영자가 기본 언어 UI를 많이 돌아다닌다”가 섞였을 수 있다.
2. “열었는데 등록됐나?” — 실제로 값을 쓰는 코드가 없으면 등록되지 않았다
운영자 브라우저를 제외하기로 하고 사이트를 한 번 열었다고 하자.
그 순간 자동으로 운영자로 등록됐을까?
아니다.
브라우저는 눈치를 보고 이렇게 판단하지 않는다.
“이 사람은 운영자 같으니 앞으로 PV에서 빼야겠다.”
실제로 상태를 저장하는 처리가 필요하다.
- localStorage에 owner 플래그 저장
- Cookie에 owner 플래그 저장
- 로그인한 관리자 설정에 내부 트래픽 상태 저장
- 서버에서 내부 트래픽 라벨 부여
페이지를 여는 것은 방문이다. 운영자 등록은 상태 변경이다.
그 상태 변경 코드가 실행되지 않았다면 아무것도 등록되지 않았다.
3. localStorage와 Cookie 중 무엇을 써야 하나?
브라우저 단위 식별에는 localStorage와 Cookie가 흔히 쓰인다.
localStorage
localStorage는 같은 origin에 브라우저 값을 저장하고 일반 브라우징 세션을 넘어 유지할 수 있다.
예:
localStorage.setItem("analytics_owner", "1");
클라이언트 측 분석이라면 전송 전에 확인할 수 있다.
if (localStorage.getItem("analytics_owner") === "1") {
return;
}
간단하다는 것이 장점이다.
단점은 최초 HTTP 요청을 받는 서버나 Edge Worker가 브라우저 안의 localStorage를 볼 수 없다는 점이다.
Cookie
Cookie는 조건이 맞는 HTTP 요청에 함께 전송되므로 서버나 Edge 계층에서 확인할 수 있다.
예:
document.cookie =
"analytics_owner=1; Path=/; Max-Age=31536000; SameSite=Lax; Secure";
서버 또는 Worker가 이 Cookie를 보고 카운터에서 제외하면 된다.
관리자 화면이나 비공개 설정 경로에서 Set-Cookie를 내려주는 방식은 더 깔끔하다. JavaScript가 읽을 필요가 없다면 HttpOnly도 검토할 수 있다.
다만 이 값은 분석 제외용 표식일 뿐이다.
인증이나 권한 판정에 사용하면 안 된다. 누구나 쓸 수 있는 표식을 관리자 권한으로 쓰는 것은 명찰에 “대표이사”라고 적으면 임원실이 열리는 회사와 같다.
4. 서버·Edge에서 세면 Cookie, 브라우저 이벤트만 세면 localStorage
선택 기준은 측정 위치다.
브라우저에서 이벤트를 전송하는 방식
localStorage면 충분한 경우가 많다.
페이지가 로드된 뒤 JavaScript가 분석 이벤트를 보내기 전에 owner 여부를 확인하면 된다.
CDN, Edge Worker, 서버, 접근 로그에서 PV를 세는 방식
Cookie가 더 적합하다.
서버는 브라우저 JavaScript가 실행되기 전에 요청을 받는다.
localStorage는 브라우저 안에만 있다. Cookie는 요청과 함께 온다.
같은 “내 방문 제외”라도 어디서 카운트하느냐에 따라 도구가 달라진다.
5. 1인 운영 사이트라면 한 번의 소유자 설정으로 충분하다
대기업은 사내 IP나 계정을 이용해 내부 트래픽을 분류한다.
1인 사이트는 훨씬 단순해도 된다.
- 본인만 아는 설정 화면을 연다
- owner Cookie를 일정 기간 설정한다
- 해당 Cookie가 있는 요청은 분석에 넣지 않는다
- 필요하면 해제할 수 있게 한다
단, 브라우저별로 따로 설정해야 한다.
PC 브라우저, 스마트폰 브라우저, 다른 브라우저, 다른 프로필, 시크릿 모드는 모두 다른 환경이다.
한 번 설정했다고 우주의 모든 “나”가 사라지는 것은 아니다.
6. 과거 카운트는 자동으로 줄지 않는다
오늘 owner 제외를 적용해도 어제까지의 PV가 자동으로 지워지지 않는다.
보통은 “지금부터 섞지 않는다”가 목표다.
과거까지 고치려면 원시 로그를 다시 판별하거나 집계를 다시 만들어야 한다.
초기 사이트에서 과거의 소수 PV를 완벽히 수정하기 위해 많은 시간을 쓰는 것은 대개 효율적이지 않다.
“이 날짜 이전에는 운영자 방문이 일부 포함될 수 있다. 이후부터는 제외한다.”
이렇게 경계만 명확히 해도 충분하다.
7. GA4 내부 트래픽 필터와 브라우저 Cookie 방식은 다른 기능이다
Google Analytics 4는 IP 주소로 내부 트래픽을 정의하고 데이터 필터로 제외하는 공식 기능을 제공한다.
고정된 사무실 네트워크에서는 편리하다.
하지만 1인 운영자가 집 Wi-Fi, 모바일 회선, 여행지, 테더링, VPN을 오가면 IP만으로 관리하기가 번거로울 수 있다.
독자적인 퍼스트파티 분석이라면 브라우저 Cookie나 로그인 상태로 owner를 표시하는 편이 쉬울 수 있다.
둘은 같은 기능이 아니다.
GA4라면 GA4 내부 트래픽 설정을 따른다. 자체 분석이라면 자체 수집 지점에서 제외한다.
8. 다국어 성장성은 owner를 뺀 외부 랜딩으로 본다
자기 방문이 섞이면 언어별 성장 비교가 왜곡된다.
총 PV가 기본 언어 70, 외국어 30이라고 해도, 기본 언어 70 중 20이 운영자 확인, 20이 내부 이동, 실제 외부 랜딩이 30이라면 외국어 30의 의미가 달라진다.
신규 수요를 볼 때는 다음 비교가 더 낫다.
기본 언어 외부 랜딩
대
외국어 외부 랜딩
그리고 7일 이동합계와 일별 수치도 구분해야 한다.
이동합계는 과거의 큰 날이 창에서 빠지는 것만으로도 줄 수 있다. 오늘 독자가 급감했다는 뜻은 아니다.
9. 최소 테스트 절차
“아마 됐겠지”로 끝내지 않는다.
- 브라우저에 owner 값이 실제 저장됐는지 확인
- 일반 페이지를 한 번 열기
- 분석 이벤트가 기록되지 않거나 owner로 폐기되는지 확인
- 다른 브라우저에서는 정상 집계되는지 확인
- owner 값을 지우면 다시 집계되는지 확인
개발자 도구에서 localStorage와 Cookie를 확인할 수 있다.
설정 페이지를 열었다는 사실은 증거가 아니다.
컴퓨터는 지시를 잘 따르지만 눈치까지 보지는 않는다.
10. 결론 — 세계 진출을 보기 전에 나부터 표본에서 빠진다
외국어 페이지로 실제 독자가 들어오기 시작하면 재미있다.
하지만 기본 언어에는 운영자 본인이라는 최강 고정 고객이 살기 쉽다.
따라서,
- 외부 랜딩과 내부 이동을 분리한다
- 운영자 브라우저를 명시적으로 표시한다
- 브라우저 이벤트만 측정하면 localStorage
- 서버·Edge에서 측정하면 Cookie
- 단순히 페이지를 열어서는 등록되지 않는다
- 과거 데이터는 필요할 때만 재처리한다
- 다국어 수요는 owner 제외 후 외부 랜딩으로 본다
이렇게 보면 숫자의 의미가 훨씬 선명해진다.
해외 독자가 늘었다면 축하할 일이다.
단, 홈팀 점수를 혼자 계속 올리고 있는 사람이 운영자 자신은 아닌지 먼저 확인하자.
- MDN: Window.localStorage
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage - MDN: Set-Cookie header
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie - Google Analytics Help: Exclude internal traffic
https://support.google.com/analytics/answer/10104470
