클라이언트 계정이 여러 개일 때 UTM 파라미터를 하나의 네이밍 규칙으로 통일하는 실무 방법
인스타·유튜브·검색 광고를 여러 클라이언트 계정으로 돌리다 보면 UTM이 제각각이 되어 리포트가 꼬입니다. 대행사 실무에서 쓰는 UTM 네이밍 규칙 설계법, 생성 시트, 점검 루틴을 정리했습니다.
UTM이 꼬이면 리포트가 먼저 무너집니다
광고 대행사에서 여러 클라이언트의 인스타그램, 유튜브, 검색 광고 계정을 동시에 굴리다 보면 어느 순간 이런 장면을 만나게 됩니다. 월말 리포트를 뽑으려고 분석 도구를 열었는데, 같은 인스타그램 유입이 instagram, Instagram, ig, insta, IG_story 다섯 줄로 쪼개져 있는 상황이요. 저도 처음 팀장을 맡았을 때 이걸 정리하느라 이틀을 날린 적이 있습니다.
문제는 담당자가 게을러서가 아닙니다. 클라이언트마다 담당자가 다르고, 각자 자기 방식으로 링크를 만들고, 그 링크가 바이오·스토리·쇼츠 설명란·광고 소재에 흩어져 붙어 있기 때문입니다. 계정이 3개일 땐 눈으로 맞출 수 있지만 15개, 20개가 넘어가면 사람의 기억력으로는 버틸 수 없습니다.
그래서 저희 팀은 2년 전부터 모든 클라이언트 계정에 동일한 UTM 네이밍 규칙을 적용하고 있습니다. 오늘은 그 규칙을 어떻게 설계했고, 어떻게 팀에 정착시켰는지 실무 순서대로 정리해 보겠습니다.
먼저, UTM 5개 필드의 역할부터 고정하세요
규칙을 만들기 전에 각 필드에 무엇을 넣을지 팀 전체가 같은 그림을 가져야 합니다. 의외로 여기서부터 사람마다 해석이 다릅니다.
| 필드 | 저희 팀 정의 | 예시 값 |
|---|---|---|
| utm_source | 트래픽이 출발한 플랫폼 이름 | instagram, youtube, naver, kakao |
| utm_medium | 유입 방식(유료/무료/형태) | paid-social, organic-social, cpc, email |
| utm_campaign | 클라이언트 코드 + 캠페인 목적 + 시작 시점 | ab12_launch_2611 |
| utm_content | 소재·위치 구분 | reels-v2, bio-link, story-swipe |
| utm_term | 검색 키워드 또는 타깃 세그먼트 | lookalike-30d, 여름원피스 |
핵심은 source와 medium을 절대값처럼 다루는 것입니다. 이 두 필드는 분석 도구가 채널 그룹을 나눌 때 기준으로 쓰기 때문에, 여기서 표기가 흔들리면 기본 리포트 자체가 깨집니다. 반면 content와 term은 캠페인마다 자유도를 조금 더 줘도 괜찮습니다.
네이밍 규칙 설계 5원칙
저희 팀 규칙 문서 첫 페이지에 박혀 있는 다섯 가지입니다.
1. 전부 소문자. 대소문자를 구분하는 도구가 많아서 Instagram과 instagram이 따로 집계됩니다. 예외 없이 소문자로 통일합니다.
2. 단어 연결은 하이픈(-), 구획 구분은 언더스코어(_). 예를 들어 ab12_spring-sale_2603처럼 쓰면 언더스코어 기준으로 잘라 클라이언트·목적·날짜를 엑셀에서 바로 분리할 수 있습니다.
3. 공백·한글·특수문자 금지(term 제외). 공백은 %20으로 바뀌어 지저분해지고, 한글은 인코딩 과정에서 깨지는 경우가 생깁니다. 검색 키워드처럼 한글이 꼭 필요한 term만 예외로 둡니다.
4. 허용 값 목록(사전) 밖의 단어는 쓰지 않는다. source와 medium은 미리 정한 목록에서만 고르게 합니다. 새 값이 필요하면 팀 채널에 요청하고, 승인 후 사전에 추가합니다.
5. 날짜는 YYMM 4자리. 2611이면 2026년 11월입니다. 일 단위까지 넣으면 캠페인명이 너무 길어지고, 연도 없이 월만 넣으면 해가 바뀌었을 때 겹칩니다.
클라이언트 코드가 규칙의 중심입니다
여러 클라이언트를 다루는 대행사에서 가장 중요한 건 utm_campaign 맨 앞에 붙는 클라이언트 코드입니다. 저희는 영문 2자리 + 숫자 2자리로 고정했습니다.
- 브랜드명을 그대로 쓰지 않는 이유: 브랜드명이 바뀌거나 길어지면 규칙이 무너집니다. 그리고 링크가 외부에 노출될 때 경쟁사나 다른 클라이언트에게 우리 고객사 목록이 드러나는 것도 피하고 싶었습니다.
- 코드표는 내부 공유 시트 한 곳에서만 관리하고, 신규 클라이언트 계약 시 운영 리드가 발급합니다.
- 한 클라이언트가 브랜드를 여러 개 가지고 있으면
ab12,ab13처럼 번호만 달리합니다.
이렇게 해두면 분석 도구에서 캠페인명을 ab12로 필터만 걸어도 해당 클라이언트의 모든 채널 성과가 한 번에 모입니다. 월말 리포트 시간이 체감상 절반 가까이 줄었습니다.
생성은 사람 손이 아니라 시트가 하게 하세요
규칙을 문서로만 공유하면 3주 안에 무너집니다. 경험상 그렇습니다. 사람은 바쁠 때 규칙 문서를 열어보지 않거든요. 그래서 저희는 UTM 생성 시트를 만들어 링크는 반드시 거기서만 뽑도록 했습니다.
시트 구성은 단순합니다.
- A열: 랜딩 URL 입력
- B~C열: source, medium을 드롭다운으로만 선택 (사전 시트 참조)
- D열: 클라이언트 코드 드롭다운
- E열: 캠페인 목적 (launch, promo, always-on, retarget 등 드롭다운)
- F열: 시작 월 YYMM
- G~H열: content, term 자유 입력
- I열: LOWER, SUBSTITUTE 함수로 대문자·공백을 자동 정리한 최종 URL
- J열: 생성자, 생성일, 실제 게시 위치 메모
드롭다운이 핵심입니다. 손으로 칠 수 있는 칸을 최소화하면 오타가 구조적으로 줄어듭니다. 그리고 J열 기록 덕분에 나중에 이상한 값이 보이면 누가 언제 만든 링크인지 바로 추적할 수 있습니다.
플랫폼별로 자주 꼬이는 지점
계정을 여럿 돌리다 보면 플랫폼마다 반복되는 함정이 있습니다.
인스타그램
바이오 링크, 스토리 링크 스티커, 광고 소재가 모두 같은 source를 쓰지만 medium이 달라야 합니다. 바이오와 스토리는 organic-social, 광고는 paid-social입니다. 이걸 섞으면 유료 성과가 부풀려 보이거나 반대로 오가닉 성과가 묻힙니다. 링크 하나를 바이오와 광고에 같이 쓰는 습관은 꼭 끊어야 합니다.
유튜브
쇼츠 설명란, 롱폼 설명란, 고정 댓글, 커뮤니티 탭의 링크를 utm_content로 구분합니다. shorts-desc, long-desc, pinned-comment처럼요. 유튜브는 같은 영상에서도 위치별 클릭 차이가 꽤 커서, 이걸 나눠두면 다음 영상 기획 때 링크 배치 판단이 쉬워집니다.
검색 광고
검색 광고는 자동 태깅 기능과 수동 UTM이 충돌하는 경우가 있습니다. 클라이언트 계정마다 자동 태깅 설정 상태가 다를 수 있으니, 계정 인수인계 때 설정값을 먼저 확인하고 시트의 메모란에 남겨둡니다.
기존 링크가 이미 엉망이라면, 정리 순서
새로 시작하는 팀보다 이미 수백 개의 링크가 흩어져 있는 팀이 더 많을 겁니다. 저희가 실제로 했던 순서입니다.
1. 최근 3개월 데이터에서 source/medium 조합을 전부 뽑습니다. 생각보다 종류가 많아서 놀라실 겁니다.
2. 유입량 상위 80%를 차지하는 링크부터 교체합니다. 모든 링크를 한 번에 바꾸려다 지칩니다.
3. 교체 전후 날짜를 기록합니다. 리포트에서 수치가 갑자기 바뀌어 보일 때 클라이언트에게 설명할 근거가 됩니다.
4. 분석 도구의 맞춤 채널 그룹에 옛 표기를 새 표기로 묶는 규칙을 임시로 추가합니다. 과거 데이터와 비교할 때 숫자가 끊기지 않습니다.
5. 한 달 뒤 사전에 없는 값이 남았는지 다시 점검합니다.
규칙을 유지하는 월 1회 점검 루틴
규칙은 만드는 것보다 지키는 게 어렵습니다. 저희는 매월 첫째 주에 30분짜리 점검을 합니다.
- 지난달 유입 데이터에서 사전에 없는 source·medium 값 추출
- 대문자나 공백이 섞인 campaign 값 확인
- 클라이언트 코드 없이 시작하는 캠페인명 확인
- 발견된 건은 생성 시트 J열로 담당자를 찾아 개별 피드백
여기서 중요한 건 공개적으로 지적하지 않는 겁니다. 규칙 위반이 반복되는 사람은 대개 시트를 쓰기 불편하다고 느끼는 경우라서, 오히려 시트 쪽을 개선하는 계기로 삼는 게 낫습니다.
계정 운영 환경도 같이 정리하면 좋은 이유
여담처럼 들리지만 꽤 관련이 있는 이야기입니다. 여러 클라이언트 계정을 한 브라우저에서 번갈아 로그인하다 보면, 다른 클라이언트의 링크를 엉뚱한 계정 바이오에 붙이는 실수가 생깁니다. UTM은 맞게 만들었는데 붙이는 곳이 틀린 거죠.
저희 팀은 클라이언트별로 브라우저 프로필을 분리하고, 프로필 이름에도 같은 클라이언트 코드를 붙여 둡니다. 다계정 운영 환경을 분리하는 도구로 안티디텍트 브라우저를 쓰는 팀도 많은데, 어떤 도구를 쓰든 핵심은 링크 코드와 작업 환경 이름이 같은 체계를 따르게 하는 것입니다. 화면 상단에 보이는 프로필 이름과 링크 안의 클라이언트 코드가 다르면 바로 눈에 걸리니까요.
마무리
UTM 네이밍 규칙은 화려한 기술이 아니라 팀의 언어를 맞추는 일입니다. 정리하면 이렇습니다.
- source·medium은 사전 목록에서만 선택
- 소문자, 하이픈과 언더스코어 역할 구분, YYMM 날짜
- 캠페인명 맨 앞은 클라이언트 코드
- 링크는 생성 시트에서만 발급
- 월 1회 30분 점검
제 경험상 이 다섯 가지만 지켜도 월말 리포트 때 데이터를 맞추느라 야근하는 일은 확실히 줄어듭니다. 계정이 늘어날수록 효과가 커지는 작업이니, 클라이언트가 몇 곳 안 될 때 미리 잡아두시길 권합니다.