대시보드에 찍힌 숫자를 보고 처음엔 잘못 봤나 싶었습니다.
$15
일주일 동안 광고를 돌린 결과였어요. 그동안 사이트에는 하루 3만 PV, 방문자 3천 명 정도가 들어오고 있었습니다.
"내가 광고를 잘못 붙였나?"
슬롯 위치를 옮겨보고, 개수도 줄여보고, 상단 배너도 빼봤습니다. 별로 안 바뀌더군요.
결론부터 말하면 문제는 배치가 아니었습니다.
애드센스는 왜 떨어졌는지 안 알려줍니다
시작은 애드센스였습니다. 두 번 넣었고 두 번 다 떨어졌어요.
거절 메일을 받고 대시보드를 열어봤는데 뭐가 문제인지는 안 적혀 있었습니다. "거절 사유가 될 수 있는 것들"만 목록으로 쭉 나열돼 있고, 그중 어디에 걸렸는지는 알려주지 않아요. 문제가 된 페이지 URL도 없었고요.
예전에 다른 사이트로는 승인을 받아본 적이 있어서 더 감이 안 왔습니다. (그땐 그냥 됐었는데..)
처음 세운 가설은 이거였습니다.
"봇이 우리 페이지를 못 읽는 거 아닐까?"
아이템 시세는 클라이언트에서 불러오니까, JS를 실행하지 않는 크롤러 눈에는 빈 껍데기로 보일 수 있겠다 싶었거든요. 그런데 확인해보니 아니었습니다.
# JS 없이 HTML만 받아보기 curl -s https://mapleplanet.gg/items/... | grep "최저가\|평균가\|거래량" # → 시세 요약이 서버 렌더로 멀쩡히 들어있음
가설이 틀렸습니다. 그럼 진짜 이유는 뭐였을까요.
나중에 짐작한 건데 아마 콘텐츠였을 겁니다. JS를 실행해서 렌더된 DOM을 봐도
<p> 태그가 0개였거든요. 우리 사이트는 처음부터 끝까지 숫자와 표뿐이고, 사람이 쓴 문장이 한 줄도 없었습니다.물론 이것도 짐작입니다. 구글은 끝까지 안 알려줬으니까요.
남의 답안지는 공개돼 있었습니다
구글이 안 알려주면 잘 되고 있는 데를 보면 됩니다. 그리고 그건 사실 공개돼 있어요.
ads.txt입니다.이 파일은 "이 사이트의 광고를 팔 권한이 누구에게 있는가"를 선언하는 텍스트 파일이고, 누구나 열어볼 수 있습니다. 특히
MANAGERDOMAIN 한 줄이 실제 관리 주체를 그대로 알려줘요.# 디시인사이드 / 인벤 MANAGERDOMAIN=anymanager.io # OP.GG MANAGERDOMAIN=rev.iq
33개 사이트를 훑어봤습니다. 국내 대형 커뮤니티와 게임 사이트는 대부분 광고 관리 플랫폼을 끼고 있었어요. 애드센스를 직접 붙이는 게 아니라 중간 사업자가 인벤토리를 관리해주는 구조입니다.
우리처럼 구글 한 줄만 있는 곳이 오히려 소수였습니다.
그중 rev.iq는 셀프 가입이 됐습니다. OP.GG가 쓰고 있길래 "게임 사이트니까 우리랑 비슷하겠지" 하고 바로 붙였어요.
어디에 붙일지도 대충 정하지 않았습니다. 경쟁사 슬롯 위치를 긁어서 우리 레이아웃 거터 폭이랑 비교하고, 페이지별 배치도를 그리고, 실제 화면 위에 목업까지 얹었습니다. 그 얘기는 길어서 따로 썼어요.
슬롯은 다 떴는데 하루 2달러였습니다
그렇게 붙이고 일주일. 그게 맨 위의 $15입니다.
하루 2달러꼴이에요. 1000 PV당으로 환산하면 90원쯤 됩니다.
비교할 기준이 필요해서 국내 매체들이 광고주에게 실제로 부르는 값을 찾아봤습니다. 디시인사이드 광고 단가표는 CPM 2,110~4,714원, OP.GG의 PC 웹 배너는 1,000~2,200원이었습니다. 둘 다 직접 판매하는 호가라 실제 정산가와는 다르겠지만, 자릿수를 보기엔 충분했어요.
우리는 90원입니다. 호가와 실현 수익을 그대로 비교할 순 없지만, 열 배 스무 배 차이가 나면 "수익이 좀 적네"가 아니라 뭔가 구조적으로 잘못됐다는 뜻이었어요.
그래도 처음엔 계속 제 탓인 줄 알았습니다. 슬롯을 옮기고, 한 화면에 최대 3개까지만 두도록 줄이고, 상단 광고를 빼고, viewability를 높여보려고 위치를 다시 잡고.
숫자는 거의 안 움직였습니다.
한국 광고가 하나도 없었습니다
그러다 실제로 뜨는 광고 자체를 봤습니다.
한국 광고가 없었어요. 전부 해외 소재였습니다.
우리 사이트 트래픽은 98%가 한국입니다. 게임 시세를 찾아보는 사람들이니 당연히 국내 유저고요. 그런데 그 지면에 해외 광고만 돌아오고 있었던 겁니다.
확인 삼아 경쟁사들의 fill을 다시 쟀습니다. 사이트마다 3번씩 돌려서 어떤 네트워크가 슬롯을 채우는지 봤어요.
fmkorea/detail 슬롯 16개 fill 16/16 [AdSense, NHN ACE(KR)] dcinside/list 슬롯 12개 fill 12/12 [AdFit] namuwiki/main 슬롯 5개 fill 5/5 [GAM]
NHN ACE, 카카오 AdFit. 전부 국내 SSP였습니다. 잘 되는 한국 사이트들은 국내 수요처가 지면을 채우고 있었던 거예요.
rev.iq는 해외 SSP를 묶어놓은 매니저였습니다. 그들 입장에서 한국 게임 사이트 지면은 딱히 살 이유가 없는 재고였고요.
문제는 배치가 아니라 수요처였습니다.
6월 30일에 붙였고 7월 12일에 갈아탔습니다. 2주 반짜리 실험이었어요.
국내를 아는 곳으로 갈아탔습니다
디시인사이드와 인벤이 쓰는 anymanager.io. 그 운영사인 AnyMind에는 그전부터 계속 연락을 넣고 있었습니다. 셀프 가입이 아니라 담당자가 붙는 방식이라 답을 기다려야 했는데, 마침 연락이 왔어요.
여기서 MCM이라는 걸 알게 됐습니다. 구글이 인정한 파트너사가 퍼블리셔 대신 광고 인벤토리를 관리하는 제도예요.
핵심은 이겁니다. 애드센스 직접 승인이 막혀 있어도, 파트너를 통하면 Google Ad Manager 계정을 열 수 있습니다. 심사 주체가 달라지니까요.
담당자와는 계속 텔레그램으로 얘기했습니다. 이메일보다 훨씬 빨랐어요.

유닛을 8개 제안받았는데 전면광고만 조정을 요청했습니다. 우리 유저는 아이템 하나 찾으려고 평균 6분 넘게 여러 페이지를 돌아다니거든요. 이동할 때마다 전면광고가 뜨면 그 흐름이 끊깁니다.
그런데 나중에 정말로 매번 뜨는 것처럼 느껴져서 "이거 좀 빼주세요" 하고 다시 요청했어요. 담당자 답은 "하루 1회로 제한돼 있는데요"였습니다.
새 프로필로 6번 이동하면서 다시 테스트해보니 정말 1회만 나왔습니다. 캐시 남은 제 브라우저가 만든 착시였어요. (괜히 사람 붙잡고..)
지금은 이렇습니다
슬롯 4개가 라이브입니다. 하단 앵커, 좌우 레일, 홈 전면광고. 콘솔에서 확인하면 전부 채워져서 돌아옵니다.
googletag.pubads().getSlots().length // 4 anymindTS.originalConfigs.configs.length // 11
아직 안 풀린 것도 하나 있어요.
anymindTS.originalConfigs.siteSetting.isSPA // false
우리는 Next.js라 페이지 이동이 전부 클라이언트에서 일어납니다. 이 설정이
false면 세션의 첫 페이지에서만 광고가 로드되고 나머지는 요청이 안 나가요. 세션당 페이지뷰가 데스크톱 5.6, 모바일 7.4니까 노출이 5배쯤 차이 납니다.설정 한 줄인데, 콘솔을 안 봤으면 영영 몰랐을 겁니다.
글을 쓰면서 rev.iq 대시보드를 다시 열어봤는데 기록이 남아 있지 않더군요. 2주 반 동안 뭘 했는지는 커밋 로그에만 남았습니다.
혹시 애드센스에서 떨어지고 이유를 몰라 헤매고 계신다면, ads.txt부터 몇 개 열어보시는 걸 추천드려요. 저는 그게 제일 빨랐습니다.
덧 — 갈아탄 뒤에도 안 끝났습니다
이 글을 쓰고 한참 뒤에 다시 재봤는데, 아직 정리 중인 게 몇 개 남아 있습니다.
먼저 모바일 인컨텐츠 유닛이 요청 자체를 안 보내고 있었습니다. 슬롯은 정의돼 있는데 컨테이너가 계속 0px이라 광고 요청이 나가질 않아요.
// 모바일에서 실제로 나간 광고 요청 gampad/ads → mb_allsite_anchor_bottom ✅ gampad/ads → mb_home_interstitial ✅ mb_allsite_mid1 ❌ 요청 0건, 342x0
설정을 열어보니
setCollapseEmptyDiv: "before_fetch"와 lazy load가 같이 걸려 있었습니다. 광고가 차기 전엔 div를 0px로 접어두는데, lazy load는 그 div가 화면에 들어와야 요청을 보냅니다. 서로를 기다리는 상태였어요.그리고 대시보드가 열려서 드디어 숫자를 봤습니다. 6일간 노출 30,811회에 수익 $8.30, eCPM은 $0.27이었어요. 1000노출당 370원쯤이니 단가 자체는 나쁘지 않습니다.
문제는 노출이 안 나온다는 거였습니다. 같은 기간 페이지뷰가 9만 9천인데 노출은 3만이니, 페이지뷰 하나당 0.31개꼴이에요. 슬롯이 4개인데 세 페이지를 봐야 광고 하나가 뜹니다.
처음엔 광고 차단인가 했는데 아니었습니다. 차단이면 슬롯이 비어야 하는데 4개가 다 채워져 있었고, 차단만으로 이 숫자가 나오려면 차단율이 87%는 돼야 하거든요. 국내는 보통 20~40%입니다.
진짜 원인은 클라이언트 이동이었습니다. 홈에서 도감으로 옮겨보니 새 광고 요청이 한 건도 안 나갔어요.
홈 → /database (클라이언트 이동, 페이지 리로드 없음) 광고 요청 이동 전 2건 → 이동 후 2건 신규 0건 슬롯 4개 그대로 (파괴도 재생성도 안 됨)
세션당 페이지뷰가 5.4인데 광고는 세션당 한 번만 뜨는 셈입니다. 글 앞에서 "아직 안 풀린 것"으로 적어둔 isSPA가 바로 이거였고, 이게 단가보다 훨씬 큰 손실이었습니다.
마지막으로 하나 더. 채워지는 광고를 뜯어보니 전부 오픈 경매 백필이었습니다.
advertiserId: 4420818472 lineItemId: null ← 직접 판매 라인아이템 없음 isBackfill: true ← 3개 슬롯 전부
디시나 인벤은 이 위에 층이 두 개 더 있습니다. 자체 애드서버로 파는 직접 판매, 그리고 국내 SSP와의 직접 계약이요. ads.txt를 다시 보니 인터웍스미디어·애드믹서 같은 국내 판매자가 그쪽엔
DIRECT로 물려 있는데 우리는 하나도 없었습니다.매니저를 바꾼 걸로 절반은 왔는데, 나머지 절반은 아직입니다. 이건 다음 글이 될 것 같네요.
