AdSense 신청에서 만난 복병, 루트 도메인

AdSense 신청에서 만난 복병, 루트 도메인

블로그는 blog.ecojk.dev인데 AdSense는 루트 도메인만 받는다. 비워 둔 루트를 어떻게 처리할지 정하고, ads.txt와 소유권 확인을 거쳐 심사를 요청하기까지의 기록.

글 아홉 편을 올리고 AdSense를 신청하기로 했다. 코드 몇 줄 붙이면 끝일 줄 알았는데, 신청 화면에서 바로 막혔다. 사이트 주소에 blog.ecojk.dev를 넣을 수 없다.

AdSense는 루트 도메인만 받는다

지금 AdSense는 사이트를 루트 도메인 단위로만 등록받는다. blog. 같은 하위 도메인은 따로 추가할 수 없고, ecojk.dev의 승인 상태를 따라간다. 광고 판매자 목록인 ads.txt도 루트 주소(ecojk.dev/ads.txt)에서 확인한다.

문제는 이 블로그의 공개 주소가 blog.ecojk.dev 하나라는 점이다. 루트 ecojk.dev는 나중에 다른 용도로 쓸 생각으로 비워 뒀고, DNS 레코드조차 없었다. 이대로 신청하면 심사 봇이 루트에 들어와 아무것도 못 보고 돌아간다. 실제로 “사이트가 다운되었거나 이용할 수 없음”으로 거절당한 사례가 커뮤니티에 여럿 있다.

루트를 어떻게 처리할까

방법판단
루트는 ads.txt만 제공, 나머지 404심사 거절 위험. 제외
루트를 블로그로 301 (영구 이동)브라우저·검색엔진이 오래 기억한다. 나중에 루트를 다른 용도로 쓸 때 흔적이 남는다. 제외
블로그를 루트로 이전Search Console, 애널리틱스, 글 주소를 전부 바꿔야 한다. 제외
루트는 ads.txt만 직접 제공, 나머지는 블로그로 302 (임시 이동)채택

302를 고른 이유는 하나다. 언젠가 루트에 다른 것을 올리고 싶어졌을 때, 함수의 분기 하나만 바꾸면 흔적 없이 되돌릴 수 있다.

이 블로그는 CloudFront 배포 하나로 서비스되므로, 배포에 대체 도메인 ecojk.dev를 추가하고 뷰어 요청 함수에 분기를 넣었다.

// 루트 도메인: ads.txt만 제공, 나머지는 블로그로 임시 이동
if (host === 'ecojk.dev') {
  if (uri === '/ads.txt') {
    return request;
  }
  return redirect(302, 'https://blog.ecojk.dev' + uri + queryString(request.querystring || {}));
}

ads.txt는 저장소의 파일 하나로 관리하고, 두 주소가 같은 파일을 보여 준다. 내용은 AdSense가 정해 준 한 줄이다.

google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0

배포 후 점검 스크립트에도 두 줄을 추가했다. ecojk.dev/ads.txt가 200으로 열리는지, ecojk.dev/가 302로 블로그에 넘어가는지 매 배포마다 확인한다.

광고 코드는 설정 값 하나로

광고 코드는 모든 페이지의 <head>에 들어가야 한다. 게시자 ID를 사이트 설정에 두고, 값이 있을 때만 출력하게 했다.

{% if site.adsense_client and site.adsense_client != "" %}
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client={{ site.adsense_client }}" crossorigin="anonymous"></script>
{% endif %}

!= "" 비교가 붙은 이유가 있다. Liquid에서는 빈 문자열도 참이라, {% if site.adsense_client %}만 쓰면 값을 비워 둬도 깨진 스크립트 주소가 출력된다. 개인정보 처리방침의 문의 항목에서 같은 함정에 한 번 빠졌던 터라 이번엔 처음부터 막았다. 광고·분석 코드는 공개 빌드에서만 출력하고, 내부 미리보기에는 넣지 않는다.

소유권 확인과 심사 요청

준비를 마치고 AdSense 화면으로 돌아갔다.

  1. 사이트 ecojk.dev의 상태는 “검토 필요”. 확인 방법 중 “AdSense 코드 스니펫”을 선택
  2. 배포된 페이지에 코드가 있으니 “코드를 삽입했습니다” 체크 → 확인 → 사이트가 확인되었습니다
  3. 검토 요청 → 상태가 “준비 중 · 광고 게재 가능 여부 검토 중”으로 변경

심사는 보통 며칠, 길면 2~4주 걸린다고 안내한다. 재미있는 건 Ads.txt 상태가 한동안 “찾을 수 없음”으로 남아 있다는 점이다. 파일은 이미 올라가 있지만 AdSense가 며칠에 한 번씩만 다시 읽기 때문으로, 기다리면 된다.

승인 전에는 광고가 나오지 않는다. 승인되면 동의 메시지(CMP) 설정과 광고 위치 조정이 남아 있다. 결과가 나오면 이어서 쓴다.