블로그 SEO 체크 -- 작성 후 검증
완료된 블로그 포스트에 대해 포괄적인 온페이지 SEO 검증을 수행하고
각 실패 항목에 대한 구체적인 수정 방안이 포함된 합격/불합격 체크리스트를 생성합니다.
작성 후 실행하여 게시 전 문제를 발견하도록 설계되었습니다.
워크플로우
1단계: 콘텐츠 읽기
대상 파일을 읽고 다음을 추출합니다.
- Frontmatter - 제목, 설명, 날짜, lastUpdated, 저자, 태그,
canonical, og:image, slug/URL
- Heading 구조 - 전체 텍스트가 포함된 H1, H2, H3 계층 구조
- 링크 - 앵커 텍스트가 포함된 모든 내부 및 외부 링크
- 메타 태그 - OG 태그, Twitter Card 태그, 정식 URL
- 본문 콘텐츠 - 키워드 및 구조 분석을 위한 전체 텍스트
사용자가 파일 경로 대신 URL을 제공하는 경우 WebFetch를 사용하여
페이지를 검색하고 관련 요소를 추출합니다.
2단계: 제목 태그 검증
| 검사 항목 | 합격 기준 |
|---|
| 문자 수 | 40-60자 (SERP에서 잘리지 않음) |
| 키워드 배치 | 기본 키워드가 제목 앞부분에 위치 |
| 파워 워드 | 하나 이상의 파워 워드 포함 (예: 가이드, 최고, 방법, 이유, 필수, 입증된, 완벽한) |
| 잘림 위험 | 60자에서 잘려도 중요한 의미 손실 없음 |
| 고유성 | 일반적이지 않고 콘텐츠에 특화됨 |
3단계: 메타 설명
| 검사 항목 | 합격 기준 |
|---|
| 문자 수 | 150-160자 |
| 통계 포함 | 하나 이상의 특정 숫자 또는 데이터 포인트 포함 |
| 가치 제안 | 명확한 독자 혜택 또는 가치 제안으로 끝남 |
| 키워드 포함 | 기본 키워드가 자연스럽게 나타남 (강제 삽입 아님) |
| 키워드 스터핑 없음 | 키워드가 최대 한 번만 나타남 |
| 행동 유도 | 행동을 암시 (배우다, 발견하다, 알아보다, 보다) |
4단계: Heading 계층 구조
| 검사 항목 | 합격 기준 |
|---|
| 단일 H1 | 정확히 하나의 H1 태그 (제목) |
| 레벨 건너뛰기 없음 | H1 -> H2 -> H3, H1 -> H3 또는 H2 -> H4 안 됨 |
| Heading 내 키워드 | 2-3개의 heading에 기본 키워드 포함 (자연스럽게, 강제 아님) |
| 질문 형식 | H2 heading의 60-70%가 질문 형식 |
| H2 개수 | 표준 블로그 포스트에서 6-8개의 H2 섹션 |
| Heading 길이 | 각 heading 70자 미만 |
5단계: 내부 링크
| 검사 항목 | 합격 기준 |
|---|
| 링크 개수 | 포스트당 3-10개의 내부 링크 |
| 앵커 텍스트 | 설명적임 ("여기를 클릭" 또는 "더 읽기" 아님) |
| 양방향 | 링크된 페이지도 다시 링크하는지 확인 (그렇지 않으면 플래그) |
| 고립 상태 없음 | 포스트가 사이트의 다른 페이지에 최소 3개 이상 링크 |
| 링크 분포 | 링크가 포스트 전체에 고르게 분포, 군집되지 않음 |
| 자기 링크 없음 | 포스트가 자신에게 링크하지 않음 |
Grep과 Glob을 사용하여 프로젝트에서 기존 블로그 콘텐츠를 스캔하고
가능한 경우 양방향 링크를 확인합니다.
5.5단계: 링크 중복 제거
| 검사 항목 | 합격 기준 |
|---|
| 중복 URL 없음 | 각 URL이 본문에 최대 한 번만 나타남 |
| 최상의 인스턴스 유지 | 중복이 있는 경우 가장 설명적인 앵커 텍스트를 가진 인스턴스 유지 |
| 내비게이션 예외 | 헤더/푸터 내비게이션 링크는 본문 중복 계산에서 제외 |
| 프래그먼트 정규화 | 다른 #프래그먼트가 있는 URL은 동일한 URL로 처리 |
발견된 각 중복에 대해:
- URL 정규화 (후행 슬래시, 쿼리 파라미터, 프래그먼트 제거)
- 앵커 텍스트 설명력에 따라 각 인스턴스 점수 매기기 (키워드 풍부 > 일반)
- 가장 높은 점수의 인스턴스 유지, 나머지 제거 권장
- 중복당 SEO 최적화 점수에서 1점 차감
Google은 페이지당 URL당 1-2개의 앵커 텍스트를 기록합니다 (Zyppy 2023). 최적: 본문에서 동일한 URL에 한 번 링크; 2,000단어당 5-10개의 내부 링크; 페이지당 최대 ~50개의 총 링크.
6단계: 외부 링크
| 검사 항목 | 합격 기준 |
|---|
| 소스 계층 | Tier 1-3 소스에만 링크 (권위 있는 소스, SEO 블로그 아님) |
| 끊어진 링크 | WebFetch를 사용하여 주요 외부 링크가 접근 가능한지 확인 |
| Rel 속성 | 외부 링크에 적절한 rel 속성 있음 (스폰서/UGC의 경우 nofollow) |
| 링크 개수 | 권위 있는 소스에 최소 3개의 외부 링크 |
| 경쟁사 링크 없음 | 불필요하게 직접 경쟁사에 링크하지 않음 |
7단계: 정식 URL
| 검사 항목 | 합격 기준 |
|---|
| 존재 여부 | Frontmatter 또는 메타 태그에 정식 URL이 정의됨 |
| 올바른 형식 | 전체 절대 URL (https://도메인.com/경로) |
| 후행 슬래시 | 사이트 규칙과 일치 (혼합된 후행 슬래시 없음) |
| 자기 참조 | 정식 URL이 페이지 자체를 가리킴 (의도적인 교차 도메인인 경우 제외) |
8단계: OG 메타 태그
| 검사 항목 | 합격 기준 |
|---|
| og:title | 존재하며, 제목 태그와 일치하거나 보완함 |
| og:description | 존재하며, 150-160자, 소셜 공유에 매력적임 |
| og:image | 존재하며, 최소 1200x630 픽셀, 절대 URL |
| og:type | 블로그 포스트의 경우 "article"로 설정 |
| og:url | 존재하며, 정식 URL과 일치 |
| og:site_name | 존재하며, 사이트/브랜드 이름과 일치 |
9단계: Twitter 카드
| 검사 항목 | 합격 기준 |
|---|
| twitter:card | 블로그 포스트의 경우 "summary_large_image"로 설정 |
| twitter:title | 존재하며, 70자 미만 |
| twitter:description | 존재하며, 200자 미만 |
| twitter:image | 존재하며, og:image와 같거나 유사 |
| twitter:site | 사이트에 Twitter/X 계정이 있는 경우 존재 |
10단계: URL 구조
| 검사 항목 | 합격 기준 |
|---|
| 길이 | 짧음 - 경로 부분이 75자 미만 |
| 키워드 포함 | URL 슬러그에 기본 키워드 또는 유사 변형 포함 |
| 날짜 없음 | URL에 /2025/ 또는 /2026/ 날짜 세그먼트 포함 안 됨 |
| 특수 문자 없음 | 소문자, 숫자, 하이픈만 사용 |
| 소문자 | 전체 URL 경로가 소문자 |
| 불용어 없음 | 슬러그에서 "the", "a", "and", "of" 최소 사용 |
| 파일 확장자 없음 | URL에 .html 또는 .php 없음 (클린 URL) |
11단계: 보고서 생성
다음 형식의 포괄적인 SEO 검증 보고서를 출력합니다.
## SEO 검증 보고서: [제목]
**파일**: [경로 또는 URL]
**날짜**: [검사 날짜]
**전체**: [X/Y 검사 통과] - [통과/개선 필요/실패]
### 결과
| # | 검사 항목 | 상태 | 세부 정보 | 수정 방안 |
|---|-------|--------|---------|-----|
| 1 | 제목 길이 | 통과 | 52자 | - |
| 2 | 제목 키워드 | 통과 | "키워드"가 앞부분에 위치 | - |
| 3 | 제목 파워 워드 | 실패 | 파워 워드 없음 | "가이드", "필수", 또는 "완벽한" 추가 |
| 4 | 메타 설명 길이 | 통과 | 155자 | - |
| 5 | 메타 설명 통계 | 실패 | 숫자 없음 | 포스트의 주요 통계 추가 |
| ... | ... | ... | ... | ... |
### 요약
**통과**: [N]개 검사
**실패**: [N]개 검사
### 우선 수정 사항
1. [가장 영향력 있는 수정 - 변경할 내용 및 위치]
2. [두 번째로 영향력 있는 수정]
3. [세 번째로 영향력 있는 수정]
### 참고 사항
- [전반적인 SEO 상태에 대한 관찰 사항]
- [체크리스트 외 개선 제안 사항]
상태 값:
- 통과 - 기준 충족
- 실패 - 기준 미충족, 수정 방안 제공
- 경고 - 기준을 부분적으로 충족하거나 경계 사례, 권장 사항 제공
- 해당 없음 - 적용 불가 (예: 사이트에 X 계정이 없는 경우 Twitter Card 태그 없음)
선택 사항: 실시간 성능 확인 (blog-google)
게시된 URL이 있고 blog-google 자격 증명을 사용할 수 있는 경우:
- 자격 증명 확인:
python3 skills/blog-google/scripts/run.py google_auth --check --json
- Tier 0+인 경우 PageSpeed 실행:
python3 skills/blog-google/scripts/run.py pagespeed_check <url> --json
- 보고서에 추가:
- Lighthouse 성능, 접근성, 모범 사례, SEO 점수
- CWV 필드 데이터 (LCP, INP, CLS)와 신호등 등급
- 예상 절감액이 포함된 상위 3개 기회
- 자격 증명을 사용할 수 없거나 URL이 게시되지 않은 경우 자동으로 건너뜁니다.