GSC 사각지대 막고 어드민 대시보드 한 판으로 통합한 오후
목차
오늘 오후 작업은 사실 처음부터 "대시보드 만들어야지" 하고 시작한 게 아니었다. GSC 알림 채널 보다가 특정 사이트 색인 데이터가 아예 안 들어오고 있다는 걸 뒤늦게 발견한 게 시발점이었다.
시작점: 멀티계정 토큰 구멍
운영 중인 사이트들이 Google Search Console에 등록된 계정이 하나가 아니다. 메인 계정 property들은 모니터링 스크립트가 잘 돌고 있었는데, 별도 계정에 묶인 사이트 하나가 오랫동안 색인 모니터 대상에서 빠져 있었다. gsc_monitor.py와 gsc_autoheal.py 양쪽 다 해당 property를 커버하는 토큰이 없었던 것.
고친 방향은 단순했다 — 스크립트가 토큰을 하나만 보는 게 아니라 property별로 적합한 계정 토큰을 매핑해서 쓰도록. 수정하고 나서 바로 docs/hedvion-CLAUDE.md와 NEW-SITE-ONBOARDING.md도 함께 갱신했다. 다음번에 새 사이트 붙일 때 또 같은 실수 안 하려면 온보딩 문서에 "어느 GSC 계정 아래에 추가하는 건지 확인" 항목이 명시돼 있어야 한다.
그 김에 터진 Recipe 구조화 데이터 경고
GSC 콘솔 들어간 김에 Rich Result 경고도 같이 봤더니 Recipe 타입 구조화 데이터에서 누락 필드 경고가 여러 건 쌓여 있었다. 빠진 항목들:
| 필드 | 문제 |
|---|---|
HowToStep.name |
단계별 이름 없음 |
HowToStep.image |
단계 이미지 미지정 |
keywords |
아예 없음 |
nutrition |
칼로리 등 칸 없음 |
types.ts에 스키마 타입 추가하고, content.config.ts에서 frontmatter 필드 정의 보강한 뒤, Post.astro와 PostI18n.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
첫 댓글 달아줘.