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 화면으로 돌아갔다.
- 사이트
ecojk.dev의 상태는 “검토 필요”. 확인 방법 중 “AdSense 코드 스니펫”을 선택 - 배포된 페이지에 코드가 있으니 “코드를 삽입했습니다” 체크 → 확인 → 사이트가 확인되었습니다
- 검토 요청 → 상태가 “준비 중 · 광고 게재 가능 여부 검토 중”으로 변경
심사는 보통 며칠, 길면 2~4주 걸린다고 안내한다. 재미있는 건 Ads.txt 상태가 한동안 “찾을 수 없음”으로 남아 있다는 점이다. 파일은 이미 올라가 있지만 AdSense가 며칠에 한 번씩만 다시 읽기 때문으로, 기다리면 된다.
승인 전에는 광고가 나오지 않는다. 승인되면 동의 메시지(CMP) 설정과 광고 위치 조정이 남아 있다. 결과가 나오면 이어서 쓴다.