말씀하신 현상은 검색엔진 봇(bot) 트래픽과 실제 사용자 트래픽의 집계 방식 차이 때문에 자주 발생합니다.
우선 결론부터 말씀드리면, 구글봇·네이버봇·다음봇 같은 검색엔진 크롤러가 서버 방문자 수는 늘릴 수 있지만, Google Analytics(GA) 방문자 수에는 대부분 포함되지 않습니다.
GA는 기본적으로 자바스크립트가 실행되는 실제 브라우저 사용자만 집계하기 때문에, HTML만 긁어가는 봇 트래픽은 제외됩니다.
그래서 이런 상황이 생깁니다.
서버 로그나 직접 만든 방문자 카운터에서는 방문자가 많은데, GA에서는 방문자가 적게 보이는 경우죠. 이건 **GA가 틀린 게 아니라 오히려 더 정확한 “실 사용자 기준”**이라고 보시면 됩니다.
왜 수치 차이가 크게 날까?
- 서버 로그 / 직접 방문자 체크
→ 모든 HTTP 요청을 집계 (사람 + 봇 + 스캐너 + 모니터링 툴 포함)
- Google Analytics
→ JS 실행 가능한 실제 사용자만 집계
→ 검색엔진 봇, curl, wget, 서버 모니터링 툴 등은 제외
즉, 서버 기준 방문자 수가 많고 GA 방문자가 적다면 봇 비중이 높은 사이트일 가능성이 큽니다.
봇을 Header 값으로 구분할 수 있을까?
네, 가능합니다. 보통은 User-Agent 헤더로 1차 필터링을 합니다.
대표적인 예시는 다음과 같습니다.
- Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
- NaverBot
Yeti/1.1 (+http://help.naver.com/robots)
- DaumBot
Daumoa/3.0 또는 DaumBot
서버에서 PHP 기준으로 보면 대략 이런 식입니다.
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/googlebot|yeti|daum|bingbot|slurp/i', $userAgent)) {
// 검색엔진 봇
}
이렇게 하면 로그 분석용으로 봇/실사용자 분리가 가능합니다.
주의할 점
- User-Agent는 위조가 가능하기 때문에 100% 신뢰하면 안 됩니다.
- 더 정확하게 하려면
- IP 대역 확인 (Googlebot은 공식 IP 공개)
- reverse DNS 체크
를 병행하는 것이 좋습니다.
- GA와 서버 로그 수치를 “맞추려고” 하기보다는
GA는 사용자 행동 분석용,
서버 로그는 트래픽/보안 분석용으로 목적을 분리해서 보시는 게 가장 좋습니다.
정리하면,
방문자가 많은데 실제 사용자가 적어 보이는 건 대부분 봇 트래픽 때문이고, GA 수치가 실 사용자에 더 가깝습니다.
봇 체크는 User-Agent + IP 기반으로 가능하고, GA와 서버 로그는 같은 기준으로 비교하면 안 됩니다.
이 방향으로 보시면 헷갈리지 않으실 거예요.