애드센스 거절 사유 “가치가 별로 없는 콘텐츠”는 글이 부실하다는 뜻이 아닐 수 있습니다. 제 경우 원인은 글 17편이 아니라 같이 딸려 나간 빈 페이지 56개였습니다.
사이트 전체 82페이지의 본문 글자 수를 세어봤더니 68%가 800자 미만, 그중 49개는 300자도 안 됐습니다. 대부분 글 1편만 걸린 태그 아카이브였습니다.
Yoast의 noindex는 검색 색인만 막을 뿐 애드센스 크롤러는 그대로 봅니다. 얇은 페이지는 감추는 게 아니라 삭제해야 합니다.
Cloudflare Pages에 배포까지 끝내고 3주쯤 굴린 뒤 애드센스를 신청했습니다. “검토 중”이 며칠 이어지다 결과가 왔습니다.
가치가 별로 없는 콘텐츠
승인되지 않은 사이트에 관한 문제를 해결한 후 다시 검토를 요청할 수 있습니다.
한 줄이 전부였습니다. 어느 페이지가 문제인지, 뭘 고쳐야 하는지는 안 알려줍니다. 처음엔 글이 부실한 줄 알고 본문을 늘릴 궁리를 했는데, 범인은 제가 쓰지도 않은 페이지들이었습니다.
애드센스는 “글”이 아니라 “사이트”를 본다
착각의 출발점이 여기였습니다. 저는 제 사이트가 글 17편이라고 생각했습니다. 하지만 크롤러가 보는 aimake.log는 그게 아니었습니다.
워드프레스는 글을 하나 쓸 때마다 페이지를 여러 개 같이 만듭니다. 카테고리 아카이브, 태그 아카이브, 작성자 아카이브, 검색 페이지, 목록 페이지네이션. 전부 200 응답으로 살아 있는 정상 주소입니다.
그래서 실제로 세어봤습니다. 정적 내보내기 결과물(build/)의 HTML을 전부 훑어 <main> 안쪽 텍스트 길이를 잰 스크립트입니다.
python3 - <<'PY'
import re, glob
def text(p):
h = open(p, encoding='utf-8', errors='replace').read()
h = re.sub(r'<(script|style|nav|footer|header)\b.*?</\1>', ' ', h, flags=re.S|re.I)
m = re.search(r'<main.*?</main>', h, re.S)
t = re.sub(r'<[^>]+>', ' ', m.group(0) if m else h)
return re.sub(r'\s+', ' ', t).strip()
for p in sorted(glob.glob('build/**/*.html', recursive=True)):
if '/wp-' in p: continue
print(len(text(p)), p)
PY
결과가 이랬습니다.
| 구분 | 페이지 수 | 본문 길이 |
|---|---|---|
| 실제 글 | 17 | 2,500~7,700자 |
| 태그 아카이브 | 54 | 45개가 300자 미만, 나머지도 대부분 500자 안팎 |
| 작성자 아카이브 | 3 | 59자 |
검색 페이지 /find/ |
1 | 2자 |
| 목록·카테고리·소개·정책 | 7 | 1,100~1,700자 |
| 합계 | 82 | — |
82페이지 중 56개(68%)가 본문 800자를 못 넘겼고, 그중 49개는 300자도 안 됐습니다. 사이트에 들어온 심사자가 무작위로 페이지를 열었다면, 열 번 중 일곱 번은 제목 한 줄만 덩그러니 있는 화면을 봤다는 뜻입니다.
태그를 54개나 만든 게 왜 문제가 됐을까
글을 쓸 때마다 관련 단어를 태그로 달았습니다. 나중에 찾기 편할 것 같았거든요. 17편을 쓰는 동안 태그가 54개까지 늘었습니다.
문제는 태그마다 페이지가 하나씩 생긴다는 겁니다. 그리고 그 태그를 한 편만 달았다면, 그 페이지는 글 제목 한 줄이 전부입니다.
태그별로 글이 몇 편 걸려 있는지 세어봤습니다.
./tools/wp.sh term list post_tag --fields=name,count --format=csv \
| awk -F, 'NR>1 && $NF<=1'
| 태그 상태 | 개수 |
|---|---|
| 글 2편 이상 걸린 태그 | 9 |
| 글 1편만 걸린 태그 | 45 |
54개 중 45개, 그러니까 83%가 1회용 태그였습니다. 각각이 100~300자짜리 페이지를 하나씩 만들고 있었습니다. 제가 만든 건 분류 체계가 아니라 빈 페이지 45장이었습니다.
noindex를 걸어놨는데 왜 안 통했을까
여기가 이 글에서 제일 값비싼 교훈입니다.
저는 Yoast SEO에서 작성자 아카이브와 검색 페이지에 이미 noindex를 걸어놨습니다. “검색엔진에 안 나오니까 없는 페이지나 마찬가지”라고 생각했습니다.
아닙니다.
noindex는 검색 결과에 표시하지 말라는 요청입니다. 크롤링을 막는 것도, 페이지를 없애는 것도 아닙니다. 애드센스 심사는 검색 색인 여부와 별개로 200으로 응답하는 페이지를 사이트의 일부로 봅니다.
| 조치 | 구글 검색에 노출 | 애드센스 심사 대상 |
|---|---|---|
noindex |
안 됨 | 여전히 됨 |
robots.txt 차단 |
안 됨 | 크롤링은 막히나 링크는 남음 |
| 페이지 삭제(404) | 안 됨 | 안 됨 |
즉 얇은 페이지에 대한 유일한 확실한 답은 감추기가 아니라 없애기입니다.
실제로 한 정리 4가지
① 1편짜리 태그 45개 삭제
가장 큰 덩어리부터 걷어냈습니다. 삭제 전에 DB부터 백업했습니다.
./tools/backup.sh
./tools/wp.sh term list post_tag --fields=term_id,name,count --format=csv \
| awk -F, 'NR>1 && $NF<=1 {print $1}' \
| xargs -n1 ./tools/wp.sh term delete post_tag
54개 → 9개. 남긴 9개는 전부 글이 2편 이상 걸린 태그라 아카이브에 목록다운 목록이 뜹니다.
앞으로의 규칙도 정했습니다 — 태그는 2편 이상 확보될 때만 만든다. 글 하나만 있는 주제는 태그를 달지 않습니다.
② 검색 페이지에 서버 렌더 목록 붙이기
/find/는 정적 내보내기 사이트라 Pagefind로 검색을 붙인 페이지입니다. 자바스크립트가 결과를 그리는 구조라 크롤러 눈에는 본문 2자짜리 빈 페이지였습니다.
템플릿(page-find.php)에 검색창 아래 전체 글 목록을 서버에서 미리 그려 넣었습니다.
$q = new WP_Query(['posts_per_page' => -1, 'orderby' => 'date']);
// 카테고리별로 묶어 제목·날짜·읽는 시간 출력
2자 → 1,129자. 글을 발행하면 자동으로 길어집니다. 사람에게도 이쪽이 낫습니다. 검색어를 안 쳐도 전체 목록이 보이니까요.
③ 빈 광고 슬롯 출력 자체를 막기
승인되면 바로 켤 수 있게 광고 자리를 미리 잡아뒀습니다(레이아웃이 밀리지 않게 자리는 미리 잡는 게 맞습니다). 그런데 display: none으로 감춰놨더니 HTML에는 이런 게 남아 있었습니다.
<div class="ad-slot"><span class="ad-label">광고</span><div class="slot"></div></div>
내용 없는 영역이 페이지마다 박혀 있는 셈입니다. CSS로 감추는 대신 출력 자체를 막도록 바꿨습니다.
define('AMK_ADS_ON', false);
function amk_ad($slot) {
if (!AMK_ADS_ON) return; // 승인 전엔 아무것도 내보내지 않음
// …
}
승인되면 상수 하나만 true로 바꾸면 됩니다.
④ 작성자 아카이브 내보내기에서 제외
1인 블로그에서 작성자 아카이브는 존재 이유가 없습니다. 59자짜리가 3개 있었습니다. Simply Static의 urls_to_exclude에 /author/를 넣어 내보내기 단계에서 아예 빼고, _redirects로 홈에 301을 걸었습니다.
결과
같은 스크립트를 다시 돌렸습니다.
| 측정 | 정리 전 | 정리 후 |
|---|---|---|
| 전체 페이지 | 82 | 34 |
| 태그 | 54 | 9 |
| 800자 미만 페이지 | 56개 (68%) | 7개 (21%) |
/find/ 본문 |
2자 | 1,129자 |
| 빈 광고 슬롯 | 전 페이지 | 0 |
글은 한 편도 안 늘었는데 사이트 크기가 절반 이하로 줄었습니다. 그리고 그게 개선입니다. 애드센스가 보는 건 페이지 수가 아니라 평균 밀도니까요.
그런데 재검토는 아직 안 눌렀습니다
구조는 고쳤지만 버튼은 안 눌렀습니다. 이유는 정직하게 하나입니다 — 글이 부족합니다.
| 항목 | 현재 |
|---|---|
| 발행 글 | 17편 |
| 운영 기간 | 3주 |
| 일 방문자 | 3~5명 |
애드센스는 같은 사유로 재거절되면 다음 심사 주기가 크게 늘어납니다. 구조만 고치고 바로 다시 신청하면 이번엔 진짜로 “규모가 작다”는 이유로 걸릴 가능성이 큽니다. 그래서 25편을 넘긴 뒤에 누르기로 했습니다. 그때까지 할 일은 글쓰기 하나입니다.
정리
- “가치 없는 콘텐츠”는 글 품질 얘기가 아닐 수 있다 — 자동 생성 아카이브부터 세어볼 것
- 사이트 전체 페이지의 본문 글자 수를 실제로 재보라 — 감이 아니라 숫자로
noindex는 애드센스를 막지 못한다 — 얇은 페이지는 감추지 말고 삭제- 1편짜리 태그는 만들지 말 것 — 태그는 2편 이상 확보됐을 때
- JS로 그리는 페이지는 크롤러에겐 빈 페이지 — 서버 렌더 대체물을 넣을 것
- 승인 전 광고 자리는 CSS로 감추지 말고 출력을 막을 것
- 구조를 고쳤어도 글 수가 모자라면 재검토를 미루는 게 낫다
워드프레스로 블로그를 만들기 시작했을 때 신경 쓴 건 글과 디자인이었습니다. 정작 발목을 잡은 건 제가 만든 줄도 몰랐던 빈 페이지 56개였습니다.