GSC 갭 분석: 15개의 쿼리에서 자동화된 발행까지
요약
GSC(Google Search Console) 데이터를 활용하여 유의미한 콘텐츠 갭을 식별하고, 이를 자동화된 발행 파이프라인으로 연결하는 AI 에이전트 구축 과정을 다룹니다. 단순 노출수가 아닌 검색 의도와 관련성을 기준으로 한 정교한 필터링 전략을 제시합니다.
핵심 포인트
- 단순 노출수가 아닌 검색 의도와 관련성이 높은 키워드 선별이 핵심
- 클릭은 없지만 노출이 발생하는 키워드를 콘텐츠 기회로 정의
- GSC API와 Python을 활용한 데이터 추출 및 분석 자동화
- AI 에이전트를 통한 콘텐츠 갭 분석 및 발행 프로세스 구축
원래 AIdeazz에 게시되었습니다 — canonical 링크와 함께 이곳에 교차 게시되었습니다.
저의 첫 번째 AI 콘텐츠 파이프라인(pipeline)은 유의미한 변화를 만들어내는 데 실패했습니다. 저는 Claude 3 Opus API 호출에 120달러를 사용하며 30개의 기사를 생성했습니다. 하지만 타겟 키워드에 대한 저의 Google Search Console (GSC) 노출수(impressions)는 거의 움직이지 않았습니다. 제가 채우고 있다고 생각했던 "콘텐츠 갭 (content gap)"은 환상이었습니다. 저에게는 각각 2~3회의 노출수만 있고 클릭은 전혀 없는 15개의 GSC 쿼리(queries)가 있었습니다. 저의 초기 가정은 이 주제들에 대해 쓰면 순위가 올라갈 것이라는 것이었습니다. 이는 부트스트랩(bootstrapped) 운영에서 콘텐츠 갭이 진정으로 무엇을 의미하는지에 대한 근본적인 오해였습니다.
"콘텐츠 갭"의 환상
"콘텐츠 갭 (content gap)"은 단순히 순위가 매겨지지 않은 키워드를 의미하는 것이 아닙니다. 새로운 사이트의 경우, 이는 최소한의 수준이지만 기존에 GSC 노출수가 존재하면서도 클릭은 발생하지 않는 키워드를 의미합니다. 더 결정적으로, 이는 검색 의도(intent)가 명확하고 경쟁(competition)이 관리 가능한 수준인 키워드입니다. 저의 15개 쿼리는 롱테일(long-tail)이며, 검색량이 적고, 종종 저의 핵심 서비스와 무관했습니다. 예를 들어, "oracle cloud free tier limitations"는 2회의 노출수가 있었습니다. 기술적으로는 "갭"일지 모르지만, 이에 대해 2,000단어짜리 기사를 쓰는 것은 AI 에이전트 개발을 위한 고객을 데려다주지 않을 것입니다. 대신 무료 서비스를 찾는 사람들을 데려올 뿐입니다.
AIdeazz를 위한 저의 수정된 GSC 콘텐츠 갭 정의는 다음과 같습니다:
- 기존 노출수 (10회 이상): 지난 90일 동안 최소 10회의 노출수가 있어야 하며, 이는 Google이 이미 내 사이트를 해당 쿼리와 연관시키고 있음을 나타냅니다.
- 클릭 제로 (Zero Clicks): 클릭이 없어야 하며, 이는 현재의 콘텐츠가 검색 의도(search intent)를 충족시키지 못하고 있음을 의미합니다.
- 높은 관련성 (High Relevance): 쿼리가 저의 AI 에이전트 개발, 멀티 에이전트 시스템(multi-agent systems), 또는 Oracle Cloud 인프라 전문 지식과 직접적으로 관련되어야 합니다.
- 낮은 경쟁 (SERP 분석): 상위 5개 결과에 대한 빠른 수동 점검을 통해 포럼, 오래된 기사, 또는 일반적인 블로그가 나타나야 하며, 고도로 최적화된 콘텐츠를 가진 직접적인 경쟁자가 나타나서는 안 됩니다.
이 정제된 정의를 통해 저의 "갭(gap)" 리스트는 15개에서 2개로 즉시 줄어들었습니다. 하나는 "oracle cloud always free instance stopped"였고, 다른 하나는 "multi-agent system architecture"였습니다. 이들은 실행 가능한(actionable) 항목들이었습니다.
자동화된 GSC 갭 분석 에이전트 구축
이 필터링 과정을 자동화할 에이전트가 필요했습니다. Ampere A1 인스턴스에서 실행 중인 저의 기존 Oracle Cloud Infrastructure (OCI) 테넌시(tenancy)에는 이미 저의 핵심 AI 에이전트들이 호스팅되고 있었습니다. 저는 새로운 Python 환경을 구축했습니다.
에이전트의 흐름:
-
GSC 데이터 가져오기 (GSC Data Fetch):
google-api-python-client라이브러리를 사용하여 GSC API에 연결합니다.aideazz.xyz속성(property)으로 필터링된 지난 90일간의 쿼리(query) 데이터를 가져옵니다.# 단순화된 GSC API 호출 service = build('searchconsole', 'v1', credentials=creds) request = {
...
```
-
필터링 로직 (Filtering Logic):
queries를 반복(iterate)하며 정제된 기준을 적용합니다.actionable_gaps = [] for row in queries: query = row['keys'][0]
...
```
`is_relevant` 함수는 "AI agent", "Oracle Cloud", "multi-agent" 등과 같이 미리 정의된 키워드 목록에 대해 간단한 정규 표현식(regex) 매칭을 수행합니다. 더 정교한 처리를 위해, 관련성을 분류하는 소규모 로컬 LLM(예: Ollama를 통한 Llama 3 8B)을 임베딩할 수도 있겠지만, 현재로서는 키워드 매칭만으로도 충분하며 비용도 더 저렴합니다.
3. SERP 분석 (현재는 수동이지만, 자동화 계획 중): 각 actionable_gap에 대해 수동으로 빠른 Google 검색을 수행합니다. 경쟁력이 약한 곳을 찾습니다. 이 단계는 매우 중요하며 현재 병목 현상(bottleneck)이 발생하는 지점입니다. 이를 자동화하려면 SERP 결과를 스크래핑하고, 제목/설명을 추출하며, LLM을 사용하여 콘텐츠 품질과 경쟁사 강도를 평가해야 합니다. 저는 BeautifulSoup와 로컬 Llama 3 인스턴스를 사용하여 이를 프로토타이핑하고 있지만, 속도 제한(rate limits)과 CAPTCHA 문제로 인해 아직 프로덕션 단계(production-ready)는 아닙니다.
이 에이전트의 출력물은 매우 타겟팅된 1~3개의 키워리 리스트입니다.
Claude 3 Haiku를 이용한 초안 작성 (속도를 위해 Groq 사용)
타겟 키워드를 확보하면, 파이프라인의 다음 에이전트인 초안 작성 에이전트(drafting agent)가 업무를 이어받습니다. 초기에는 Claude 3 Opus를 사용했는데, 성능은 매우 뛰어났지만 비용이 비쌌습니다 ($15/M tokens). 블로그 포스트의 경우, 상세한 프롬프트(prompt)와 결합했을 때 Claude 3 Haiku ($0.25/M tokens)만으로도 충분히 적절하다는 것을 확인했습니다.
Haiku를 위한 저의 프롬프트 템플릿은 다음과 같습니다:
당신은 AI 에이전트 개발 및 Oracle Cloud Infrastructure를 전문으로 하는 숙련된 기술 작가(technical writer)입니다.
기술 창업자와 개발자를 위해 상세하고 실용적인 블로그 포스트를 작성하세요.
주제는 다음과 같습니다: "[ACTIONABLE_KEYWORD]"
...
저는 이 프롬프트를 커스텀 에이전트 라우터(agent router)를 통해 전달합니다. 이 라우터는 비용, 속도 및 복잡성 요구 사항에 따라 LLM을 동적으로 선택합니다. 초기 초안을 작성할 때는 종종 Groq의 Llama 3 8B를 사용하여 빠른 개요(outline)를 잡은 다음, 그 개요를 Claude 3 Haiku에 전달하여 전체 초안을 완성합니다. 이러한 하이브리드(hybrid) 접근 방식은 상당한 비용과 시간을 절약해 줍니다. Groq의 Llama 3 8B는 믿을 수 없을 정도로 빠르고(500+ tokens/sec) 저렴하여, 빠른 프로토타이핑(prototyping)과 개요 작성에 이상적입니다.
초안 작성 에이전트는 전체 Markdown 콘텐츠를 출력합니다.
Dev.to 및 aideazz.xyz로의 자동 발행
마지막 단계는 발행입니다. 저는 두 가지 주요 콘텐츠 목적지를 유지하고 있습니다:
- Dev.to: 더 넓은 개발자 도달 범위와 커뮤니티 참여를 위함.
- aideazz.xyz: 제가 콘텐츠와 SEO를 직접 제어하는 정식 출처(canonical source).
Dev.to 발행 에이전트
Dev.to는 문서화가 잘 된 API를 제공합니다. 제 에이전트는 requests 라이브러리를 사용하여 Markdown 콘텐츠를 게시합니다.
import requests
import json
...
여기서 canonical_url이 매우 중요합니다. 이는 검색 엔진에 aideazz.xyz가 원본 소스임을 알려주어 중복 콘텐츠 페널티를 방지합니다. 또한, 기사 내용에 따라 관련 태그를 자동으로 추가하는데, 이 분류 작업 역시 소형 LLM(Llama 3 8B)을 사용하여 수행합니다.
aideazz.xyz 캐싱 및 표시
제 메인 사이트인 aideazz.xyz는 커스텀 Python 스크립트로 생성된 정적 사이트(static site)입니다. 새로운 기사가 초안으로 작성되고 승인되면 (현재는 최종 발행 전 제가 수동으로 검토합니다), 발행 에이전트(publishing agent)가 다음 작업을 수행합니다:
- 고유한 슬러그(slug) 생성: 기사 제목으로부터 생성합니다.
- Markdown 파일 생성: 저의
_posts디렉토리에 생성합니다. - 사이트 생성기(site generator) 업데이트: 정적 사이트의 재빌드(rebuild)를 트리거합니다.
- Cloudflare 캐시 무효화(Invalidate): 새로운 콘텐츠가 즉시 표시되도록 보장합니다.
이 프로세스를 통해 aideazz.xyz는 항상 최신 콘텐츠를 유지하며, Cloudflare의 CDN에서 직접 서비스되므로 빠르고 탄력적(resilient)입니다. GSC 분석부터 발행까지의 전체 프로세스는 저의 OCI Ampere 인스턴스에서 약 15분의 연산 시간(compute time)이 소요되며, 비용은 몇 푼 되지 않습니다. 가장 큰 비용은 LLM API 호출 비용인데, Haiku와 Groq를 사용하여 기사당 $0.50~$1.00 수준으로 최적화했습니다.
진정한 "갭(gap)"은 단순히 누락된 콘텐츠가 아닙니다. 그것은 비즈니스에 중요한 콘텐츠, 즉 이미 미미한 흔적(footprint)을 가지고 있으면서 현실적으로 경쟁에서 이길 수 있는 콘텐츠를 의미합니다. 저의 자동화된 파이프라인은 이제 이 좁고 레버리지가 높은(high-leverage) 타겟에 집중하고 있습니다.
자주 묻는 질문 (Frequently Asked Questions)
Q: 대형 LLM 없이 GSC 쿼리에 대한 "is_relevant" 함수를 어떻게 처리하나요?
A: 현재는 단순한 키워드 매칭(keyword matching) 함수를 사용합니다. 저는 핵심 비즈니스 키워드(예: "multi-agent", "AI agent", "Oracle Cloud", "OCI", "autonomous database")가 담긴 YAML 파일을 유지 관리합니다. 이 함수는 GSC 쿼리에 이러한 키워드가 최소 두 개 이상 포함되어 있는지 확인합니다. 이는 휴리스틱(heuristic) 방식이며 완벽하지는 않지만, 노이즈를 걸러내는 데 효과적입니다.
Q: 발행 전 수동 검토(manual review) 프로세스는 어떻게 되나요?
A: 초안 작성 에이전트(drafting agent)가 커스텀 봇을 통해 Markdown 출력물을 개인 Telegram 채널로 전송합니다. 저는 휴대폰으로 사실 관계의 정확성, 톤(tone), 그리고 전반적인 일관성(coherence)을 확인합니다. 검토를 통과하면 봇에 /publish 명령어를 보내며, 이는 최종 발행 에이전트(publishing agents)를 트리거합니다. 기사당 약 5~10분 정도 소요됩니다.
Q: 비용과 속도를 위해 LLM 라우팅(routing)을 어떻게 관리하나요?
A: 제가 만든 커스텀 라우터 에이전트(router agent)는 간단한 의사결정 트리(decision tree)를 사용합니다. 개요(outline) 작성이나 빠른 요약의 경우, 기본적으로 Groq의 Llama 3 8B를 사용합니다. 블로그 포스트와 같이 상세하고 고품질의 콘텐츠 생성(content generation)이 필요한 경우에는 품질과 비용의 균형이 뛰어난 Claude 3 Haiku를 우선적으로 사용합니다. 만약 Haiku를 사용할 수 없거나 너무 느릴 경우, GPT-3.5 Turbo로 폴백(fallback)합니다. 이 로직은 환경 변수(environment variables)를 통해 설정 가능합니다.
Q: 만약 GSC API가 반환하는 쿼리가 너무 많아 SERP를 수동으로 분석하기 힘들다면 어떻게 하나요?
A: 실행 가능한 갭(gap)의 필터링된 목록이 5~7개 쿼리를 초과하면, 노출수(impression count)가 가장 높은 것을 기준으로 우선순위를 정합니다. 또한 requests와 BeautifulSoup를 사용하여 각 쿼리에 대한 상위 5개 결과를 가져온 뒤, 로컬 Llama 3 8B를 사용하여 콘텐츠를 요약하고 경쟁사 강도를 평가하는 SERP 분석 에이전트 프로토타입을 보유하고 있습니다. 이는 Google의 속도 제한(rate limits) 및 CAPTCHA 문제로 인해 아직 실험적인 단계입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기