홈페이지 분석 리포트

프레서 - 블로그 · 2026-04-22 08:00

ⓘ 이 점수는 홈페이지 1장 기준입니다. 페이지별 점수 / 사이트 전체 집계는 사이트 리포트에서 보세요.

90
/ 100
이전 분석 대비 변화
prev analysis #174
점수 변화
0
신규 이슈
29
해결된 이슈
0
신규 referring domain
0
🔴 신규 critical: [duplicate] '미분류 - 프레서 - 블로그' 제목을 가진 페이지 2건 중복 (예: https://blog-presser.50.inter…
🔴 신규 critical: [a11y] 2개 input/select/textarea 에 label 없음 (WCAG 3.3.2, 1.3.1)
🔴 신규 critical: [duplicate] '게시글 - 프레서 - 블로그' 제목을 가진 페이지 5건 중복 (예: https://blog-presser.50.inter…
🔗 신규 broken: [EXT 404] https://blog.kernl.us/2017/10/introducing-wordpress-license-management-with-ker…
🔗 신규 broken: [EXT 500] https://vegibit.com/wordpress-theme-development-tutorial-step-by-step/
🔗 신규 broken: [EXT 500] https://vegibit.com/the-top-100-most-commonly-used-wordpress-functions/
💀 죽은 백링크: 3건
메타
90
성능
100
헤딩
100
이미지
78
링크
80
모바일
80
로봇
100
키워드
60
스키마
94
GEO
63
보안
72
접근성
81
중복콘텐츠
63
사이트맵
65
내부링크
98
깨진링크
98
백링크
47
평가 요약
전체 이슈
13
Critical
0
Warning
7
Info
6
메타 1건
헤딩 통과
이미지 2건
링크 1건
성능 통과
키워드 4건
모바일 2건
스키마 3건
로봇 통과
Canonical: 설정됨
JSON-LD: 1개
robots/sitemap: robots OK / sitemap OK
메타 태그
제목 (34)
프레서 - 블로그 - 프로그래밍 개발 노하우, 코드 예제 수록
설명 (22)
프로그래밍 개발 노하우, 코드 예제 수록
Canonical: https://blog-presser.50.internal.kr/
HTML lang: ko-KR
charset: UTF-8
오픈 그래프
og:title: 유니티 게임 개발 팀원 모집합니다
og:description: 프로그래밍 개발 노하우, 코드 예제 수록
og:image: https://blog-presser.50.internal.kr/wp-content/themes/documents/assets/images/la...
og:type: website
og:url: https://blog-presser.50.internal.kr/
Description이 너무 짧습니다 (22자, 권장: 70~160자)
성능
TTFB
240ms
FCP
668ms
DCL
1127ms
DOM Complete
1163ms
헤딩 구조
H1 (1)
  • 정라잇이 운영하는 블로그입니다
H2 (3)
  • 최신 뉴스
  • 카테고리
  • 서비스
이미지
전체: 7
alt 있음: 5
alt 없음: 2
비율: 71%
이미지의 71%만 alt 텍스트가 있습니다
1개 이미지의 alt 텍스트가 저품질 (파일명/placeholder: 링크)
링크
전체: 103
내부: 89
외부: 14
30개 링크에 앵커 텍스트가 없습니다 (29%)
키워드
단어 수: 261
리스트 (20, 7.66%) 존재하지 (20, 7.66%) 않습니다 (20, 7.66%) 워드프레스 (8, 3.07%) git (6, 2.30%) 프로그래밍 (4, 1.53%) 총정리 (4, 1.53%) 플러터 (4, 1.53%) 블로그 (3, 1.15%) 설치 (3, 1.15%) 객체 (3, 1.15%) 지향 (3, 1.15%) 서버 (2, 0.77%) 파일 (2, 0.77%) 함수 (2, 0.77%)
콘텐츠가 261단어로 적습니다 (권장: 300+ 단어)
주요 키워드 '리스트'가 Title에 포함되지 않았습니다
주요 키워드 '리스트'가 Description에 포함되지 않았습니다
키워드 밀도가 높은 단어: 리스트, 존재하지, 않습니다 (5% 초과)
모바일
뷰포트: width=device-width, initial-scale=1
가로 스크롤: 없음
61개 요소의 터치 영역이 44px 미만입니다
1개 요소의 폰트 크기가 작습니다
스키마.org (JSON-LD)
JSON-LD 블록: 1
@type 감지: 있음
유형: Person, WebSite, CollectionPage
원본 JSON-LD #1
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Person",
            "@id": "https://blog-presser.50.internal.kr/#person",
            "name": "프레서 - 블로그"
        },
        {
            "@type": "WebSite",
            "@id": "https://blog-presser.50.internal.kr/#website",
            "url": "https://blog-presser.50.internal.kr",
            "name": "프레서 - 블로그",
            "publisher": {
                "@id": "https://blog-presser.50.internal.kr/#person"
            },
            "inLanguage": "ko-KR",
            "potentialAction": {
                "@type": "SearchAction",
                "target": "https://blog-presser.50.internal.kr/?s={search_term_string}",
                "query-input": "required name=search_term_string"
            }
        },
        {
            "@type": "CollectionPage",
            "@id": "https://blog-presser.50.internal.kr/#webpage",
            "url": "https://blog-presser.50.internal.kr/",
            "name": "프레서 - 블로그 - 프로그래밍 개발 노하우, 코드 예제 수록",
            "about": {
                "@id": "https://blog-presser.50.internal.kr/#person"
            },
            "isPartOf": {
                "@id": "https://blog-presser.50.internal.kr/#website"
            },
            "inLanguage": "ko-KR"
        }
    ]
}
JSON-LD Person 권장 필드 'url' 누락
JSON-LD Person 권장 필드 'image' 누락
JSON-LD Person 권장 필드 'jobTitle' 누락
robots 및 사이트맵
robots.txt: 발견됨
sitemap.xml: 발견됨
보안 헤더
72
HTTPS
HSTS
CSP
nosniff
X-Frame
Referrer-Policy
Permissions-Policy
쿠키 3개 — Secure 없음: 0, HttpOnly 없음: 0, SameSite 없음: 3
Strict-Transport-Security (HSTS) 헤더 없음
Content-Security-Policy 없음 — XSS 방어 약화
X-Content-Type-Options: nosniff 미설정
X-Frame-Options (DENY/SAMEORIGIN) 또는 CSP frame-ancestors 미설정 — clickjacking
Referrer-Policy 헤더 없음
Permissions-Policy 헤더 없음 — browser feature 기본 정책 노출
SameSite 속성 없는 쿠키 3개 — CSRF 취약
외부 리소스 1개 중 SRI(integrity=) 없음: script 1, stylesheet 0
접근성 (WCAG 2)
81
레이블 없는 input: 2
이름 없는 button: 0
Skip link: 없음
Heading 계층 skip: 0
Alt 누락 이미지: 0
html[lang]: ko-KR
2개 input/select/textarea 에 label 없음 (WCAG 3.3.2, 1.3.1)
"본문으로 건너뛰기" 링크 없음 — 키보드 사용자 내비게이션 비효율
색상 대비 4.5:1 미달 21/80 (26%, WCAG 1.4.3) 예: a(1.5:1), a(1.5:1), a(1.5:1)
중복 콘텐츠
63
크롤 페이지: 52
중복 title 그룹: 4
중복 desc 그룹: 1
리다이렉트 체인 2+: 3
'게시글 - 프레서 - 블로그' 제목을 가진 페이지 5건 중복 (예: https://blog-presser.50.internal.kr/contents/)
'즐겨찾기 - 프레서 - 블로그' 제목을 가진 페이지 2건 중복 (예: https://blog-presser.50.internal.kr/bookmark/)
'미분류 - 프레서 - 블로그' 제목을 가진 페이지 2건 중복 (예: https://blog-presser.50.internal.kr/category/%eb%af%b8-%eb%b6%84%eb%a5%98/)
'알림판 ‹ 프레서 - 블로그 — 워드프레스' 제목을 가진 페이지 3건 중복 (예: https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=88b9ef9a84)
동일 meta description 49건 (예: "프로그래밍 개발 노하우, 코드 예제 수록...")
3 페이지가 리다이렉트 2+ hops (예: 2 hops, https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=88b9ef9a84)
사이트맵 ↔ 크롤 diff
65
sitemap URL: 76
크롤 URL: 52
Orphan: 38
sitemap 누락: 12
sitemap 에만 있고 크롤 링크로 도달 못한 orphan 페이지 38건 (예: https://blog-presser.50.internal.kr/%ec%9d%b4%eb%a1%a0-%eb%8b%a8%ec%9c%84-%ed%86%b5%ed%95%a9-%ec%9d%b8%ec%88%98-%ed%85%8c%ec%8a%a4%ed%8a%b8 | https://blog-presser.50.internal.kr/%ec%9a%b0%eb%b6%84%ed%88%ac-20-04-%ec%84%9c%eb%b2%84-npm-%ec%84%b8%ed%8c%85%ed%95%98%ea%b8%b0 | https://blog-presser.50.internal.kr/%ec%9a%a9%ec%96%b4-%ea%b9%83-%ec%84%9c%eb%b8%8c%eb%aa%a8%eb%93%88-git-submodule)
크롤됐지만 sitemap 에 없는 페이지 12건 (예: https://blog-presser.50.internal.kr/category/programming | https://blog-presser.50.internal.kr/category/wp-blog | https://blog-presser.50.internal.kr/category/wp-coding/wp-file)
내부 링크 그래프 (PageRank / orphan)
98
페이지: 52
Orphan: 2
Dead-end: 0
평균 inbound: 30.52
평균 outbound: 30.52
nofollow 내부: 49
Top PageRank
https://blog-presser.50.internal.kr/
pr 0.04223 · in 52 · out 43
https://blog-presser.50.internal.kr/contents/
pr 0.02819 · in 49 · out 42
https://blog-presser.50.internal.kr/category/programming/
pr 0.02819 · in 49 · out 36
https://blog-presser.50.internal.kr/category/programming/server/
pr 0.02819 · in 49 · out 32
https://blog-presser.50.internal.kr/category/wp-blog/
pr 0.02819 · in 49 · out 31
https://blog-presser.50.internal.kr/category/wp-coding/wp-file/
pr 0.02819 · in 49 · out 31
https://blog-presser.50.internal.kr/category/wp-coding/wp-func/
pr 0.02819 · in 49 · out 31
https://blog-presser.50.internal.kr/category/wp-coding/wp-shortcode/
pr 0.02819 · in 49 · out 31
https://blog-presser.50.internal.kr/bookmark/
pr 0.02819 · in 49 · out 31
https://blog-presser.50.internal.kr/category/programming/csharp/
pr 0.02819 · in 49 · out 31
Orphan 페이지 (2)
https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=88b9ef9a84
d1
https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=bb1dbe342b
d1
깨진 링크 (Broken Link Audit)
98
총 링크: 4291
검증됨: 2017
미검증: 2274
내부 깨짐: 0
외부 깨짐: 21
샘플
EXT https://blog.kernl.us/2017/10/introducing-wordpress-license-management-with-kernl/
404
EXT https://vegibit.com/wordpress-theme-development-tutorial-step-by-step/
500
EXT https://vegibit.com/the-top-100-most-commonly-used-wordpress-functions/
500
EXT https://rading.kr/wp-blog/3695
err
EXT https://chakra-ui.com/getting-started
404
EXT https://cargo.site/Templates
404
EXT https://medium.com/
403
EXT http://uidesignguides.com/screen-size-break-point/
err
EXT https://openbase.com/categories/js
err
EXT https://www.thiscodeworks.com/
503
EXT https://www.thiscodeworks.com/snippets
503
EXT https://www.babang9.com/259?category=582083
err
EXT https://www.privacy.go.kr/a3sc/per/inf/perInfStep01.do
404
EXT https://rading.kr/programming/program/3668/
err
EXT https://www.tagsfinder.com/ko-kr/
403
메뉴 트리 / 네비게이션 (Google sitelinks 적합도)
공통 내부 링크 / breadcrumb / 사이트 구조 분석
50
크롤 페이지: 52
공통 메뉴: 31
depth≤2 도달: 100%
BreadcrumbList:
SiteNavSchema:
감지된 공통 메뉴 (coverage 내림차순)
프레서 - 블로그 https://blog-presser.50.internal.kr/
100% · 52페이지
블로그 https://blog-presser.50.internal.kr/contents/
94% · 49페이지
프로그래밍 https://blog-presser.50.internal.kr/category/programming/
94% · 49페이지
서버 https://blog-presser.50.internal.kr/category/programming/server/
94% · 49페이지
워드프레스 https://blog-presser.50.internal.kr/category/wp-blog/
94% · 49페이지
워드프레스 파일 https://blog-presser.50.internal.kr/category/wp-coding/wp-file/
94% · 49페이지
함수 https://blog-presser.50.internal.kr/category/wp-coding/wp-func/
94% · 49페이지
워드프레스 짧은코드 https://blog-presser.50.internal.kr/category/wp-coding/wp-shortcode/
94% · 49페이지
즐겨찾기 https://blog-presser.50.internal.kr/bookmark/
94% · 49페이지
C# https://blog-presser.50.internal.kr/category/programming/csharp/
94% · 49페이지
공통 메뉴가 31개로 너무 많음 (권장 3~10개)
Backlinks (외부 인바운드 링크)
47
총 백링크: 7
Referring 도메인: 7
Dofollow: 85.7%
Alive ratio: 25%
Alive: 1
Dead: 3
미검증: 3
최근 7일: 7
최근 30일: 7
소스: referer:3 ahrefs:4
Top Referring Domains
news.naver.com
1개 · dofollow 1
velog.io
1개 · dofollow 1
news.example.kr
1개 · dofollow 1
spam.badsite.com
1개 · dofollow 0
dev.to
1개 · dofollow 1
dev-forum.io
1개 · dofollow 1
techblog.example.com
1개 · dofollow 1
최근 발견
https://news.example.kr/article/123
ahrefs · 2026-04-19 19:38
anchor: "블로그 프레서"
https://spam.badsite.com/x
ahrefs · 2026-04-19 19:38
anchor: "link"
https://dev-forum.io/thread/456
ahrefs · 2026-04-19 19:38
anchor: "관련 글"
https://techblog.example.com/seo-tools
ahrefs · 2026-04-19 19:38
anchor: "Prelik SEO"
https://dev.to/someone/writing-seo-tools
referer · 2026-04-19 16:05
https://velog.io/@someone/post-title
referer · 2026-04-19 15:10
https://news.naver.com/article/999
referer · 2026-04-19 14:22
GEO (생성형 검색 최적화)
63
direct_answer
100
qa_structure
50
schema_strength
40
eat_signals
45
citations
100
content_depth
55
keyword_alignment
75
quotations
50
statistics
70
lists
80
FAQPage / HowTo JSON-LD 없음 — AI 검색(ChatGPT/AI Overview)이 Q&A 로 인용하기 어려움
Article/BlogPosting schema 없음 — author/date 명시로 E-E-A-T 강화 권장
질문형 H2/H3 (예: "~인가?", "왜 ~할까?") 없음 — 생성형 검색 인용에 불리
본문이 261단어로 얕음 — AI 인용 블록 추출에 400+ 단어 권장
상위 키워드가 Title/Description 에 일관되게 반영되지 않음 — AI 요약 시 주제 일치도 하락
인용구(blockquote / "…") 거의 없음 — Aggarwal 연구 기준 인용구 추가 시 LLM 가시성 상승
통계·수치 문장 부족 — 숫자 기반 근거가 AI 인용 확률을 높임 (Aggarwal 2024)
추가 권장 체크 로직 (예시)

아래 항목은 데이터 연동 전에도 설계 가능한 규칙 예시입니다. 실제 운영에서는 GSC/백링크 도구 연동 후 점수화하세요.

1) 백링크 품질 점수 (오프페이지)
backlink_score = 0.35*ref_domain_growth + 0.30*high_quality_domain_ratio + 0.20*anchor_naturalness - 0.15*spam_link_ratio
권장 임계값: high_quality_domain_ratio >= 0.6, spam_link_ratio <= 0.1
2) URL-H1 정합성 점수 (완전 일치 필수 아님)
url_h1_alignment = semantic_similarity(url_slug, h1_text)
if alignment < 0.45: warning
if alignment < 0.30: critical
설명: 문자열 완전 동일보다 주제 일치(semantic) 우선
3) 제목-본문 일치성
title_body_match = 100
if top_keyword_not_in_title: -25
if top_keyword_not_in_description: -20
if intro_missing_core_topic: -15
if final < 70: 개선 필요
4) 내부링크 분배
internal_link_health = 100
if orphan_pages > 0: -min(40, orphan_pages*5)
if core_pages_inlinks_avg < 3: -20
if anchor_empty_ratio > 0.1: -15
5) CTR 개선 우선순위 (성과 기반)
priority = impressions * max(0, expected_ctr - current_ctr)
상위 priority 페이지부터 title/meta rewrite -> 14/28일 효과 비교
개선 팁: "URL이 H1과 완전 동일" 같은 단일 규칙보다, 정합성(semantic) + 검색 성과(CTR/노출) + 기술 신호(canonical/schema)를 함께 보는 방식이 더 안정적입니다.
원본 분석 데이터 (저장 JSON)
meta_analysis
{
    "score": 90,
    "title": {
        "content": "프레서 - 블로그 - 프로그래밍 개발 노하우, 코드 예제 수록",
        "length": 34
    },
    "description": {
        "content": "프로그래밍 개발 노하우, 코드 예제 수록",
        "length": 22
    },
    "og": {
        "title": "유니티 게임 개발 팀원 모집합니다",
        "description": "프로그래밍 개발 노하우, 코드 예제 수록",
        "image": "https://blog-presser.50.internal.kr/wp-content/themes/documents/assets/images/landing_thumbnail.png",
        "type": "website",
        "url": "https://blog-presser.50.internal.kr/"
    },
    "canonical": "https://blog-presser.50.internal.kr/",
    "lang": "ko-KR",
    "charset": "UTF-8",
    "hreflangs": [],
    "issues": [
        {
            "severity": "warning",
            "message": "Description이 너무 짧습니다 (22자, 권장: 70~160자)"
        }
    ]
}
heading_analysis
{
    "score": 100,
    "h1_count": 1,
    "structure": {
        "h1": {
            "count": 1,
            "items": [
                "정라잇이 운영하는 블로그입니다"
            ]
        },
        "h2": {
            "count": 3,
            "items": [
                "최신 뉴스",
                "카테고리",
                "서비스"
            ]
        }
    },
    "issues": []
}
image_analysis
{
    "score": 78,
    "total": 7,
    "with_alt": 5,
    "without_alt": 2,
    "alt_ratio": 71,
    "low_quality_alt": 1,
    "missing_alt_images": [
        "https://secure.gravatar.com/avatar/b19107bdd63705fba0c165c6f6ff743de75616a129c4428d56d3dea79d535735?s=26&d=mm&r=g",
        "https://secure.gravatar.com/avatar/b19107bdd63705fba0c165c6f6ff743de75616a129c4428d56d3dea79d535735?s=64&d=mm&r=g"
    ],
    "issues": [
        {
            "severity": "warning",
            "message": "이미지의 71%만 alt 텍스트가 있습니다"
        },
        {
            "severity": "warning",
            "message": "1개 이미지의 alt 텍스트가 저품질 (파일명/placeholder: 링크)"
        }
    ]
}
link_analysis
{
    "score": 80,
    "total": 103,
    "internal": 89,
    "external": 14,
    "no_text": 30,
    "generic_text": 0,
    "non_crawlable": 0,
    "issues": [
        {
            "severity": "warning",
            "message": "30개 링크에 앵커 텍스트가 없습니다 (29%)"
        }
    ]
}
performance_analysis
{
    "score": 100,
    "metrics": {
        "lcp": 1048,
        "inp": 152,
        "cls": 0.000100546314883134,
        "ttfb": 240,
        "fcp": 668,
        "dom_content_loaded": 1127,
        "dom_complete": 1163,
        "load_event": 1165,
        "transfer_size": 18353
    },
    "issues": []
}
keyword_analysis
{
    "score": 60,
    "word_count": 261,
    "top_keywords": [
        {
            "word": "리스트",
            "count": 20,
            "density": "7.66",
            "variants": {
                "리스트가": 20
            }
        },
        {
            "word": "존재하지",
            "count": 20,
            "density": "7.66",
            "variants": {
                "존재하지": 20
            }
        },
        {
            "word": "않습니다",
            "count": 20,
            "density": "7.66",
            "variants": {
                "않습니다": 20
            }
        },
        {
            "word": "워드프레스",
            "count": 8,
            "density": "3.07",
            "variants": {
                "워드프레스": 8
            }
        },
        {
            "word": "git",
            "count": 6,
            "density": "2.30",
            "variants": {
                "git": 6
            }
        },
        {
            "word": "프로그래밍",
            "count": 4,
            "density": "1.53",
            "variants": {
                "프로그래밍": 4
            }
        },
        {
            "word": "총정리",
            "count": 4,
            "density": "1.53",
            "variants": {
                "총정리": 4
            }
        },
        {
            "word": "플러터",
            "count": 4,
            "density": "1.53",
            "variants": {
                "플러터": 4
            }
        },
        {
            "word": "블로그",
            "count": 3,
            "density": "1.15",
            "variants": {
                "블로그": 3
            }
        },
        {
            "word": "설치",
            "count": 3,
            "density": "1.15",
            "variants": {
                "설치": 3
            }
        },
        {
            "word": "객체",
            "count": 3,
            "density": "1.15",
            "variants": {
                "객체": 3
            }
        },
        {
            "word": "지향",
            "count": 3,
            "density": "1.15",
            "variants": {
                "지향": 3
            }
        },
        {
            "word": "서버",
            "count": 2,
            "density": "0.77",
            "variants": {
                "서버": 2
            }
        },
        {
            "word": "파일",
            "count": 2,
            "density": "0.77",
            "variants": {
                "파일": 2
            }
        },
        {
            "word": "함수",
            "count": 2,
            "density": "0.77",
            "variants": {
                "함수": 2
            }
        },
        {
            "word": "즐겨찾기",
            "count": 2,
            "density": "0.77",
            "variants": {
                "즐겨찾기": 2
            }
        },
        {
            "word": "서비스",
            "count": 2,
            "density": "0.77",
            "variants": {
                "서비스": 2
            }
        },
        {
            "word": "게임",
            "count": 2,
            "density": "0.77",
            "variants": {
                "게임": 2
            }
        },
        {
            "word": "개발",
            "count": 2,
            "density": "0.77",
            "variants": {
                "개발": 2
            }
        },
        {
            "word": "현재",
            "count": 2,
            "density": "0.77",
            "variants": {
                "현재": 2
            }
        }
    ],
    "issues": [
        {
            "severity": "warning",
            "message": "콘텐츠가 261단어로 적습니다 (권장: 300+ 단어)"
        },
        {
            "severity": "info",
            "message": "주요 키워드 '리스트'가 Title에 포함되지 않았습니다"
        },
        {
            "severity": "info",
            "message": "주요 키워드 '리스트'가 Description에 포함되지 않았습니다"
        },
        {
            "severity": "warning",
            "message": "키워드 밀도가 높은 단어: 리스트, 존재하지, 않습니다 (5% 초과)"
        }
    ]
}
geo_analysis
{
    "score": 63,
    "sub_scores": {
        "direct_answer": 100,
        "qa_structure": 50,
        "schema_strength": 40,
        "eat_signals": 45,
        "citations": 100,
        "content_depth": 55,
        "keyword_alignment": 75,
        "quotations": 50,
        "statistics": 70,
        "lists": 80
    },
    "signals": {
        "h1_count": 1,
        "h2_count": 3,
        "h3_count": 0,
        "question_headings": 0,
        "has_faq_page": false,
        "has_article": false,
        "has_how_to": false,
        "has_breadcrumb": false,
        "external_links": 14,
        "word_count": 261,
        "blockquotes": 0,
        "quote_sentences": 0,
        "stat_sentences": 1,
        "percent_occurrences": 0,
        "ul_count": 15,
        "ol_count": 0,
        "table_count": 0,
        "li_total": 51,
        "tldr_markers": true,
        "has_direct_answer": true
    },
    "improvements": [
        "FAQPage JSON-LD 추가 — 핵심 Q&A 3-5개를 mainEntity.Question 으로 마크업하면 AI 인용 확률 상승",
        "H2/H3 을 \"~는 무엇인가?\", \"왜 ~할까?\" 같은 질문 형태로 재구성 → 직접 답변 추출에 유리",
        "각 섹션 앞에 1-2 문장 요약(TL;DR) 배치 + 근거 데이터/예시 추가로 400+ 단어 확보",
        "Article schema 의 author(Person) / datePublished / dateModified 명시 — E-E-A-T 신호"
    ],
    "issues": [
        {
            "severity": "warning",
            "message": "FAQPage / HowTo JSON-LD 없음 — AI 검색(ChatGPT/AI Overview)이 Q&A 로 인용하기 어려움"
        },
        {
            "severity": "warning",
            "message": "Article/BlogPosting schema 없음 — author/date 명시로 E-E-A-T 강화 권장"
        },
        {
            "severity": "info",
            "message": "질문형 H2/H3 (예: \"~인가?\", \"왜 ~할까?\") 없음 — 생성형 검색 인용에 불리"
        },
        {
            "severity": "warning",
            "message": "본문이 261단어로 얕음 — AI 인용 블록 추출에 400+ 단어 권장"
        },
        {
            "severity": "info",
            "message": "상위 키워드가 Title/Description 에 일관되게 반영되지 않음 — AI 요약 시 주제 일치도 하락"
        },
        {
            "severity": "info",
            "message": "인용구(blockquote / \"…\") 거의 없음 — Aggarwal 연구 기준 인용구 추가 시 LLM 가시성 상승"
        },
        {
            "severity": "warning",
            "message": "통계·수치 문장 부족 — 숫자 기반 근거가 AI 인용 확률을 높임 (Aggarwal 2024)"
        }
    ]
}
security_headers_analysis
{
    "score": 72,
    "is_https": true,
    "has_hsts": false,
    "has_csp": false,
    "has_nosniff": false,
    "has_xfo": false,
    "has_referrer_policy": false,
    "has_permissions_policy": false,
    "cookies": {
        "total": 3,
        "insecure_count": 0,
        "no_httponly_count": 0,
        "no_samesite_count": 3,
        "insecure_samples": []
    },
    "subresource": {
        "scripts_without_integrity": 1,
        "links_without_integrity": 0,
        "total_external": 1
    },
    "headers_sample": [],
    "issues": [
        {
            "severity": "warning",
            "message": "Strict-Transport-Security (HSTS) 헤더 없음"
        },
        {
            "severity": "info",
            "message": "Content-Security-Policy 없음 — XSS 방어 약화"
        },
        {
            "severity": "info",
            "message": "X-Content-Type-Options: nosniff 미설정"
        },
        {
            "severity": "info",
            "message": "X-Frame-Options (DENY/SAMEORIGIN) 또는 CSP frame-ancestors 미설정 — clickjacking"
        },
        {
            "severity": "info",
            "message": "Referrer-Policy 헤더 없음"
        },
        {
            "severity": "info",
            "message": "Permissions-Policy 헤더 없음 — browser feature 기본 정책 노출"
        },
        {
            "severity": "info",
            "message": "SameSite 속성 없는 쿠키 3개 — CSRF 취약"
        },
        {
            "severity": "info",
            "message": "외부 리소스 1개 중 SRI(integrity=) 없음: script 1, stylesheet 0"
        }
    ]
}
accessibility_analysis
{
    "score": 81,
    "unlabeled_inputs": 2,
    "buttons_no_name": 0,
    "has_skip_link": false,
    "heading_skips": 0,
    "imgs_missing_alt": 0,
    "imgs_empty_alt": 2,
    "html_lang": "ko-KR",
    "total_forms": 2,
    "low_contrast_count": 21,
    "contrast_sampled": 80,
    "contrast_samples": [
        {
            "tag": "a",
            "text": "리스트가 존재하지 않습니다",
            "ratio": 1.5
        },
        {
            "tag": "a",
            "text": "리스트가 존재하지 않습니다",
            "ratio": 1.5
        },
        {
            "tag": "a",
            "text": "리스트가 존재하지 않습니다",
            "ratio": 1.5
        }
    ],
    "issues": [
        {
            "severity": "critical",
            "message": "2개 input/select/textarea 에 label 없음 (WCAG 3.3.2, 1.3.1)"
        },
        {
            "severity": "info",
            "message": "\"본문으로 건너뛰기\" 링크 없음 — 키보드 사용자 내비게이션 비효율"
        },
        {
            "severity": "info",
            "message": "색상 대비 4.5:1 미달 21/80 (26%, WCAG 1.4.3) 예: a(1.5:1), a(1.5:1), a(1.5:1)"
        }
    ]
}
duplicate_content_analysis
{
    "score": 63,
    "total_pages": 52,
    "duplicate_groups": 4,
    "duplicate_pages": 12,
    "empty_title_pages": 0,
    "thin_title_pages": 0,
    "description_duplicate_groups": 1,
    "description_missing_pages": 3,
    "redirected_pages": 5,
    "long_chain_pages": 3,
    "issues": [
        {
            "severity": "critical",
            "message": "'게시글 - 프레서 - 블로그' 제목을 가진 페이지 5건 중복 (예: https://blog-presser.50.internal.kr/contents/)"
        },
        {
            "severity": "critical",
            "message": "'즐겨찾기 - 프레서 - 블로그' 제목을 가진 페이지 2건 중복 (예: https://blog-presser.50.internal.kr/bookmark/)"
        },
        {
            "severity": "critical",
            "message": "'미분류 - 프레서 - 블로그' 제목을 가진 페이지 2건 중복 (예: https://blog-presser.50.internal.kr/category/%eb%af%b8-%eb%b6%84%eb%a5%98/)"
        },
        {
            "severity": "critical",
            "message": "'알림판 ‹ 프레서 - 블로그 — 워드프레스' 제목을 가진 페이지 3건 중복 (예: https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=88b9ef9a84)"
        },
        {
            "severity": "warning",
            "message": "동일 meta description 49건 (예: \"프로그래밍 개발 노하우, 코드 예제 수록...\")"
        },
        {
            "severity": "warning",
            "message": "3 페이지가 리다이렉트 2+ hops (예: 2 hops, https://blog-presser.50.internal.kr/login/?action=logout&_wpnonce=88b9ef9a84)"
        }
    ]
}
sitemap_orphan_analysis
{
    "score": 65,
    "sitemap_count": 76,
    "crawled_count": 52,
    "orphan_count": 38,
    "missing_from_sitemap_count": 12,
    "orphan_samples": [
        "https://blog-presser.50.internal.kr/%ec%9d%b4%eb%a1%a0-%eb%8b%a8%ec%9c%84-%ed%86%b5%ed%95%a9-%ec%9d%b8%ec%88%98-%ed%85%8c%ec%8a%a4%ed%8a%b8",
        "https://blog-presser.50.internal.kr/%ec%9a%b0%eb%b6%84%ed%88%ac-20-04-%ec%84%9c%eb%b2%84-npm-%ec%84%b8%ed%8c%85%ed%95%98%ea%b8%b0",
        "https://blog-presser.50.internal.kr/%ec%9a%a9%ec%96%b4-%ea%b9%83-%ec%84%9c%eb%b8%8c%eb%aa%a8%eb%93%88-git-submodule",
        "https://blog-presser.50.internal.kr/%ec%9c%88%eb%8f%84%ec%9a%b0wsl-%ec%9a%b0%eb%b6%84%ed%88%ac-%eb%9d%bc%eb%9d%bc%eb%b2%a8-sail-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0-24%eb%85%84-03%ec%9b%94-%ec%b5%9c%ec%8b%a0%ed%8c%90",
        "https://blog-presser.50.internal.kr/%eb%a7%a5%ec%97%90%ec%84%9c-%eb%9d%bc%eb%9d%bc%eb%b2%a8-%ec%84%b8%ec%9d%bc-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0-2024-%ec%99%84%ec%a0%84%ed%8c%90",
        "https://blog-presser.50.internal.kr/%ec%84%9c%ed%82%b7-%eb%b8%8c%eb%a0%88%ec%9d%b4%ec%bb%a4-%ed%8c%a8%ed%84%b4-circuit-braker-pattern-%ec%9a%94%ec%95%bd",
        "https://blog-presser.50.internal.kr/%eb%a9%94%ec%9d%b8-%eb%a0%88%ed%8f%ac%ec%97%90%ec%84%9c-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%a7%8c%eb%93%a4%ea%b3%a0-%ed%8f%ac%ed%81%ac-%eb%a0%88%ed%8f%ac%ec%97%90%ec%84%9c-pr-%ed%95%98%ea%b8%b0",
        "https://blog-presser.50.internal.kr/%eb%9d%bc%eb%9d%bc%eb%b2%a8-%ec%84%b8%ec%9d%bc-db-%ec%a0%91%ec%86%8d-%ec%97%90%eb%9f%ac-%ed%95%b4%ea%b2%b0%eb%b0%a9%eb%b2%95",
        "https://blog-presser.50.internal.kr/wsl-%ec%9a%b0%eb%b6%84%ed%88%ac-%eb%8f%84%ec%bb%a4-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0-%ec%9c%88%eb%8f%84%ec%9a%b0-11",
        "https://blog-presser.50.internal.kr/%eb%9d%bc%eb%9d%bc%eb%b2%a8-%ec%a0%9c%ed%8a%b8%ec%8a%a4%ed%8a%b8%eb%a6%bc-2-sanctum-%eb%aa%a8%eb%b0%94%ec%9d%bc-%ed%86%a0%ed%81%b0"
    ],
    "issues": [
        {
            "severity": "warning",
            "message": "sitemap 에만 있고 크롤 링크로 도달 못한 orphan 페이지 38건 (예: https://blog-presser.50.internal.kr/%ec%9d%b4%eb%a1%a0-%eb%8b%a8%ec%9c%84-%ed%86%b5%ed%95%a9-%ec%9d%b8%ec%88%98-%ed%85%8c%ec%8a%a4%ed%8a%b8 | https://blog-presser.50.internal.kr/%ec%9a%b0%eb%b6%84%ed%88%ac-20-04-%ec%84%9c%eb%b2%84-npm-%ec%84%b8%ed%8c%85%ed%95%98%ea%b8%b0 | https://blog-presser.50.internal.kr/%ec%9a%a9%ec%96%b4-%ea%b9%83-%ec%84%9c%eb%b8%8c%eb%aa%a8%eb%93%88-git-submodule)"
        },
        {
            "severity": "info",
            "message": "크롤됐지만 sitemap 에 없는 페이지 12건 (예: https://blog-presser.50.internal.kr/category/programming | https://blog-presser.50.internal.kr/category/wp-blog | https://blog-presser.50.internal.kr/category/wp-coding/wp-file)"
        }
    ]
}
crux_field_data
null
mobile_analysis
{
    "score": 80,
    "viewport": "width=device-width, initial-scale=1",
    "has_horizontal_scroll": false,
    "small_touch_targets": 61,
    "small_fonts": 1,
    "issues": [
        {
            "severity": "warning",
            "message": "61개 요소의 터치 영역이 44px 미만입니다"
        },
        {
            "severity": "info",
            "message": "1개 요소의 폰트 크기가 작습니다"
        }
    ]
}
schema_analysis
{
    "score": 94,
    "count": 1,
    "types": [
        "Person",
        "WebSite",
        "CollectionPage"
    ],
    "schemas": [
        {
            "@context": "https://schema.org",
            "@graph": [
                {
                    "@type": "Person",
                    "@id": "https://blog-presser.50.internal.kr/#person",
                    "name": "프레서 - 블로그"
                },
                {
                    "@type": "WebSite",
                    "@id": "https://blog-presser.50.internal.kr/#website",
                    "url": "https://blog-presser.50.internal.kr",
                    "name": "프레서 - 블로그",
                    "publisher": {
                        "@id": "https://blog-presser.50.internal.kr/#person"
                    },
                    "inLanguage": "ko-KR",
                    "potentialAction": {
                        "@type": "SearchAction",
                        "target": "https://blog-presser.50.internal.kr/?s={search_term_string}",
                        "query-input": "required name=search_term_string"
                    }
                },
                {
                    "@type": "CollectionPage",
                    "@id": "https://blog-presser.50.internal.kr/#webpage",
                    "url": "https://blog-presser.50.internal.kr/",
                    "name": "프레서 - 블로그 - 프로그래밍 개발 노하우, 코드 예제 수록",
                    "about": {
                        "@id": "https://blog-presser.50.internal.kr/#person"
                    },
                    "isPartOf": {
                        "@id": "https://blog-presser.50.internal.kr/#website"
                    },
                    "inLanguage": "ko-KR"
                }
            ]
        }
    ],
    "issues": [
        {
            "severity": "info",
            "message": "JSON-LD Person 권장 필드 'url' 누락"
        },
        {
            "severity": "info",
            "message": "JSON-LD Person 권장 필드 'image' 누락"
        },
        {
            "severity": "info",
            "message": "JSON-LD Person 권장 필드 'jobTitle' 누락"
        }
    ]
}
robots_analysis
{
    "score": 100,
    "robots": {
        "exists": true,
        "blocks_all": false,
        "has_user_agent": true,
        "invalid_directives": [],
        "content": "User-agent: *\nDisallow: /wp-admin/\nAllow: /wp-admin/admin-ajax.php\n\nSitemap: https://blog-presser.50.internal.kr/sitemap_index.xml\n",
        "sitemap_urls": [
            "https://blog-presser.50.internal.kr/sitemap_index.xml"
        ]
    },
    "sitemap": {
        "exists": true,
        "url": "https://blog-presser.50.internal.kr/sitemap_index.xml",
        "type": "sitemapindex",
        "url_count": 0,
        "has_lastmod": true,
        "has_priority": false,
        "size": 705
    },
    "issues": []
}
integration_analysis
null