비즈니스 현실11 분 읽기

광고 거절을 크롤러 탓으로 돌릴 뻔했다

AdSense가 '가치가 별로 없는 콘텐츠'로 사이트를 거절했습니다. 저는 CDN이 크롤러를 막았다고 확신했고, 예전에 실제로 그랬던 적도 있었습니다. 확인해 보니 크롤러는 멀쩡히 들어오고 있었고, 문제는 제 앱 본문이 472자라는 사실이었습니다.

#monetization#adsense#reality-check#first-principles#seo
개념 도식: 왼쪽은 '크롤러가 막혔다'는 편한 가설, 오른쪽은 본문 472자와 조회 29,625 대비 세션 29라는 실측
편한 가설은 토글 하나로 끝나고, 실측은 전략을 다시 쓰게 만듭니다.

광고 심사 결과를 열었더니 이렇게 적혀 있었습니다. 주의 필요 — 정책 위반: 가치가 별로 없는 콘텐츠.

저는 곧바로 원인을 알았다고 생각했습니다. 제 apex 도메인은 CDN 뒤에 있고, 그 CDN은 봇을 챌린지로 막습니다. curl로 제 페이지를 받으면 콘텐츠가 아니라 "잠시만 기다리십시오" 화면이 옵니다. 심사관이 본 게 그 화면이라면, 콘텐츠가 없다고 판정하는 게 당연합니다. 게다가 이 가설에는 전례까지 있었습니다. 몇 달 전 같은 심사에서 실제로 크롤 차단이 원인이었던 적이 있거든요.

토글 하나만 끄면 되는 문제. 저는 그렇게 믿고 싶었습니다.

질문 하나 드리고 시작하겠습니다. 당신의 진단 중에 **"고치기 쉬워서 믿고 있는 것"**이 있습니까? 저는 있었습니다.

첫 번째 측정이 거짓말을 했다

가설을 확인하려고 앱별 본문 글자수를 쟀습니다. HTML을 받아 태그와 스크립트를 걷어내고 남는 글자를 세는 스크립트였습니다. 결과 중 하나가 이랬습니다.

ootssu.com/guides/mbti-compatibility.html    58자

58자. 저는 이걸 보고 "가이드 페이지가 렌더링이 깨졌구나" 하고 새 버그를 하나 만들어 냈습니다.

깨진 건 페이지가 아니라 제 측정이었습니다. 그 58자는 CDN 챌린지 페이지의 텍스트였습니다. 서버에 SSH로 들어가 원본 파일을 확인하니 14,989바이트에 본문·구조화 데이터·FAQ 3문항이 전부 멀쩡했습니다.

여기서 아이러니가 하나 생깁니다. 저는 "크롤러가 챌린지 페이지를 봤을 것"이라는 가설을 검증하려다가, 제 자신이 챌린지 페이지를 쟀습니다. 가설이 예측한 실패를 제가 재현한 셈인데, 그렇다고 가설이 참이 되는 건 아닙니다. 봇마다 대우가 다르니까요.

가설이 무너진 지점

그래서 반대편을 봤습니다. 크롤러가 정말 막혀 있나?

첫째, 제 앱 33개는 apex가 아니라 별도 호스팅에 있습니다. 응답 헤더를 찍어 보니 CDN을 아예 거치지 않습니다.

ddi.ootssu.com     server: Vercel
tarot.ootssu.com   server: Vercel
dev.ootssu.com     server: Vercel

즉 심사관이 앱들을 읽는 데는 아무 장애물이 없었습니다. 차단 가설이 성립하려면 판정 대상이 apex 한 장뿐이어야 하는데, 광고 네트워크는 도메인 전체를 봅니다.

둘째, 서버 접근 로그를 열었습니다. 보관 창이 13시간뿐이지만 그 안에서:

Googlebot:            12   (304 11건, 200 1건, 301 1건)
AdsBot-Google:         1
Mediapartners-Google:  0

검색 크롤러는 정상적으로 들어와 정상 응답을 받고 있었습니다. 차단됐다면 이 줄들이 없어야 합니다.

가설 기각. 편한 쪽이 틀렸습니다.

그럼 진짜 뭘 봤길래

남은 가능성은 하나뿐이었습니다 — 심사관이 콘텐츠를 읽었고, 읽은 뒤에 얇다고 판단했다. 그래서 CDN을 안 타는 앱들만 골라 다시 쟀습니다. 이번엔 측정이 유효합니다.

mindage        472자
ddi            530자   ← 유입 1위 앱
bloodtype      814자
tarot 홈       900자
lifeweeks     1,296자
zodiac        1,689자
tarot 카드상세 1,706자  ← 최대

입력 폼 하나, 계산 결과 한 화면, 고유 텍스트 500자 안팎. 이런 앱이 서른네 개, 전부 같은 템플릿에서 나왔습니다.

이 숫자를 보고 나니 심사 문구가 다르게 읽혔습니다. "가치가 별로 없는 콘텐츠"는 모호한 트집이 아니라 정확한 서술이었습니다.

값싼 수정이 없다는 걸 확인한 방법

여기서 멈추고 여쭙겠습니다. 당신이라면? 서른네 개 앱에 글을 채워 넣어 재심사를 노리겠습니까, 아니면 이 판정이 가리키는 방향을 받아들이겠습니까?

저는 회수부터 계산했습니다. 같은 기간 유입 계측을 읽어 보니 28일 동안 앱 전체 세션이 189개였습니다. 여기에 광고가 붙어 정상 단가가 나온다 해도 월 1달러 언저리입니다. 서른네 개 앱의 콘텐츠를 채우는 작업량과 비교가 되지 않습니다.

구조도 불리했습니다. 광고 네트워크의 사이트 단위는 루트 도메인입니다. 서브도메인을 따로 등록할 수 없습니다. 그러니까 서른네 개 중 가장 얇은 하나가 도메인 전체를 막습니다. 두꺼운 자산이 없지도 않습니다 — apex의 로케일 허브는 1만 자가 넘고, 타로 카드 사전은 1,706자짜리 페이지가 468장 있습니다. 그런데 그것들이 얇은 계산기 서른 개를 상쇄해 주지 않습니다.

같은 원인을 가리키는 세 번째 숫자

마지막으로 하나 더 맞춰 봤습니다. 같은 28일, 유튜브 채널 열 개의 조회수 합계는 29,625였습니다. 그리고 그 조회가 만든 앱 세션은 29개였습니다. 전환율 0.098%, 조회 천 번에 방문 한 명입니다.

광고 심사관의 판정, 검색 클릭 수, 그리고 이 전환율. 세 개가 서로 다른 곳에서 같은 말을 하고 있었습니다. 사람이 도착해서 머물 이유가 페이지에 없다는 것.

거절은 손실이 아니라 정보였습니다. 그것도 무료로 받은, 외부의 정직한 평가.

자가진단 3개

당신 프로젝트에 그대로 대볼 수 있는 항목만 남깁니다.

  1. 당신의 측정 도구가 진짜 콘텐츠를 재고 있습니까? CDN·봇 차단·로그인 벽 뒤라면, 당신이 세고 있는 건 에러 페이지 글자수일 수 있습니다. 원본 파일과 한 번은 대조하세요.
  2. 가장 유입이 많은 페이지의 고유 텍스트가 몇 자입니까? 500자 근처라면, 검색엔진과 광고 심사가 같은 결론을 내릴 준비가 돼 있습니다.
  3. 당신의 진단 중 "토글 하나로 끝나는 것"이 있습니까? 그게 사실이면 다행이고, 아니라면 그 가설이 다른 곳을 못 보게 막고 있습니다.

솔직한 부분

이 글에는 반전이 없습니다. 크롤러 설정을 고쳐 승인을 받아 냈다는 결말이면 좋았겠지만, 실제로는 제가 편한 가설을 세웠다가 데이터에 밀려 접었습니다. 그리고 그 데이터는 이 도메인의 다른 지표들이 이미 몇 주째 말하고 있던 것과 정확히 같았습니다.

거절 통보는 아직 그대로 있습니다. 재심사는 넣지 않았습니다. 지금 이 자산에서 값이 매겨지는 경로는 광고가 아니라 다른 쪽이라는 게 오늘 계산의 결론이고, 저는 그쪽부터 확인해 볼 생각입니다.

이 결정 이전의 이야기 — 결제사가 카테고리를 막아 유료를 접고 광고로 갔던 과정 — 은 결제사가 운세 앱을 거절한 뒤에 적어 뒀습니다. 그때 세운 계획이 오늘 이 판정으로 닫혔습니다. 유입을 소스별로 처음 쟀을 때 나온 숫자는 앱 유입의 63%는 내가 안 밀던 채널에서 왔다에 있습니다.

당신 사이트에서 가장 잘 나가는 페이지의 본문 글자수, 지금 한 번 세어 보시겠습니까? 예상보다 작게 나온다면 저와 같은 자리에 서 계신 겁니다.

관련 글