Google Tag Manager(GTM)와 Google Analytics 4(GA4)를 연동할 때 웹사이트 내부 검색어를 추적하면서 발생하기 쉬운 (not set)이나 unknown 데이터 오염 문제를 완벽히 해결하는 실무 가이드입니다. 쿼리 파라미터 방식과 URL 경로 구조를 동시에 다루는 맞춤 자바스크립트 변수 설계를 통해 깨끗한 검색 데이터만 수집할 수 있습니다.
GTM-GA4 내부 검색어 추적의 중요성과 문제점
많은 웹 서비스 운영자들은 검색바 UI를 통해 검색되는 내부 검색어(키워드)가 궁금할 수 있습니다. 사용자가 웹사이트 상에서 검색하는 내용을 파악하는 것도 마케팅에서 매우 중요하기 때문입니다. 고객이 어떤 상품이나 정보를 찾기 위해 어떤 단어를 입력하는지 분석하면, 사이트 내 콘텐츠 개선은 물론 검색 광고 및 SEO 전략의 방향성을 정확하게 잡을 수 있습니다.
그러나 GA4에서 내부 검색어를 수집할 때, 잘못된 변수 처리로 인해 (not set) 또는 "unknown"이라는 쓸모없는 데이터가 쌓이는 경우가 많습니다. 이번 글에서는 search 파라미터와 URL 경로(/search/키워드)에서 유입된 실제 검색어만 GA4로 정확히 전송하는 방법을 설명합니다. 파라미터는 사이트에 따라 q, query, term 등으로 다양할 수 있으며 맞춰서 쓰시면 됩니다. 예를 들어 www.example.com/?term="키워드" 이런 형태입니다. 여기에서 term을 찾아야 합니다.
1. 기본 구조 이해 및 검색 방식의 다양성
예시에서는 내부 검색이 두 가지 방식으로 이뤄집니다. 하나의 도메인에 RESTful URL과 POST URL을 동시에 쓰는 경우를 말하는 것입니다. 실무 환경에서는 개발 방식에 따라 검색 결과 페이지가 쿼리 스트링 형태(예: ?search=키워드)로 열릴 수도 있고, 깔끔한 경로 형태(예: /search/키워드)로 열릴 수도 있습니다. 두 가지 패턴을 모두 대응해야 누락 없는 데이터 수집이 가능해집니다.
| 검색 방식 | 추출 방법 | 대표적 URL 구조 예시 |
|---|---|---|
| 검색 방법 1 | search 쿼리 파라미터 |
https://example.com/shop?search=노트북 |
| 검색 방법 2 | URL 경로 마지막 segment | https://example.com/search/노트북 |
2. GTM에서 맞춤 자바스크립트 변수 3개 생성하기
정확한 데이터 정제를 위해 구글 태그 관리자(GTM)에서 총 3개의 맞춤 자바스크립트 변수를 생성해야 합니다. 각 변수는 단계별로 역할을 수행하며 최종적으로 유효한 검색어만 걸러냅니다.
① Inner_keyword (쿼리 파라미터 기반 추출)
| 변수명 | 유형 | 역할 |
|---|---|---|
inner_keyword |
맞춤 자바스크립트 | 쿼리 파라미터 기반 검색어 추출 및 인코딩 처리 |
function() {
function getQueryParam(param) {
var queryString = window.location.search;
var params = new URLSearchParams(queryString);
return params.get(param);
}
var raw = getQueryParam("search");
if (!raw) return "unknown";
try {
return decodeURIComponent(decodeURIComponent(raw));
} catch (e) {
return "decode_failed";
}
}
② inner_keyword_total (URL 경로 기반 추출)
| 변수명 | 유형 | 역할 |
|---|---|---|
inner_keyword_total |
맞춤 자바스크립트 | URL 경로 기반 검색어 추출 |
function() {
try {
var path = window.location.pathname;
var segments = path.split('/').filter(Boolean);
var last = segments[segments.length - 1];
return decodeURIComponent(last);
} catch(e) {
return "decode_failed";
}
}
③ inner_keyword_final – 최종 통합 변수
| 변수명 | 유형 | 역할 |
|---|---|---|
inner_keyword_final |
맞춤 자바스크립트 | 유효한 값만 골라 반환하고 무효값 차단 |
function() {
var keyword = {{inner_keyword}};
var keyword_total = {{inner_keyword_total}};
function isValid(value) {
return typeof value === 'string' &&
value.trim() !== '' &&
value.toLowerCase() !== 'unknown' &&
value.toLowerCase() !== 'null';
}
if (isValid(keyword)) return keyword.trim();
if (isValid(keyword_total)) return keyword_total.trim();
return undefined; // 전송되지 않도록
}
3. GA4 이벤트 태그 및 트리거 설정
변수 설정이 완료되었다면 GTM에서 GA4 이벤트 태그를 생성하고, 올바른 트리거 조건과 매개변수를 연결해야 합니다. unknown을 의도적으로 GA4에 보내는 대신 undefined로 처리하면 GA에 아예 파라미터가 포함되지 않아 더 깔끔한 데이터 수집이 가능합니다.
| 설정 항목 | 값 |
|---|---|
| 이벤트 이름 | inner_keyword |
| 매개변수 | inner_keyword = {{inner_keyword_final}} |
| 트리거 조건 | 검색 페이지 or inner_keyword_final ≠ undefined |
추천 트리거 조건 세부 설정:
- Trigger Type: Page View
- 조건:
Page Path contains /search/또는 검색 쿼리가 포함된 페이지inner_keyword_final does not equal undefined
4. GA4 Custom Dimension 등록 방법
이벤트 매개변수로 수집된 데이터는 GA4 보고서에서 기본적으로 바로 보이지 않습니다. 따라서 관리자 메뉴에서 맞춤 측정기준(Custom Dimension)으로 등록하는 과정을 거쳐야 합니다.
- GA4 Admin(관리) → Custom Definitions(맞춤 정의) 메뉴로 이동
- Create Custom Dimension(맞춤 측정기준 만들기) 버튼 클릭
- 아래 표와 같이 세부 항목 설정 후 저장
| 항목 | 값 |
|---|---|
| 이름 | inner_keyword |
| 범위 | Event |
| 매개변수 | inner_keyword |
5. 실무 검증 및 활용 팁
설정이 끝났다면 반드시 GTM 미리보기(Preview) 모드와 GA4 디버그뷰(DebugView)를 통해 정상적으로 수집되는지 검증해야 합니다. 디버그 보기에서 inner_keyword 이벤트가 유효한 검색어로만 수집되는지 확인하고, Looker Studio와 연동하여 inner_keyword 기준 차트를 생성하면 unknown 없이 깔끔한 키워드 기반 분석이 가능해집니다. 이 방식은 모든 혼합 검색 구조를 쓰는 사이트에 응용 가능합니다.
| 검색어 | 이벤트 수 | 유입경로 |
|---|---|---|
| 상품 1 | 122 | naver / organic |
| 상품 2 | 95 | daum / cpc |
FAQ 및 실무 체크포인트
Q. 검색어가 한글일 때 깨짐 현상이 발생하면 어떻게 해야 하나요?
A. 브라우저 주소창에 따라 인코딩 방식이 다를 수 있습니다. 스크립트 내부에 decodeURIComponent를 중첩 적용한 이유가 바로 이 인코딩 오류를 방어하기 위함입니다. 만약 여전히 깨진다면 서버 측 인코딩 상태를 점검해야 합니다.
Q. 파라미터 이름이 ‘search’가 아니라 ‘query’인 경우는 어떻게 수정하나요?
A. 첫 번째 자바스크립트 변수 내부의 getQueryParam("search") 부분을 getQueryParam("query") 또는 사이트에서 사용하는 실제 파라미터명으로 변경하면 즉시 대응할 수 있습니다.
이제부터는 unknown 없는 진짜 검색어 분석이 가능합니다.
GTM과 GA4에서 완전한 데이터 정제의 시작입니다. 🎯
