sgkstudio.
엔지니어링

노출 2.6→0.9, 범인은 따로 있었다

SEO 콘텐츠 축에서 발행량을 늘리는 동안 오퍼 트랙(ax)의 편당 노출은 2.6에서 0.9로 더 떨어졌습니다. 처음 지목한 범인은 같은 키워드에 열여섯 편이 쌓인 콘텐츠 중복이었지만, 반대가설로 검색량을 다시 대조하고서야 2차 요인이라는 사실이 드러났습니다. 진짜 원인과, 그 과정에서 함께 발견된 두 번의 죽은 계측을 그대로 적습니다.

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

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

SEO 콘텐츠 축에서 발행량을 늘릴수록 오퍼로 이어지는 트랙의 편당 노출은 오히려 줄었습니다. 08-21에 관측한 편당 노출 2.6이 08-25 재측정에서 0.9로 떨어졌습니다.

08-16에 발행량 확대 지시가 있었고, 파이프라인은 그대로 돌아 일평균 3.5편·최대 9편을 찍고 있었습니다. 그런데 08-21과 08-18 두 세션이 각각 오퍼 직결 트랙(ax)이 노출을 못 만든다고 보고했고, 08-25 진단에서 그 격차가 더 벌어진 것이 확인됐습니다.

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

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

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

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

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

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

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

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

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

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

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

결론을 낸 그날 저녁, 반대가설이 나왔습니다. '메인 오퍼가 검색량이 없는 거 아니야 이 정도면?' 콘텐츠 중복 가설로는 설명이 안 되는 질문이었습니다 — 16편이 겹쳐서 못 뜬 것이라면, 겹치지 않은 나머지 편들은 떠야 합니다.

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

ax 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). 측정 장치 자체를 먼저 믿을 수 있어야 다음 판단이 서는 문제는 에이전트는 왜 한 턴 만에 멈추나에서 다룬 것과 같은 결입니다.

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

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

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

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

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

세 번째(08-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-07-27과 07-28에 두 번 있었던 자리였습니다 — 새 slug prefix 하나만 생겨도 죽어 있던 코드가 되살아나는 구조였습니다.

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

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

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

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

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