sgkstudio.
엔지니어링

SEO 콘텐츠 88편의 노출이 안 붙은 원인

SEO 콘텐츠 노출을 늘리려고 발행량을 키우는 동안, 판매 서비스로 이어지는 글의 편당 노출은 2.6에서 0.9로 오히려 떨어졌습니다. 처음 지목한 원인은 같은 키워드에 열여섯 편이 쌓인 콘텐츠 중복이었지만, 155개 키워드의 검색량과 광고 입찰가를 다시 대조하고서야 그건 2차 요인이었다는 것이 드러났습니다. 진짜 원인과, 그 과정에서 함께 발견한 두 번의 죽은 계측을 그대로 적습니다.

2026-09-01서비스 직결 글 88편·검색량 155키워드 대조가설 재판정 1회·죽은 계측 2건 복구PR 3건(#359·#387·#405)

발행량을 늘렸는데 편당 노출은 왜 거꾸로 떨어졌나

SEO 콘텐츠 축에서 발행량을 늘릴수록 판매 서비스로 이어지는 글의 편당 노출은 오히려 줄었습니다. 8월 21일에 관측한 편당 노출 2.6이 8월 25일 재측정에서 0.9로 떨어졌습니다.

8월 16일에 발행량 확대 지시가 있었고, 파이프라인은 그대로 돌아 일평균 3.5편·최대 9편을 찍고 있었습니다. 그런데 8월 21일과 8월 18일 두 차례 점검이 각각 서비스 직결 글이 노출을 못 만든다고 보고했고, 8월 25일 진단에서 그 격차가 더 벌어진 것이 확인됐습니다.

트랙별 편당 노출 실측 (28일)
트랙편수노출확보율28일 노출합편당 노출
tax12100%23919.9
region2186%2009.5
nomu6100%508.3
서비스 직결8839%810.9

발행이 늘어나는 동안 서비스 직결 글의 편당 효율은 2.6에서 0.9로 더 떨어졌습니다. '더 쓰면 언젠가 걸린다'는 가설이 3주에 걸쳐 반증된 셈입니다. 이 표 하나로 다음 질문이 갈렸습니다. 88편이 안 뜨는 이유가 콘텐츠 자체에 있는가, 아니면 다른 층에 있는가.

트랙별 편당 노출 막대그래프. tax 19.9, region 9.5, nomu 8.3인데 서비스 직결 글만 0.9로 유독 낮다
88편을 쓴 트랙이 가장 안 떴다

처음 의심한 것: 같은 키워드에 열여섯 편이 쌓인 중복

8월 25일 진단에서 원인을 셋으로 나눠 정량화했습니다. 그중 가장 먼저, 그리고 가장 강하게 의심한 것은 콘텐츠 중복(카니발라이제이션)이었습니다.

  • 서비스 직결 글 88편 중 `홈페이지제작업체` 헤드가 16편, `블로그원고대행` 헤드가 6편입니다.
  • 헤드 중복이 31/88편(35%)에 달합니다.
  • 88편 전부 대시(: ) 포함, `(2026)` 종결 100%, `~하는 법` 형식 39%, 하루 최대 9편입니다.
  • 제목 틀이 제각각인 tax·region 트랙만 편당 노출이 10~20배입니다.

같은 키워드에 16편이 붙으면 구글이 정본을 못 정한다고 첫 번째로 가정했고, 대량생산 서명(대시·연도 종결·정형화된 제목)은 구글 2024-03 spam policy가 겨냥하는 scaled content abuse 형태와 겹칩니다. 여기에 세 번째로 '다리 부재'를 더했습니다. 오가닉 착지 상위 15에 서비스 직결 글이 0편이고, `content_to_offer` 이벤트가 28일 0건, `scroll_100`이 96건인데 `click`은 5건, 페이지/세션은 1.1이었습니다.

결론을 내리기 전에 대안 넷을 검토했습니다.

  • 현행 유지 + 새 축(업무 질의) 잠복기 대기 → 기각. 새 축은 아직 판정 불가지만, 그것과 별개로 88편의 중복은 이미 확정된 손실이고 대기해도 안 풀립니다.
  • 발행량 축소 후 편당 깊이 강화 → 부분 채택. 다만 '깊이'는 이미 충분했습니다. 본문 중앙값 1,256자, 표 포함 131/136편, 방법론은 전편에 있었습니다. 부족한 건 깊이가 아니라 배치였습니다.
  • 타깃 키워드 밴드 하향(월검색 100~300) → 보류. 밴드를 낮춰도 같은 헤드에 16편을 쌓는 구조가 그대로면 같은 결과가 납니다. 중복 가드가 먼저입니다.
  • 신규 발행 중단 + 기존 136편 재편 → 채택.

이 세 가지로 8월 25일 1차 결론을 냈습니다. 신규 발행을 중단하고 기존 136편을 재편한다, 다리 놓기(W1)를 먼저 하고 중복 16편 통합(W2)은 이월한다는 결정이었습니다.

무엇으로 확인했나: 키워드 155개와 검색량을 직접 대조하다

결론을 낸 그날 저녁, 반대가설이 나왔습니다. '주력 서비스 키워드 자체에 검색량이 없는 것 아닌가?' 콘텐츠 중복 가설로는 설명이 안 되는 질문이었습니다. 16편이 겹쳐서 못 뜬 것이라면, 겹치지 않은 나머지 편들은 떠야 합니다.

판별 테스트로 확인했습니다. 광고 키워드 데이터베이스(8월 24일 갱신, 155키워드)에 서비스 직결 글 88편이 쓰인 자리의 실측 월검색량을 전부 대조했습니다.

서비스 직결 글 88편이 쓰인 자리의 월검색량 구간별 편수. 1,000회 이상 45편, 300~999회 8편, 100~299회 1편, 99회 이하 14편, 미매칭 21편
88편 중 45편은 이미 검색량 1,000회 이상 자리에 있었다

60%(53편)는 이미 수요가 있는 자리에 썼습니다. 검색량이 없어서 안 뜬 것이라는 가설은 나머지 40%에 대해서만 맞았습니다.

콘텐츠 중복은 왜 1차 원인이 아니었나

콘텐츠 중복이 1차 원인이라면 검색량이 충분하고 겹치지도 않은 자리는 떴어야 합니다. 그런데 그렇지 않았습니다. 판별 테스트 결과 콘텐츠 중복과 대량생산 서명은 실재하지만 2차 요인이었고, 1차 원인은 따로 있었습니다.

더 아픈 쪽은 나머지 60%였습니다. `홈페이지제작업체` 자리는 월검색 2,840회인데 여기에만 28편을 쏟았고 편당 노출은 0.9였습니다. 검색량이 없어서가 아니라, 검색량이 있는데도 안 뜬 것입니다.

진짜 원인: 콘텐츠로도 못 이기고 광고로도 못 사는 자리였다

이유는 광고 데이터에 있었습니다. 같은 키워드의 시장 입찰가와 저희 단가 천장을 대조하자 격차가 드러났습니다.

시장 입찰가 대 우리 단가 천장
키워드시장 입찰가우리 단가 천장배율
홈페이지제작업체19,486원2,095원9.3배
AI챗봇20,172원4,800원4.2배
AI자동화10,104원5,625원1.8배

세 자리 전부 `route_reason: hard-kill: economic_fail`로 분류돼 있었습니다. 입찰가 격차가 큰 자리일수록 오가닉 1페이지도 같은 사업자들이 점유하고 있다는 신호입니다. 광고로도 못 사고, 콘텐츠로도 못 이기는 자리였습니다.

시장 입찰가가 우리 단가 천장의 몇 배인지 보여주는 막대그래프. 홈페이지제작업체 9.3배, AI챗봇 4.2배, AI자동화 1.8배
배율이 클수록 오가닉도 같은 사업자가 점유하고 있었다

서비스 단위로 월검색 합을 다시 보면 격차가 더 뚜렷합니다.

  • 세무도구 274,540회, 노무도구 78,260회
  • AI자동화 10,730회(중앙값 20)
  • 홈페이지제작 9,060회
  • AI챗봇 4,360회(중앙값 20)
  • 블로그대행 120회
ax가 노린 건 상업형 질의, 구축이 잡은 건 정보형 질의

노출을 만든 tax·nomu 트랙이 서비스 직결 글의 25~60배이고 질의도 정보형입니다. 다른 경로로 같은 결론에 도착한 셈입니다.

고친 것 1: 사람이 오는 곳과 서비스가 있는 곳을 다리로 잇다

원인이 재판정되면서 재편 계획도 바뀌었습니다. '중복 정리'에서 '자리 재판정'으로. 밴드 분류가 통합보다 먼저이고, 검색량 300 미만·미매칭 35편은 손대지 않기로 했습니다. `홈페이지제작업체` 28편만 통합하되, 28일 후에도 노출이 10 미달이면 '상업형은 콘텐츠로 안 된다'로 확정하기로 했습니다.

그런데 원인과 별개로 남아 있던 수치가 있었습니다. `content_to_offer` 이벤트가 28일째 0건이었습니다. 예전에 같은 형태의 0을 '미집행'으로 오판한 전례가 있어서, 이번에는 계기가 실제로 발화하는지부터 갈랐습니다.

analytics.google.com/g/collect?...&en=content_to_offer_click&ep.event_label=nomu→AI자동화:primary → 204

계기는 끝까지 살아 있었습니다. 그러니 0은 '아무도 안 눌렀다'가 맞았고, 원인은 노출 면적이었습니다. 서비스 링크가 글 하나에 2개뿐이고 둘 다 같은 카드에 있었으며, 그 카드는 문서 높이의 55.3%(2,176px/3,936px). 뷰포트 661px 기준 세 화면 아래였습니다.

다리가 없으면 서비스를 새로 만들어도 같은 결과가 난다는 것도 이번에 함께 확인됐습니다. 세무·노무 유입 의도에 맞는 서비스는 이미 계산기(무료) → 유료 서면 → 전문가 매칭까지 3층 구조로 설계돼 있었지만, 정작 다리가 없어서 그 설계까지 함께 0건으로 막혀 있었습니다.

  • CTA 카피를 다시 쓴다 → 기각. 안 보이는 문구를 고쳐도 안 보입니다.
  • 상위 10편에 손으로 다리를 붙인다 → 기각. 137편이고 매주 늘어나서 편별 작업은 끝나지 않습니다.
  • 컴포넌트 하나로 전편에 본문 중간 다리를 놓는다 → 채택.

대가도 있었습니다. 본문 흐름에 서비스 카드 한 칸이 끼어듭니다. 그래서 문구를 서비스별 4종으로 고정해 글마다 달라지지 않게 하고, 배경·테두리를 기존 콘텐츠 블록과 같은 토큰으로 맞춰 이물감을 줄였습니다.

본문 중간 다리 컴포넌트를 2번째 섹션 뒤에 넣자 첫 서비스 링크 깊이가 56.7%에서 28.2%로 줄었습니다. 슬롯을 inline·primary·secondary로 나눠 어느 자리가 눌리는지 GA4에서 분리했습니다. 이게 없으면 다리를 더 놓아도 효과를 판정할 수 없습니다. 같은 137편에 공유 썸네일도 자동 생성했습니다(PR #387). 측정 장치 자체를 먼저 믿을 수 있어야 다음 판단이 서는 문제는 Claude Code 자율 실행 길이 계측 글에서 다룬 것과 같은 결입니다.

본문 중간 다리 적용 전후 첫 서비스 링크 깊이 비교. 적용 전 56.7%에서 적용 후 28.2%로 줄었다
첫 서비스 링크가 절반 깊이로 당겨졌다

0건은 계측 부재였나 진짜 0이었나: 세 번 갈라 봐야 했다

이 축에서 '0건'이 나온 건 이번이 처음이 아니었습니다. 8월 19일에 이미 한 번 걸렸고, 8월 25일 재검증에서 한 번 더 걸렸습니다. 매번 같은 질문을 다시 던져야 했습니다. 계기가 안 도는가, 계기는 도는데 안 눌리는가, 눌리는데 안 쌓이는가.

첫 번째(8월 19일): 리포트 페이지의 클릭 발화 함수가 `data-ga-category`·`data-ga-label`을 발화하고 있었는데, 이 둘은 GA4에 커스텀 디멘션으로 등록된 적이 없었습니다. `data-ga-action`도 범용 `click`이라 '리포트→서비스 클릭'만 골라 조회할 방법이 없었습니다. 28일 누적 95건이 전부 미분류로 잠겨 있었고, 조회가 안 되니 0건과 95건 미분류가 구분조차 안 됐습니다. 이벤트명 자체를 `content_to_offer_click`으로 전용화해 해소했습니다(PR #359, 11개 테스트 통과).

두 번째(8월 25일): 이벤트명을 전용화한 뒤에도 0건이었습니다. 위에서 본 대로 라이브 네트워크 확인 결과 계기는 살아 있었고, 원인은 노출 면적이었습니다.

세 번째(8월 25일): 노출 면적을 고친 뒤에도 GA4에 `content_to_offer_click`이 안 쌓이는 순간이 있었습니다. 브라우저에서 gtag 호출 자체를 가로채 확인하니, `gtag('event', ...)`는 분명히 호출되는데 전송이 안 나가고 있었습니다. 클릭 직후 서브도메인으로 이동하면서 gtag의 비동기 전송과 경쟁했고, 페이지가 unload되며 전송이 유실되는 구조였습니다. `transport_type: 'beacon'`으로 `sendBeacon`을 강제해 해소했습니다(PR #405).

세 번 다 같은 도구로는 못 잡았습니다. 첫 번째는 GA4 UI에서 디멘션 등록 여부를 확인해야 했고, 두 번째는 라이브 리포트 페이지에서 CTA를 직접 눌러 네트워크 탭을 봐야 했고, 세 번째는 브라우저 안에서 gtag 호출 자체를 가로채는 코드를 심어야 했습니다. '0건'이라는 같은 숫자가 매번 다른 층에서 다른 이유로 나왔습니다.

고친 것 2: 자리를 다시 나누고 발행 가드를 세우다

구조 쪽 수정도 같은 재검증에서 나왔습니다. 발행 파이프라인이 slug를 `-2026`으로 리네임하면서 구버전 URL이 404가 나고 있었는데, GA4 28일 기준 15회 유입이 이 죽은 URL로 도달하고 있었습니다. 슬러그가 없으면 `-2026` 존재를 확인해 308로 리다이렉트하도록 고쳤습니다.

발행 가드도 1종에서 2종으로 늘렸습니다. 중복 상한에 더해 월검색 300 미만 배제를 추가했습니다. `홈페이지제작업체`처럼 검색량이 있는 자리에 중복이 쌓이는 것과, 애초에 검색량이 없는 자리에 새로 발행하는 일은 다른 문제이고, 가드도 따로 걸어야 했습니다.

이 재편 결정에서도 발행 자동화는 끄지 않았습니다. 이번 축은 이미 발행된 것의 배치를 고치는 일로 한정했습니다. tsc·vitest 109개·next build·기존 규약 신규 위반 0건, 리다이렉트 로컬 검증 308/200/404까지 통과한 뒤에 적용했습니다.

같은 실수를 막는 장치: 재판정 전에도 손실 없는 것만 먼저 고친다

이번 진단에서 남긴 장치는 다섯 가지입니다.

  • 이벤트명 전용화(`content_to_offer_click`)로 커스텀 디멘션 등록 없이도 즉시 조회 가능해졌습니다.
  • 본문 중간 다리 슬롯 3분리(inline·primary·secondary)로 어느 자리가 눌리는지 GA4에서 갈립니다.
  • beacon 전송 강제로 페이지 이동과 경쟁하는 클릭 유실을 구조적으로 막았습니다.
  • 발행 가드 2종(중복 상한 + 월검색 300 미만 배제)으로 같은 형태의 콘텐츠 중복 재발을 앞단에서 자릅니다.
  • 구버전 slug 308 리다이렉트로 발행 파이프라인의 리네임이 유입을 죽이지 않게 했습니다.

함께 정리한 것도 있습니다. 서비스 클릭 보고 함수를 전역 함수로 바꿔 폐기된 콘솔 분기를 지웠습니다. 같은 사고가 2026년 7월 27일과 28일에 두 번 있었던 자리였습니다. 새 slug prefix 하나만 생겨도 죽어 있던 코드가 되살아나는 구조였습니다.

발행량을 유지할지 타깃을 바꿀지는 여전히 사업 판단으로 남아 있습니다. 이번에 확정한 것은 그 판단 전에도 손실 없이 할 수 있는 것(배치 수리) 뿐입니다. 재편은 순위 회복에 수주가 걸려 매출로 바로 안 붙지만, 이미 오는 유입을 서비스로 넘기는 일은 지금 당장 있는 숫자(28일 오가닉 117세션)로 시작할 수 있었습니다. 비슷한 형태로 계측과 원인 진단이 겹친 사례를 정리하고 싶다면 상담에서 짚어 드립니다.

같은 방식으로 우리 업무를 재보고 싶다면

이 글에 쓴 계측·판정·자동화는 저희가 실제로 매일 돌리는 방식 그대로입니다. 어떤 작업을 자동화할 수 있고 어디를 사람이 잡아야 하는지, 현재 업무 흐름을 놓고 같이 짚어 드립니다.

새 글이 올라오면 알려 드립니다

이런 계측 기록을 새로 쓰면 메일로 한 통 보냅니다. 광고나 판촉은 보내지 않습니다.