AI가 쓴 글, SEO 기준을 맞추는지 매번 확인하기 귀찮았다
AI로 블로그 초안을 뽑아내는 건 어렵지 않다.
문제는 그 다음이다. 키워드가 제목에 빠져 있거나, 본문이 너무 짧거나, FAQ 섹션이 없는 글이 종종 나온다.
프롬프트에 분명히 적어뒀는데도 Claude가 무시하는 경우가 있다.
결국 사람이 직접 열어서 체크해야 하는데, 이게 반복되면 자동화의 의미가 사라진다.
그래서 AI SEO 자동 검수 노드를 워크플로우에 끼워넣는 실험을 해봤다.
대리-팀장 구조에서 발견한 한계
기존에 대리/팀장 2단계 AI 에디터 구조를 만들어뒀다.
대리 역할의 Claude가 초안을 작성하면, 팀장 역할의 Claude가 퇴고하는 방식이다.
이론상 팀장이 SEO 기준을 맞춰줄 거라고 기대했다.
현실은 달랐다. 팀장 프롬프트에 “메인 키워드를 제목에 넣어라”, “FAQ를 반드시 포함해라”
같은 지시를 넣어도 Claude가 100% 따르지 않는다.
어떤 날은 완벽하게 지키고, 어떤 날은 절반만 지킨다.
LLM(Large Language Model, 대규모 언어 모델)의 특성상 같은 프롬프트에도 출력이 달라지기 때문이다.
사람이 매번 확인하지 않으면 기준 미달 글이 그대로 발행될 수밖에 없었다.
해결 아이디어: AI가 AI 글을 검수하게 하자
프롬프트로 강제하는 건 한계가 있다. 그래서 발상을 바꿨다.
글을 쓰는 AI와 별도로, 글을 검수하는 AI를 따로 두는 것이다.
대리가 초안을 작성하면, 곧바로 SEO 체크 노드가 그 초안을 평가한다.
평가 결과가 일정 점수 이상이어야만 팀장 퇴고 단계로 넘어간다.
점수가 낮으면 워크플로우가 거기서 멈춘다.
AI SEO 자동 검수의 핵심은 “쓰는 것”과 “검증하는 것”을 분리하는 데 있다.
한 프롬프트에서 두 가지 역할을 시키면 흐지부지해진다.
역할을 나누면 각 단계가 자기 할 일만 하면 되니까 훨씬 명확해진다.
SEO 체크 노드 설계: 7가지 기준과 JSON 출력
SEO 체크 노드에서 Claude에게 시킨 건 단순하다.
초안을 받아서 7가지 기준으로 평가하고, 결과를 JSON으로 뱉어라.
7가지 기준은 이렇다:
1. 메인 키워드가 제목에 포함되어 있는가
2. 키워드가 본문에 3회 이상 등장하는가
3. H2 구조가 존재하는가
4. FAQ 섹션이 있는가
5. 글 길이가 2000자 이상인가
6. 제목이 60자 이하인가
7. 뉴스 기반의 구체적 해석이 포함되어 있는가
각 기준을 통과하면 점수를 주고, 총점을 seo_score로 계산한다. 출력 형식은 다음과 같이 지정했다:
{
"seo_score": 85,
"pass_fail": "pass",
"fail_reason": "",
"checks": {
"keyword_in_title": true,
"keyword_count_body": true,
"h2_structure": true,
"faq_section": true,
"content_length": true,
"title_length": true,
"news_based_analysis": false
}
}
AI SEO 자동 검수에서 JSON 출력을 쓰는 이유는 후속 노드에서 파싱하기 편해서다.
IF 노드에서 seo_score 값만 뽑아서 조건 분기하면 된다.
IF 노드로 통과/실패 분기 처리
n8n에서 IF 노드 조건은 간단하게 설정했다:
{{ $json.seo_score >= 70 }}
70점 이상이면 팀장 퇴고 단계로 진행한다. 70점 미만이면 워크플로우가 거기서 끝난다.
처음엔 점수가 낮은 글도 어떻게든 살려보려고 했다.
피드백을 주고 다시 쓰게 하는 루프를 만들까 고민했는데, 실험해보니 그냥 버리는 게 낫다.
기준 미달 글을 억지로 고치느니 새로 뽑는 게 품질이 더 좋다.
n8n 워크플로우를 처음 세팅하는 단계라면
n8n WSL 설치부터 첫 워크플로우까지 가이드를 먼저 보는 걸 추천한다.
실제 워크플로우 흐름 정리
전체 흐름을 정리하면 이렇다:
1. 트리거 (수동 또는 스케줄)
2. 대리 노드: Claude가 초안 작성
3. SEO 체크 노드: Claude가 초안을 7가지 기준으로 평가, JSON 출력
4. IF 노드: seo_score >= 70 확인
- 통과 → 팀장 노드로 진행
- 실패 → 워크플로우 종료
5. 팀장 노드: Claude가 퇴고
6. 최종 출력
SEO 체크 노드를 추가한 뒤로 발행 전에 사람이 확인하는 시간이 크게 줄었다.
물론 100% 완벽하진 않다. Claude가 평가하는 것도 결국 AI라서 가끔 오판한다.
그래도 “확인 안 해도 대충 괜찮겠지”라는 상태보다는 훨씬 안정적이다.
Claude API 연결은 이미 되어 있어야 한다
이 워크플로우가 돌아가려면 n8n에서 Claude API 호출이 가능해야 한다.
Claude API n8n 연결 방법을 참고해서 HTTP Request 노드 세팅을 먼저 해두자.
API 키 발급, 헤더 설정, 요청 본문 구조까지 한 번만 잡아두면 이후로는 노드 복사해서 쓰면 된다.
느낀 점: AI가 AI를 검수하는 구조의 가능성
AI가 AI 글을 검수하는 게 처음엔 좀 이상하게 느껴졌다.
결국 둘 다 같은 모델인데 의미가 있나 싶었다. 그런데 실제로 돌려보니 효과가 있다.
글 쓰는 프롬프트와 검수하는 프롬프트를 분리하면 각자 역할에 더 집중한다.
사람이 매번 확인하는 것보다 빠르고 일관성도 있다.
사람은 피곤하면 대충 보게 되는데, AI는 그런 게 없다.
물론 AI도 실수하지만, 그 실수의 패턴이 일정해서 보완하기가 더 쉽다.
AI SEO 자동 검수를 도입하고 나서 가장 크게 바뀐 건 마음가짐이다.
예전엔 “이 정도면 발행해도 되겠지”라는 애매한 판단을 했다.
지금은 70점 넘으면 진행, 안 넘으면 버림. 기준이 명확하니까 고민할 시간이 없다.
FAQ
Q1. SEO 체크 노드에서 Claude 말고 다른 모델도 쓸 수 있나?
A1. 가능하다. GPT-4나 Gemini 같은 다른 LLM도 JSON 출력을 지원하면 같은 방식으로 쓸 수 있다.
프롬프트만 살짝 조정하면 된다.
Q2. 70점 기준은 어떻게 정한 건가?
A2. 7가지 기준 중 5개 이상 통과하면 대략 70점 이상이 나온다.
실험하면서 이 정도면 퇴고 후 발행 가능한 수준이라고 판단했다. 기준은 상황에 맞게 조정하면 된다.
Q3. 점수가 낮은 글을 자동으로 다시 쓰게 할 수는 없나?
A3. 기술적으로는 가능하다. 실패 시 대리 노드로 루프를 걸면 된다.
그런데 실험해보니 품질이 크게 안 올라간다. 새로 뽑는 게 낫다.
Q4. SEO 체크 결과를 로그로 남길 수 있나?
A4. n8n에서 Google Sheets나 Notion 노드로 연결하면 된다.
JSON 출력을 그대로 저장해두면 나중에 어떤 기준에서 많이 실패하는지 분석할 수 있다.
Q5. 이 구조를 블로그 외에 다른 콘텐츠에도 적용할 수 있나?
A5. 가능하다. 뉴스레터, 제품 설명, SNS 포스트 등 기준만 바꾸면 된다.
예를 들어 SNS용이면 글자 수 제한, 해시태그 포함 여부 같은 기준으로 대체하면 된다.