개발 slecs

GSC 사각지대 막고 어드민 대시보드 한 판으로 통합한 오후

목차

오늘 오후 작업은 사실 처음부터 "대시보드 만들어야지" 하고 시작한 게 아니었다. GSC 알림 채널 보다가 특정 사이트 색인 데이터가 아예 안 들어오고 있다는 걸 뒤늦게 발견한 게 시발점이었다.

시작점: 멀티계정 토큰 구멍

운영 중인 사이트들이 Google Search Console에 등록된 계정이 하나가 아니다. 메인 계정 property들은 모니터링 스크립트가 잘 돌고 있었는데, 별도 계정에 묶인 사이트 하나가 오랫동안 색인 모니터 대상에서 빠져 있었다. gsc_monitor.pygsc_autoheal.py 양쪽 다 해당 property를 커버하는 토큰이 없었던 것.

고친 방향은 단순했다 — 스크립트가 토큰을 하나만 보는 게 아니라 property별로 적합한 계정 토큰을 매핑해서 쓰도록. 수정하고 나서 바로 docs/hedvion-CLAUDE.mdNEW-SITE-ONBOARDING.md도 함께 갱신했다. 다음번에 새 사이트 붙일 때 또 같은 실수 안 하려면 온보딩 문서에 "어느 GSC 계정 아래에 추가하는 건지 확인" 항목이 명시돼 있어야 한다.

그 김에 터진 Recipe 구조화 데이터 경고

GSC 콘솔 들어간 김에 Rich Result 경고도 같이 봤더니 Recipe 타입 구조화 데이터에서 누락 필드 경고가 여러 건 쌓여 있었다. 빠진 항목들:

필드 문제
HowToStep.name 단계별 이름 없음
HowToStep.image 단계 이미지 미지정
keywords 아예 없음
nutrition 칼로리 등 칸 없음

types.ts에 스키마 타입 추가하고, content.config.ts에서 frontmatter 필드 정의 보강한 뒤, Post.astroPostI18n.astro 양쪽 레이아웃에서 JSON-LD 렌더링 로직 수정했다. i18n 버전 따로 있는 레이아웃이라 같은 수정을 두 파일에 반영해야 해서 살짝 귀찮았지만 구조 자체를 바꾸진 않았다.

데이터가 제대로 들어오니까 대시보드 얘기가 나왔다

GSC 모니터 고치면서 자연스럽게 "그럼 이 데이터들 어드민에서 한눈에 보면 좋겠는데"로 이어졌다. 기존 어드민 대시보드는 숫자 몇 개 나열 수준이었고, 필요한 데이터는 스크립트가 그때그때 뽑아 Discord로 쏘는 형태였다.

이번에 바꾼 방향:

  • DB 적재 먼저: stats-dashboard.py, publish-progress.py, claude-usage-discord.py, codex-usage-discord.py 등 기존 스크립트들이 Discord에만 쏘던 데이터를 admin_db에도 쌓도록 수정. GSC 종합 지표, AdSense 수익/상태, 조회수, 발행 건수, Claude·Codex 사용량 모두.
  • 컴포넌트 분리: 대시보드를 기능 단위 컴포넌트로 쪼갰다.
dashboard/
  _components/
    SiteTrafficChart.tsx   // 사이트별 조회수 추이
    GscPropertyChart.tsx   // GSC 클릭/노출
    TrafficChart.tsx       // 전체 트래픽 합산
    BotUsageGauge.tsx      // Claude/Codex 토큰 사용률
    PublishProgressBars.tsx // 발행 진행도
    SparkLine.tsx          // 공용 소형 차트

SparkLine을 공용으로 빼서 나머지 컴포넌트들이 재활용하는 구조. 차트 라이브러리 새로 끌어오기보단 기존 걸 얇게 래핑하는 방향으로 갔다.

마무리하고 나서 든 생각

이 작업 흐름이 꽤 자연스러웠던 이유가 있다. GSC 구멍 → 데이터 신뢰성 → 적재 → 시각화 순서로 각 단계가 앞 단계의 결과물을 받아서 진행됐다. 멀티계정 토큰 안 고쳤으면 대시보드 GSC 차트는 처음부터 데이터가 반쪽짜리였을 것.

앞으로 새 사이트 붙일 때 온보딩 문서에 GSC 계정 확인 항목이 들어갔으니, 적어도 같은 구멍은 안 생길 것 같다. 대시보드는 DB 적재가 쌓이면서 시계열이 채워지면 더 쓸모 있어질 거고.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.