AdSenseSEONext.jsnoindex블로그 운영

애드센스 4번째 거절 — "가치가 별로 없는 콘텐츠"를 심사자 관점에서 직접 진단해봤다

July 19, 20265 min read🌐 Only Korean available

4번째 거절 메일이 왔다

이 블로그, 구글 애드센스에서 4번째 거절을 당했다.

사유는 매번 같았다 — "가치가 별로 없는 콘텐츠(Low value content)".

솔직히 억울했다. 글이 130편이 넘고, 전부 내가 직접 겪은 개발 경험을 쓴 글인데? 스크랩한 것도 아니고, 어디서 베낀 것도 아닌데 가치가 없다니.

그런데 4번째 거절을 받고 나서 생각을 바꿨다. 억울해하는 대신, 내가 애드센스 심사자라면 이 사이트를 어떻게 볼까? 관점으로 블로그를 처음부터 다시 뜯어보기로 했다.

결론부터 말하면 — 심사자 입장에서 보니 거절할 만했다. 이 글은 그 진단 과정과 개선 작업 전체 기록이다.

Step 1. 거절 사유가 링크한 정책 문서를 실제로 읽기

거절 화면에는 참고 링크가 4개 붙어 있다. 보통 여기서 "네네 알겠어요" 하고 넘어가는데, 이번엔 전부 따라가서 읽었다. 그러다 Google 스팸 정책의 "확장된 콘텐츠 남용(scaled content abuse)" 조항에서 이 문장을 만났다.

"피드, 검색 결과 또는 기타 콘텐츠를 스크래핑하여 사용자에게 가치가 거의 없는 다수의 페이지 생성 — 동의어 분석, 번역 또는 기타 난독화 기술과 같은 자동화된 변환 사용 포함"

읽는 순간 뜨끔했다. 이 블로그는 한국어로 글을 쓰면 DeepL API가 영어판을 자동 생성하는 구조다. 사람 검수 없이. 그게 130페이지였다.

Step 2. 심사자 눈으로 사이트 실태 파악

정책을 읽고 나서, 숫자로 사이트를 점검했다.

문제 1 — 사이트의 절반이 기계 번역

항목수치
전체 포스트 페이지262개
한국어(직접 작성)132개
영어(자동 번역, 무검수)130개

전체 페이지의 약 50%가 자동 생성 콘텐츠였다. 나는 "글 132편 블로그"라고 생각했지만, 구글 눈에는 "절반이 기계 번역인 사이트"였던 거다.

더 뼈아픈 건 미들웨어 설정이었다. 브라우저 언어가 한국어가 아니면 /en으로 자동 리다이렉트하게 해놨는데 — 미국에서 영어 환경으로 접속하는 심사 시스템은 첫 화면부터 끝까지 기계 번역판만 보게 된다. 가장 약한 콘텐츠를 대문에 걸어놓은 셈이었다.

문제 2 — 빈약한 글들

frontmatter를 제외한 본문 글자 수를 전수 조사했다.

for f in *.ko.md; do
  chars=$(awk 'BEGIN{fm=0} /^---$/{fm++; next} fm>=2{print}' "$f" | wc -m)
  echo "$chars $f"
done | sort -n
지표
중앙값약 4,000자
평균약 4,200자
1,500자 미만21편
최소435자

중앙값은 나쁘지 않은데, 꼬리가 문제였다. "무료 크레딧 준대요" 같은 400자짜리 글, 같은 사건을 3번에 나눠 쓴 700자짜리 글들. 심사자가 "글 목록에서 아무거나 클릭했을 때" 이런 글이 걸릴 확률이 낮지 않았다.

Step 3. 개선 작업

3-1. 자동 번역 영어판 130페이지 → noindex + sitemap 제외

영어판을 지우진 않았다. 사이트 방문자는 지금도 EN 버튼으로 영어판을 볼 수 있다. 대신 구글에게 평가받는 대상에서 뺐다.

Next.js App Router 기준으로 세 군데를 고치면 된다.

① 페이지 메타데이터에 noindex (generateMetadata):

// 영어 페이지는 자동 번역(검수 없음)이라 색인 제외
...(locale !== "ko" && { robots: { index: false, follow: true } }),

② sitemap에서 영어 URL 제거 (app/sitemap.ts):

// 사이트맵에는 색인 대상인 한국어 페이지만 노출
const koPosts = await getAllPosts("ko");
const postEntries = koPosts
  .filter((p) => !p.isFallback && !p.noindex)
  .map((post) => ({ url: `${BASE_URL}/ko/posts/${post.slug}`, ... }));

③ hreflang 제거: 한국어 페이지의 alternates.languages에서 en 링크를 삭제했다. ko 페이지가 "내 영어판은 여기 있어요"라고 광고하던 태그다.

구글 스스로도 이런 콘텐츠에 대한 권장 대응을 "검색에서 제외하세요"라고 안내한다. noindex가 바로 그 공식 방법이다.

3-2. 빈약한 글 21편 — 삭제 대신 분류 처리

1,500자 미만 21편을 하나씩 읽고 세 갈래로 나눴다.

분류편수기준처리
noindex4편프로모션·지난 이벤트·개발 무관 잡담글은 유지, 색인만 제외
병합9편 → 3편같은 사건/주제를 여러 편에 쪼개 씀시간순으로 합쳐 새 글 작성
보강9편실용 정보가 있는데 너무 짧음표·명령어·맥락 추가해 확장

noindex는 frontmatter로 처리했다. 글 파일에 한 줄 추가하고:

---
title: '...'
noindex: true
---

메타데이터 생성에서 읽게 했다:

const noindex = post.isFallback || locale !== "ko" || post.noindex;

삭제하지 않은 이유: 초기 기록(첫 글, 에세이)은 블로그의 정체성이라 남기고 싶었다. noindex면 사이트에서는 그대로 보이면서 심사·검색 신호에서만 빠진다.

병합의 예: AI 모델 하나가 막혔다가 → 마지막 날까지 쓰다가 → 연장된 사건을 3편(각 700~1,100자)에 나눠 썼던 걸, 시간순 3부 구성의 한 편으로 합쳤다. 합치니 오히려 서사가 생겨서 글이 좋아졌다.

보강의 예: "Supabase Free는 프로젝트 2개까지더라 ㅎㅎ" 468자짜리 글에 — 무료 플랜 한도 표, 실제로 먼저 걸리는 제약(프로젝트 수·자동 일시정지), 무료로 버티는 운영 요령을 붙여 실용 글로 만들었다.

3-3. 병합으로 사라진 URL은 308 리다이렉트

병합 원본 8개의 URL이 404가 되면 그것대로 품질 신호가 나빠진다. next.config.ts에 리다이렉트를 추가했다.

async redirects() {
  return [
    {
      source: "/:locale(ko|en)/posts/myLastDayUsingFable5_20260711",
      destination: "/:locale/posts/fable5_rollercoaster_20260715",
      permanent: true, // 308
    },
    // ... 옛 슬러그 전부
  ];
}

Step 4. 검증 — 실제 렌더링으로 확인

빌드 후 프로덕션 서버를 띄워서 curl로 전부 확인했다.

# 영어 페이지에 noindex가 실제로 박혔는지
curl -s localhost:3000/en | grep -o '<meta name="robots"[^>]*>'
# → <meta name="robots" content="noindex, follow"/>

# 한국어 일반 글에는 없어야 정상
curl -s localhost:3000/ko/posts/일반글 | grep robots
# → (없음) ✅

# sitemap에 en URL이 0개인지
curl -s localhost:3000/sitemap.xml | grep -c "/en/"   # → 0

# 옛 슬러그가 새 글로 넘어가는지
curl -s -o /dev/null -w "%{http_code} -> %{redirect_url}\n" \
  localhost:3000/ko/posts/myLastDayUsingFable5_20260711
# → 308 -> .../fable5_rollercoaster_20260715

메타태그는 "코드를 고쳤다"와 "실제로 나간다"가 다를 수 있어서, 이 확인 과정을 건너뛰면 안 된다.

정리 — 이번에 배운 것

  1. "가치가 별로 없는 콘텐츠"는 글 개수 문제가 아니다. 132편을 쓰고도 거절당했다. 심사는 사이트 단위이고, 자동 생성 페이지가 절반이면 나머지 절반의 품질로는 못 덮는다.
  2. 거절 사유가 링크한 정책 문서를 원문으로 읽자. "자동화된 변환(번역 포함)"이라는 문구를 읽기 전까지, 나는 영어판이 문제라고 생각조차 못 했다.
  3. 자동 번역 다국어 블로그는 애드센스에서 양날의 검이다. 번역 자체가 금지는 아니지만, 무검수 + 대량이면 정책 문구에 정확히 걸린다. 검수 못 할 거면 noindex가 정직한 선택이다.
  4. 짧은 글은 삭제·병합·보강·noindex 중 골라서 처리하면 된다. 전부 지울 필요 없다. 기록으로 남기고 싶은 글은 noindex라는 중간 지대가 있다.
  5. 재심사는 서두르지 말 것. 수정 직후 바로 검토 요청을 누르면 구글이 재크롤링하기 전 상태로 심사받을 수 있다. 1~2주 기다렸다가 요청하는 게 안전하다.

아직 재심사 결과는 안 나왔다. 통과하면 후속 글로 남기고, 또 떨어지면... 그것도 기록으로 남기겠다. 이 블로그는 원래 그런 곳이니까.

PM

backtodev

A 40-something PM returns to code. Learning, failing, and growing.