채점 기준
SEO 분석에 사용되는 채점 기준입니다. 각 카테고리는 100점 만점에서 조건별로 감점됩니다.
점수 가중치
메타 태그
20%
성능
20%
헤딩 구조
10%
이미지 대체텍스트
10%
링크
10%
모바일
10%
robots 및 사이트맵
10%
키워드
5%
스키마.org
5%
종합 점수 = Σ(카테고리 점수 × 가중치) / 총 가중치. 각 카테고리는 100점에서 시작하여 조건 위반 시 감점.
데이터 수집
1단계
데스크톱 뷰포트 (1920×1080)
— 메타, 헤딩, 이미지, 링크, 키워드, 스키마 데이터 추출
2단계
모바일 뷰포트 (375×812)
— 뷰포트 메타, 가로 스크롤, 터치 타겟, 폰트 크기 검사
3단계
성능 API
— Navigation Timing으로 TTFB, FCP, DCL, DOM Complete 측정
직접 요청
PHP HTTP 요청
— robots.txt, sitemap.xml 직접 요청 (Playwright 불필요)
메타 태그
20%
Analyzers/MetaAnalyzer.php
제목, 설명, OG 태그, 정규 URL, 언어 등 메타 태그 검사
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| 제목 | 없음 | -25 | |
| 제목 | 30자 미만 | -10 | |
| 제목 | 60자 초과 | -5 | |
| 설명 | 없음 | -25 | |
| 설명 | 70자 미만 | -10 | |
| 설명 | 160자 초과 | -5 | |
| OG 태그 | ogTitle/ogDescription/ogImage 누락 (각) | -5 | |
| 정규 URL | 없음 | -5 | |
| 언어 | html lang 속성 없음 | -5 |
성능
20%
Analyzers/PerformanceAnalyzer.php
TTFB, FCP, DOMContentLoaded, DOM 완료 등 로딩 성능 측정
데이터: Playwright 평가 (Performance API)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| TTFB | 800ms 초과 | -25 | |
| TTFB | 400ms 초과 | -10 | |
| FCP | 3000ms 초과 | -25 | |
| FCP | 1800ms 초과 | -10 | |
| DOMContentLoaded | 5000ms 초과 | -15 | |
| DOMContentLoaded | 3000ms 초과 | -5 | |
| DOM 완료 | 8000ms 초과 | -10 |
헤딩 구조
10%
Analyzers/HeadingAnalyzer.php
H1~H6 태그의 존재, 개수, 계층 구조 검증
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| H1 | 없음 | -30 | |
| H1 | 2개 이상 | -15 | |
| H2 | 없음 (H1 존재 시) | -10 | |
| 계층 구조 | 레벨 건너뜀 (예: H1→H3) | -10 |
이미지 대체텍스트
10%
Analyzers/ImageAnalyzer.php
이미지 alt 텍스트 존재 비율 검사
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| Alt 비율 | 50% 미만 | -40 | |
| Alt 비율 | 80% 미만 | -20 | |
| Alt 비율 | 100% 미만 | -10 |
링크
10%
Analyzers/LinkAnalyzer.php
내부/외부 링크 비율, 앵커 텍스트 존재 여부
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| 링크 수 | 링크 없음 | -20 | |
| 내부 링크 | 내부 링크 없음 | -15 | |
| 앵커 텍스트 | 앵커 텍스트 없는 링크 존재 (개당 -2, 최대 -20) | -2 | |
| 개수 | 200개 초과 | -5 |
모바일
10%
Analyzers/MobileAnalyzer.php
viewport, 가로 스크롤, 터치 타겟, 폰트 크기 검사
데이터: Playwright 평가 (모바일 375×812)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| 뷰포트 | meta viewport 없음 | -30 | |
| 뷰포트 | width=device-width 없음 | -15 | |
| 스크롤 | 가로 스크롤 발생 | -25 | |
| 터치 영역 | 44px 미만 요소 10개 초과 | -15 | |
| 터치 영역 | 44px 미만 요소 존재 | -5 | |
| 글자 크기 | 12px 미만 요소 10개 초과 | -15 | |
| 글자 크기 | 12px 미만 요소 존재 | -5 |
robots 및 사이트맵
10%
Analyzers/RobotsAnalyzer.php
robots.txt 존재 여부, 크롤러 차단 여부, sitemap.xml 검사
데이터: PHP HTTP 직접 요청
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| robots.txt | 없음 | -20 | |
| robots.txt | 모든 크롤러 차단 (Disallow: /) | -30 | |
| sitemap.xml | 없음 | -20 | |
| robots.txt | 사이트맵 지시문 없음 | -5 |
키워드
5%
Analyzers/KeywordAnalyzer.php
콘텐츠 단어 수, 상위 키워드 밀도, 제목/설명 포함 여부
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| 단어 수 | 300 단어 미만 | -20 | |
| 주요 키워드 | Title에 미포함 | -5 | |
| 주요 키워드 | Description에 미포함 | -5 | |
| 밀도 | 5% 초과 키워드 존재 | -10 |
스키마.org
5%
Analyzers/SchemaAnalyzer.php
JSON-LD 구조화 데이터 존재 여부 및 @type 검증
데이터: Playwright 평가 (데스크톱)
| 항목 | 조건 | 감점 | 심각도 |
|---|---|---|---|
| JSON-LD | 없음 | -40 | |
| @type | JSON-LD에 @type 미정의 | -20 |
범례
심각
경고
정보
감점은 누적 적용되며, 최저 점수는 0점입니다.