요약
•
권장 CSV 3종: content_assets.csv(원장) + content_links.csv(내부링크) + content_metrics.csv(성과, 선택)
•
핵심 컨셉: 글 1개를 “문서”로만 보지 않고 **클러스터 자산(주제·역할·품질·리스크)**로 관리
목차
1.
파일 구성(3 CSV)
2.
CSV #1 콘텐츠 원장 컬럼 설계
3.
CSV #2 내부 링크 그래프 컬럼 설계
4.
CSV #3 성과 로그 컬럼 설계(선택)
5.
SQL 쿼리 샘플(운영 KPI/경고/점검)
1) 파일 구성(권장)
•
content_assets.csv: 글 1행 = 콘텐츠 1건(기획→작성→발행→업데이트)
•
content_links.csv: 링크 1행 = 내부 링크 1개(허브 회귀/체인 점검)
•
content_metrics.csv (선택): 날짜×글 단위 성과(노출/클릭/CTR 등)
2) CSV #1: content_assets.csv (콘텐츠 원장)
A. 식별/분류(필수)
컬럼 | 타입 | 예시 | 설명 |
asset_id | string | A-20251214-001 | 고유 ID |
title | string | 서울 재건축 단계별 리스크 체크리스트 | 제목 |
status | enum | idea/draft/published/updated | 상태 |
publish_date | date | 2025-12-14 | 발행일 |
last_update_date | date | 2025-12-20 | 수정일 |
core_topic | string | 서울 정비사업 | 코어 토픽(고정 축) |
sub_cluster | string | 사업성/리스크/제도/지역/사례 | 하위 클러스터 |
role | enum | pillar/support/case/update | 역할(필러/서포팅/사례/업데이트) |
intent_type | enum | info/decision/howto/news | D.I.A 의도 유형 |
hub_asset_id | string | A-20251201-000 | 소속 허브(Pillar) ID |
B. D.I.A 구조 체크(필수)
컬럼 | 타입 | 예시 | 설명 |
conclusion_first | bool | TRUE | 상단 결론(7줄 내) |
scope_statement | bool | TRUE | 범위/비범위 선언 |
evidence_block | bool | TRUE | 데이터/제도 근거 블록 |
counter_risk_block | bool | TRUE | 반론/리스크 블록 |
actionable_checklist | bool | TRUE | 체크리스트/가이드 |
sources_declared | bool | TRUE | 출처 표기 여부 |
originality_type | enum | data_rework/framework/case/none | 독창성 유형 |
freshness_needed | bool | TRUE | 시의성 필요 주제 여부 |
update_log_included | bool | TRUE | 업데이트 로그 |
C. C-Rank(주제 일관성)·운영(필수)
컬럼 | 타입 | 예시 | 설명 |
topic_fit_score | int(0-5) | 5 | 코어토픽 적합도(자체평가) |
cluster_priority | int(1-3) | 1 | 1=핵심,3=보조 |
links_out_target | int | 5 | 이 글에서 나갈 링크 목표 |
links_in_target | int | 3 | 이 글로 들어올 링크 목표 |
pillar_candidate | bool | FALSE | 향후 필러 승격 후보 |
D. AI/어뷰징 리스크(필수)
컬럼 | 타입 | 예시 | 설명 |
ai_used | bool | TRUE | AI 사용 여부 |
ai_usage_scope | enum | research/outline/edit/none | 사용 범위 |
ai_ratio_est | int(0-100) | 45 | AI 기여율 추정 |
human_judgement_block | bool | TRUE | ‘내 판단/실무상’ 문단 |
template_group | string | T-DECISION-01 | 템플릿 군(반복 탐지) |
risk_flags | string | thin_content,repeat_title | 위험 플래그(콤마) |
팁(운영 안정성): intent_type, role, template_group는 “검색 의도 불일치/반복”을 잡는 데 가장 효율적입니다.
3) CSV #2: content_links.csv (내부 링크 그래프)
컬럼 | 타입 | 예시 | 설명 |
from_asset_id | string | A-20251214-001 | 링크 출발 글 |
to_asset_id | string | A-20251201-000 | 링크 도착 글 |
link_type | enum | to_pillar/to_support/to_case | 링크 유형 |
anchor_text | string | 분담금 계산 구조 | 앵커 텍스트 |
position | enum | intro/body/summary | 링크 위치 |
created_date | date | 2025-12-14 | 생성일 |
is_active | bool | TRUE | 링크 유효 |
4) CSV #3: content_metrics.csv (성과 로그, 선택)
컬럼 | 타입 | 예시 | 설명 |
date | date | 2025-12-14 | 집계일 |
asset_id | string | A-20251214-001 | 글 ID |
impressions | int | 1200 | 노출 |
clicks | int | 85 | 클릭 |
ctr | float | 0.0708 | 클릭률 |
avg_position | float | 6.2 | 평균 순위(가능 시) |
comments | int | 3 | 댓글 |
saves | int | 4 | 저장 |
external_referrals | int | 12 | 외부 유입(가능 시) |
5) SQL 쿼리 샘플
아래는 SQLite/PostgreSQL 계열 문법 기준입니다. (테이블명 = CSV를 적재한 테이블명)
A. C-Rank용: 주제 일관성(최근 20개 코어토픽 비율)
WITH last20 AS (
SELECT core_topic
FROM content_assets
WHERE status IN ('published','updated')
ORDER BY publish_date DESC
LIMIT 20
)
SELECT core_topic,
COUNT(*) AS cnt,
ROUND(100.0 * COUNT(*) / 20, 1) AS pct
FROM last20
GROUP BY core_topic
ORDER BY cnt DESC;
SQL
복사
B. C-Rank용: 서브클러스터 편중 점검(최근 30개)
WITH last30 AS (
SELECT sub_cluster
FROM content_assets
WHERE status IN ('published','updated')
ORDER BY publish_date DESC
LIMIT 30
)
SELECT sub_cluster,
COUNT(*) AS cnt,
ROUND(100.0 * COUNT(*) / 30, 1) AS pct
FROM last30
GROUP BY sub_cluster
ORDER BY cnt DESC;
SQL
복사
C. D.I.A용: “구조 블록 누락” 경고 리스트
SELECT asset_id, title, publish_date,
conclusion_first, evidence_block, counter_risk_block, actionable_checklist
FROM content_assets
WHERE status IN ('published','updated')
AND (
conclusion_first = FALSE OR
evidence_block = FALSE OR
counter_risk_block = FALSE OR
actionable_checklist = FALSE
)
ORDER BY publish_date DESC;
SQL
복사
D. D.I.A용: 유형(intent_type)별 권장 블록 충족률(간이)
SELECT intent_type,
COUNT(*) AS n,
ROUND(100.0 * AVG(CASE WHEN conclusion_first THEN 1 ELSE 0 END), 1) AS pct_conclusion_first,
ROUND(100.0 * AVG(CASE WHEN evidence_block THEN 1 ELSE 0 END), 1) AS pct_evidence,
ROUND(100.0 * AVG(CASE WHEN counter_risk_block THEN 1 ELSE 0 END), 1) AS pct_risk,
ROUND(100.0 * AVG(CASE WHEN actionable_checklist THEN 1 ELSE 0 END), 1) AS pct_action
FROM content_assets
WHERE status IN ('published','updated')
GROUP BY intent_type
ORDER BY n DESC;
SQL
복사
E. Chain용: “허브(Pillar)로 회귀 링크 없는 글(고아 문서)” 탐지
SELECT a.asset_id, a.title, a.hub_asset_id,
COUNT(l.to_asset_id) AS links_to_hub
FROM content_assets a
LEFT JOIN content_links l
ON a.asset_id = l.from_asset_id
AND l.to_asset_id = a.hub_asset_id
AND l.is_active = TRUE
WHERE a.status IN ('published','updated')
AND a.hub_asset_id IS NOT NULL
GROUP BY a.asset_id, a.title, a.hub_asset_id
HAVING COUNT(l.to_asset_id) = 0
ORDER BY a.publish_date DESC;
SQL
복사
F. 어뷰징용: 템플릿 반복(최근 14일, 그룹별 3개 이상)
SELECT template_group,
COUNT(*) AS cnt,
MIN(publish_date) AS first_date,
MAX(publish_date) AS last_date
FROM content_assets
WHERE status IN ('published','updated')
AND template_group IS NOT NULL
AND publish_date >= DATE('now','-14 day')
GROUP BY template_group
HAVING COUNT(*) >= 3
ORDER BY cnt DESC, last_date DESC;
SQL
복사
G. 어뷰징용: AI 과다 + 판단문단 부재(고위험 조합)
SELECT asset_id, title, publish_date, ai_ratio_est, human_judgement_block
FROM content_assets
WHERE status IN ('published','updated')
AND ai_ratio_est >= 70
AND human_judgement_block = FALSE
ORDER BY publish_date DESC;
SQL
복사
H. 운영 KPI: “필러 대비 서포팅 확장” 균형
SELECT role,
COUNT(*) AS cnt
FROM content_assets
WHERE status IN ('published','updated')
GROUP BY role
ORDER BY cnt DESC;
SQL
복사
I. 성과(선택): 최근 28일 CTR 상위 10개(노출 500 이상)
SELECT m.asset_id, a.title,
SUM(m.impressions) AS impressions_28d,
SUM(m.clicks) AS clicks_28d,
ROUND(1.0 * SUM(m.clicks) / NULLIF(SUM(m.impressions),0), 4) AS ctr_28d
FROM content_metrics m
JOIN content_assets a ON a.asset_id = m.asset_id
WHERE m.date >= DATE('now','-28 day')
GROUP BY m.asset_id, a.title
HAVING SUM(m.impressions) >= 500
ORDER BY ctr_28d DESC
LIMIT 10;
SQL
복사
결론
•
이 CSV+SQL 구조를 쓰면, 블로그 운영의 핵심을 **감(感)**이 아니라 데이터로 통제할 수 있습니다.
◦
C-Rank: core_topic/sub_cluster/role의 분포·일관성
◦
D.I.A: conclusion/evidence/risk/action의 블록 완결성
◦
어뷰징: template_group/ai_ratio_est/risk_flags의 반복·저품질 패턴
FAQ
Q1. CSV는 1개로도 되나요?
A. 가능하지만 content_links는 관계형(다대다)이라 분리하면 점검 쿼리가 훨씬 쉬워집니다.
Q2. 점수(DIA_struct_score)도 만들까요?
A. 추천합니다. 필요하면 conclusion_first 등 불리언을 가중치로 합산하는 파생 컬럼(뷰) 쿼리도 같이 드릴 수 있어요.
Q3. 바로 시작하려면 최소 컬럼은?
A. asset_id,title,status,publish_date,core_topic,sub_cluster,role,intent_type,hub_asset_id +
conclusion_first,evidence_block,counter_risk_block,actionable_checklist +
ai_used,ai_ratio_est,template_group 이 15개면 충분히 굴러갑니다.
