📚 이 글은 “개발자가 AI 자동화로 부업하는 실전 기록” 시리즈입니다.
- 📌 1편: AI 자동화로 개발자 부업하는 법 — 실패 3번 하고 나서야 알게 된 것들
- 📌 2편: WordPress + Claude API Day 1 세팅 기록
- 📌 3편: Slack 봇으로 블로그 자동 발행 트리거 만들기 — 개발자 부업 Day 2
- 📌 4편: Threads API 연동으로 블로그 발행과 SNS 자동 배포 연결하기 — Day 3
- 📌 5편: Notion API로 블로그 발행 기록 자동화하기 — 포트폴리오가 되는 대시보드 만들기
- 📌 6편: Windows Task Scheduler로 블로그 자동 발행 스케줄러 만들기 — 개발자 부업 Day 5
- 📌 7편: 블로그 SEO 최적화 실전 — Yoast SEO + 키워드 전략부터 검색 상위 노출까지 (현재 글)
- 📌 8편: 블로그 자동화 2주 운영 결과 공개 — 트래픽, 비용, 배운 것들 (예정)
- 📌 9편: 쿠팡파트너스 가입부터 자동화까지 — 개발자가 수익화 채널 추가하는 실전기 (예정)
- 📌 10편: 구글 애드센스 신청 도전기 — 10개 글 채우고 드디어 신청했다 (예정)
← 6편: Windows Task Scheduler로 블로그 자동 발행 스케줄러 만들기
글을 자동으로 발행하기 시작하고 나서 한 일주일쯤 지났을 때였다. Google Search Console을 열어봤는데, 노출 수가 0이었다. 클릭은 당연히 0. 그냥 숫자 하나 없이 텅 비어 있었다.
아, 이게 글을 쓴다고 끝나는 게 아니구나.
솔직히 그때까지 나는 “자동화로 글 만들어서 올리면 어느 정도는 검색이 되겠지”라는 막연한 기대를 갖고 있었다. 백엔드 개발자로 5년을 일했는데, 정작 검색 엔진이 어떻게 돌아가는지는 거의 모르고 있었다. API 연동, Slack 봇, 스케줄러까지 다 만들어놨는데 정작 독자가 없으면 전부 의미 없는 거잖아. 그래서 이번 편은 코드보다 SEO 얘기를 더 길게 써보려 한다.
블로그 SEO, 개발자는 왜 모를까
나는 서버 로직은 꽤 잘 짜는 편이다. REST API 설계하고, DB 쿼리 최적화하고, 인프라 세팅하는 건 익숙하다. 그런데 SEO는 진짜 다른 세계였다. 처음에는 “SEO가 뭐 그리 어렵겠어, 그냥 키워드 몇 개 박으면 되는 거 아냐?” 라고 생각했다.
틀렸다. 완전히.
SEO는 검색 엔진이 내 글을 ‘신뢰할 수 있는 콘텐츠’로 인식하게 만드는 종합적인 작업이다. 단순히 키워드를 많이 넣는다고 되는 게 아니라, 구조·속도·내부 링크·메타 태그·가독성까지 전방위로 신경 써야 한다. 개발자로서 기술 스택은 잘 아는데, 정작 내 블로그가 구글한테 어떻게 보이는지는 전혀 모르고 있었다는 게 좀 충격이었다.
그래서 나는 일주일 동안 SEO 관련 글을 꽤 많이 읽었다. 그중에서 WordPress를 쓰는 사람이라면 결국 모두 같은 이름을 언급하더라. Yoast SEO. 플러그인 하나가 이렇게 많이 언급될 수 있나 싶을 정도였다.
SEO는 글을 발행하고 난 뒤의 일이 아니라, 글을 쓰기 전부터 시작해야 하는 작업이다.
Yoast SEO 플러그인 설치부터 기본 세팅까지
WordPress 관리자 패널에서 플러그인 → 새로 추가 → “Yoast SEO” 검색하면 바로 나온다. 무료 버전으로도 웬만한 기능은 다 된다. 설치하고 활성화하면 왼쪽 메뉴에 ‘SEO’라는 항목이 생긴다.
처음 세팅할 때 설정 마법사가 뜨는데, 솔직히 이걸 그냥 넘겼다가 나중에 후회했다. 블로그 유형(개인 블로그인지, 기업인지)이라든가, 소셜 계정 연결이라든가, 사이트맵 자동 생성 활성화 같은 게 여기서 설정되기 때문에 꼭 처음부터 제대로 읽으면서 설정하는 걸 추천한다.
내가 특히 중요하게 설정한 것 세 가지를 정리하면 이렇다.
- ✅ XML Sitemap 자동 생성 활성화 — SEO → 일반 → 기능 탭에서 켤 수 있음. 구글이 내 글을 발견하게 해주는 지도 역할
- ✅ 타이틀 구분자 설정 — SEO → 검색 외관 → 일반 탭. 브라우저 탭과 검색 결과에 표시되는 제목 형식을 결정함
- ✅ 소셜 미디어 메타 태그 설정 — SEO → 소셜 탭. Threads나 SNS 공유 시 썸네일이 제대로 나오게 해줌 (4편에서 Threads 자동 배포 연동했던 거 기억나는지)
그리고 Google Search Console과 연동도 꼭 해야 한다. Yoast SEO가 사이트맵 URL을 자동으로 만들어주는데, 그 URL을 Search Console에 제출하면 구글이 내 블로그를 훨씬 빨리 크롤링하기 시작한다. 내 경우 제출 후 약 3일 만에 첫 노출이 생겼다.
Yoast SEO는 설치만 해두는 플러그인이 아니라, 매 글 발행마다 체크리스트처럼 써야 한다.
키워드 전략 — 개발자 부업 블로그에서 실제로 써먹은 방법
키워드 전략이라고 하면 엄청 거창하게 들리는데, 나는 처음에 단 두 가지 기준만 잡았다.
① 검색량이 너무 많지 않을 것 (경쟁이 너무 셈)
② 검색량이 너무 적지 않을 것 (아무도 안 찾음)
이게 소위 말하는 “롱테일 키워드” 전략이다. 예를 들어 “블로그 SEO”는 경쟁이 너무 세다. 하지만 “개발자 블로그 SEO 자동화”처럼 구체적이고 좁은 키워드는 검색량은 적지만 내 글이 상위에 노출될 가능성이 훨씬 높다.
나는 키워드 리서치 도구로 주로 이 세 가지를 활용했다.
| 도구 | 특징 | 비용 | 내 사용 용도 |
|---|---|---|---|
| Google Search Console | 실제 내 블로그에 들어온 검색어 확인 | 무료 | 기존 글 최적화 힌트 |
| Google 자동완성 | 검색창에 키워드 치면 연관어 뜸 | 무료 | 롱테일 키워드 발굴 |
| 네이버 데이터랩 | 국내 검색 트렌드 확인 | 무료 | 한국 독자 타깃 주제 선정 |
그리고 중요한 것 하나. 키워드는 제목, 첫 번째 문단, h2 소제목, 메타 디스크립션에 자연스럽게 들어가야 한다. 글 전체에 억지로 반복 삽입하는 건 오히려 구글이 스팸으로 인식할 수 있다. Yoast SEO의 분석 탭에서 초록불이 켜지도록 맞추되, 문장이 어색해지면 과감히 무시하는 게 낫다.
키워드는 독자를 위해 쓰는 것이지, 검색 엔진을 속이기 위한 도구가 아니다.
자동화 파이프라인에 SEO 메타데이터 심는 법
여기서부터가 내가 가장 많이 고민했던 부분이다. 글을 자동으로 발행하면 Yoast SEO의 메타 정보(포커스 키워드, 메타 디스크립션, SEO 제목)는 어떻게 채워 넣지?
WordPress 관리자 화면에서 Yoast SEO 메타 박스를 손으로 채우는 게 기본인데, 자동화 파이프라인에서는 그게 불가능하다. 그래서 WordPress REST API로 글을 발행할 때 Yoast 메타 필드도 함께 보내면 된다는 걸 알게 됐다.
Yoast SEO는 내부적으로 `_yoast_wpseo_metadesc`, `_yoast_wpseo_focuskw`, `_yoast_wpseo_title` 같은 포스트 메타 필드를 사용한다. REST API로 글을 발행할 때 `meta` 필드에 이걸 같이 보내면 된다.
⚙️ 사전 준비: WordPress에 JWT Authentication for WP REST API 플러그인이 설치·활성화되어 있어야 합니다. Yoast SEO 플러그인도 설치되어 있어야 하며, WordPress REST API에서 Yoast 메타 필드를 읽고 쓰려면 Yoast SEO 버전 14.0 이상이 권장됩니다. .env 파일에 WP_URL, WP_USER, WP_PASS가 설정되어 있어야 합니다.
import requests
import os
from dotenv import load_dotenv
load_dotenv()
WP_URL = os.getenv("WP_URL")
WP_USER = os.getenv("WP_USER")
WP_PASS = os.getenv("WP_PASS")
def get_jwt_token():
"""JWT 토큰 발급"""
response = requests.post(
f"{WP_URL}/wp-json/jwt-auth/v1/token",
json={"username": WP_USER, "password": WP_PASS}
)
response.raise_for_status()
return response.json()["token"]
def publish_post_with_seo(title, content, seo_title, meta_description, focus_keyword):
"""Yoast SEO 메타 포함해서 글 발행"""
token = get_jwt_token()
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
payload = {
"title": title,
"content": content,
"status": "publish",
"meta": {
# Yoast SEO 메타 필드
"_yoast_wpseo_title": seo_title,
"_yoast_wpseo_metadesc": meta_description,
"_yoast_wpseo_focuskw": focus_keyword,
}
}
response = requests.post(
f"{WP_URL}/wp-json/wp/v2/posts",
json=payload,
headers=headers
)
response.raise_for_status()
post_data = response.json()
print(f"✅ 발행 완료: {post_data['link']}")
return post_data
# 사용 예시
publish_post_with_seo(
title="블로그 SEO 최적화 실전 가이드",
content="본문 내용...
",
seo_title="블로그 SEO 최적화 실전 | Yoast SEO 키워드 전략",
meta_description="개발자 부업 블로그의 SEO 최적화 실전기. Yoast SEO 세팅부터 키워드 전략까지 직접 해보고 알게 된 것들을 정리했습니다.",
focus_keyword="블로그 SEO 자동화"
)
이 코드를 Claude API 파이프라인에 붙이면 된다. Claude한테 글 생성 요청을 보낼 때 `seo_title`, `meta_description`, `focus_keyword`도 함께 생성해달라고 프롬프트에 포함시키면 자동화 흐름이 완성된다. 나는 Claude 응답을 JSON 형태로 받아서 각 필드를 파싱하는 방식으로 구현했다.
functions.php에 register_post_meta()로 수동 등록해주면 해결된다.자동화 파이프라인에서도 SEO 메타데이터를 함께 심어두면, 발행 즉시 검색 최적화 상태가 된다.
Claude API로 SEO 최적화 메타데이터 자동 생성하기
글 본문을 Claude가 생성하는 건 이미 2편에서 다뤘다. 근데 거기에 SEO 메타데이터 생성까지 붙이는 건 별도로 정리할 필요가 있다. 프롬프트 설계가 중요하기 때문이다.
⚙️ 사전 준비: anthropic 라이브러리가 설치되어 있어야 합니다 (pip install anthropic). .env에 ANTHROPIC_API_KEY가 설정되어 있어야 하며, Python의 json 모듈은 별도 설치 없이 사용 가능합니다.
import anthropic
import json
import os
from dotenv import load_dotenv
load_dotenv()
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
def generate_post_with_seo(topic: str, target_keyword: str) -> dict:
"""Claude API로 글 본문 + SEO 메타데이터 동시 생성"""
prompt = f"""
다음 주제로 블로그 글을 작성하고, SEO 메타데이터도 함께 만들어주세요.
주제: {topic}
핵심 키워드: {target_keyword}
아래 JSON 형식으로만 응답해주세요 (마크다운 코드블록 없이):
{{
"title": "글 제목 (핵심 키워드 포함, 50자 내외)",
"content": "HTML 형식의 본문 (최소 1500자)",
"seo_title": "검색 결과 제목 (60자 이내, 키워드 앞에 오도록)",
"meta_description": "검색 결과 설명 (120~155자, 클릭 유도)",
"focus_keyword": "포커스 키워드 (2~4단어)"
}}
"""
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
messages=[{"role": "user", "content": prompt}]
)
raw = message.content[0].text.strip()
post_data = json.loads(raw)
return post_data
# 사용 예시
result = generate_post_with_seo(
topic="개발자가 AI 자동화로 블로그 부업하는 방법",
target_keyword="개발자 부업 자동화"
)
print(f"제목: {result['title']}")
print(f"SEO 제목: {result['seo_title']}")
print(f"메타 설명: {result['meta_description']}")
실제로 이 방식으로 돌려보니 Claude가 생성하는 SEO 제목과 메타 디스크립션의 품질이 꽤 괜찮았다. 완벽하진 않아서 가끝 글자 수를 초과하거나 키워드 위치가 애매한 경우도 있었는데, 그럴 때는 프롬프트에 조건을 더 명확하게 추가하면 개선됐다.
Claude에게 SEO 조건을 명확히 줄수록, 메타데이터 품질이 눈에 띄게 올라간다.
Yoast SEO 녹색 신호등, 맹신하지 말 것
Yoast SEO를 세팅하고 나면 각 글마다 분석 결과를 색깔로 보여준다. 빨강/주황/초록. 처음에 나는 이걸 무조건 초록으로 만들어야 한다는 강박이 생겼다. 키워드 밀도가 낮다고 하면 억지로 키워드를 더 넣었고, 문장 길이가 길다고 하면 어색하게 잘랐다.
결과적으로 글이 자연스럽지 않아졌다. 읽다가 “이 문장 왜 이렇게 어색하지?” 싶은 부분이 생겼고, 나중에 리뷰해보니 Yoast 점수 맞추려고 억지로 구성한 문장들이었다.
Yoast SEO의 분석 지표는 참고 자료지, 절대 기준이 아니다. 특히 한국어 콘텐츠는 Yoast가 영어 기준으로 설계된 부분이 많아서 한국어 문장에 그대로 적용하면 이상한 결과가 나오기도 한다. 예를 들어 “수동태 문장 비율이 높다”는 경고는 한국어에는 별 의미가 없다. 나는 지금은 SEO 분석은 가볍게 참고하되, 가독성 분석 쪽은 좀 더 신경 쓰는 방식으로 쓰고 있다.
핵심은 결국 이거다. 독자가 끝까지 읽는 글이 SEO에도 좋다. 체류 시간, 재방문율, 공유 — 이 모든 게 구글 랭킹에 영향을 준다. 알고리즘보다 사람을 먼저 생각하면 결국 알고리즘도 따라온다.
Yoast 초록불이 SEO 성공을 보장하지 않는다. 독자가 끝까지 읽는 글이 진짜 최적화된 글이다.
SEO 작업 이후 실제로 달라진 것들
솔직하게 말하면, SEO는 빠른 결과를 기대하면 실망한다. 구글은 느리다. 내가 Search Console에 사이트맵을 제출하고 첫 유의미한 노출이 생기기까지 약 2주 정도 걸렸다. 클릭이 한 자리 숫자라도 생긴 건 3주 차쯤이었다.
그래도 SEO 세팅을 하고 나서 확실히 달라진 것들이 있었다.
- ✅ 구글이 내 글을 인식하는