구조화 데이터 완벽 가이드 2026 - JSON-LD로 리치 결과 획득하기
Schema.org와 JSON-LD로 구글 리치 스니펫을 획득하는 방법. FAQ, How-to, Product 스키마 구현 가이드와 실전 예제.
Toolypet Team
Development Team
구조화 데이터 완벽 가이드 2026
검색 결과에서 별점, FAQ, 레시피 카드를 본 적 있나요? 그게 바로 **리치 결과(Rich Results)**입니다.
2026년 기준, 리치 결과가 있는 페이지는 CTR이 평균 58% 더 높습니다. 구조화 데이터로 여러분의 콘텐츠도 눈에 띄게 만들어보세요.
구조화 데이터란?
구조화 데이터는 검색엔진이 페이지 콘텐츠를 이해하도록 돕는 표준화된 형식입니다.
핵심 개념
| 용어 | 설명 |
|---|---|
| Schema.org | Google, Microsoft, Yahoo가 공동 개발한 어휘 |
| JSON-LD | JavaScript 기반 데이터 포맷 (Google 권장) |
| Rich Results | 구조화 데이터 기반 향상된 검색 결과 |
| Rich Snippet | 리치 결과의 구버전 명칭 |
왜 JSON-LD인가?
| 포맷 | 장점 | 단점 |
|---|---|---|
| JSON-LD | HTML과 분리, 유지보수 쉬움 | JavaScript 의존 |
| Microdata | HTML에 직접 삽입 | 코드 복잡 |
| RDFa | 유연함 | 학습 곡선 |
Google 공식 권장: JSON-LD
리치 결과 유형
Google이 지원하는 주요 유형
| 유형 | 표시 형태 | 사용 사례 |
|---|---|---|
| Article | 뉴스 카드 | 블로그, 뉴스 |
| FAQ | 질문/답변 펼침 | FAQ 페이지 |
| How-to | 단계별 가이드 | 튜토리얼 |
| Product | 가격, 재고, 별점 | 상품 페이지 |
| Review | 별점 표시 | 리뷰 콘텐츠 |
| Recipe | 조리시간, 칼로리 | 레시피 |
| Event | 날짜, 장소 | 이벤트 |
| LocalBusiness | 영업시간, 위치 | 로컬 비즈니스 |
| BreadcrumbList | 경로 표시 | 모든 페이지 |
JSON-LD 기본 구조
템플릿
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "스키마타입",
"속성1": "값1",
"속성2": "값2"
}
</script>
필수 요소
| 요소 | 설명 |
|---|---|
@context | 항상 "https://schema.org" |
@type | 스키마 유형 (Article, FAQ 등) |
| 필수 속성 | 유형별로 다름 |
실전 구현 예제
1. Article (블로그/뉴스)
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "구조화 데이터 완벽 가이드 2026",
"description": "JSON-LD로 리치 결과를 획득하는 방법",
"image": "https://example.com/article-image.jpg",
"author": {
"@type": "Person",
"name": "Sam Rank",
"url": "https://example.com/author/sam-rank"
},
"publisher": {
"@type": "Organization",
"name": "Toolypet",
"logo": {
"@type": "ImageObject",
"url": "https://toolypet.com/logo.png"
}
},
"datePublished": "2026-02-22",
"dateModified": "2026-02-22"
}
2. FAQ (자주 묻는 질문)
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "구조화 데이터란 무엇인가요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "구조화 데이터는 검색엔진이 페이지 콘텐츠를 이해하도록 돕는 표준화된 형식입니다."
}
},
{
"@type": "Question",
"name": "JSON-LD를 어디에 넣어야 하나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "HTML의 <head> 또는 <body> 내 어디든 가능하지만, <head>에 넣는 것이 권장됩니다."
}
}
]
}
3. How-to (단계별 가이드)
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "JSON-LD 구조화 데이터 추가하기",
"description": "웹페이지에 JSON-LD를 추가하는 방법",
"totalTime": "PT10M",
"step": [
{
"@type": "HowToStep",
"name": "스키마 유형 선택",
"text": "페이지 콘텐츠에 맞는 Schema.org 유형을 선택합니다."
},
{
"@type": "HowToStep",
"name": "JSON-LD 코드 작성",
"text": "선택한 스키마에 맞게 JSON-LD 코드를 작성합니다."
},
{
"@type": "HowToStep",
"name": "HTML에 삽입",
"text": "<script type='application/ld+json'> 태그로 코드를 감싸 HTML에 삽입합니다."
},
{
"@type": "HowToStep",
"name": "테스트",
"text": "Google Rich Results Test로 유효성을 검사합니다."
}
]
}
4. Product (상품)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "SEO 가이드북 2026",
"description": "최신 SEO 전략을 담은 실전 가이드",
"image": "https://example.com/product.jpg",
"brand": {
"@type": "Brand",
"name": "Toolypet"
},
"offers": {
"@type": "Offer",
"price": "29900",
"priceCurrency": "KRW",
"availability": "https://schema.org/InStock",
"url": "https://example.com/product"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "124"
}
}
5. BreadcrumbList (빵부스러기)
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "홈",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://example.com/seo"
},
{
"@type": "ListItem",
"position": 3,
"name": "구조화 데이터 가이드",
"item": "https://example.com/seo/structured-data"
}
]
}
6. LocalBusiness (로컬 비즈니스)
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "카페 모닝글로리",
"image": "https://example.com/cafe.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "강남대로 123",
"addressLocality": "서울",
"addressRegion": "강남구",
"postalCode": "06000",
"addressCountry": "KR"
},
"telephone": "+82-2-1234-5678",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "22:00"
}
],
"priceRange": "$$"
}
프레임워크별 구현
Next.js
// app/layout.tsx 또는 pages/_document.tsx
import Script from 'next/script';
export default function Layout({ children }) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Toolypet",
"url": "https://toolypet.com"
};
return (
<html>
<head>
<Script
id="json-ld"
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</head>
<body>{children}</body>
</html>
);
}
React (Helmet)
import { Helmet } from 'react-helmet';
function ArticlePage({ article }) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "Article",
"headline": article.title,
"author": { "@type": "Person", "name": article.author }
};
return (
<>
<Helmet>
<script type="application/ld+json">
{JSON.stringify(jsonLd)}
</script>
</Helmet>
<article>{/* 콘텐츠 */}</article>
</>
);
}
WordPress
// functions.php
function add_json_ld_schema() {
if (is_single()) {
$schema = array(
"@context" => "https://schema.org",
"@type" => "Article",
"headline" => get_the_title(),
"datePublished" => get_the_date('c')
);
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
}
}
add_action('wp_head', 'add_json_ld_schema');
검증 및 테스트
Google 공식 도구
| 도구 | URL | 용도 |
|---|---|---|
| Rich Results Test | search.google.com/test/rich-results | 리치 결과 적격성 테스트 |
| Schema Markup Validator | validator.schema.org | 스키마 문법 검증 |
| Search Console | search.google.com/search-console | 실제 색인 상태 확인 |
테스트 체크리스트
- JSON 문법 오류 없음
- 필수 속성 모두 포함
- 실제 페이지 콘텐츠와 일치
- 이미지 URL 유효
- Rich Results Test 통과
흔한 실수와 해결
1. JSON 문법 오류
// ❌ 잘못됨: 마지막 쉼표
{
"name": "테스트",
"url": "https://example.com", // 여기!
}
// ✅ 올바름
{
"name": "테스트",
"url": "https://example.com"
}
2. 필수 속성 누락
// ❌ Article에서 author 누락
{
"@type": "Article",
"headline": "제목만 있음"
}
// ✅ 필수 속성 포함
{
"@type": "Article",
"headline": "완전한 기사",
"author": { "@type": "Person", "name": "저자" },
"datePublished": "2026-02-22"
}
3. 콘텐츠 불일치
// ❌ 페이지와 다른 내용
{
"@type": "Product",
"price": "10000" // 실제 페이지에는 15000원
}
// Google 가이드라인 위반 = 수동 조치 위험
4. 과도한 마크업
❌ 모든 텍스트를 구조화 데이터로 마크업
❌ 숨겨진 콘텐츠에 스키마 적용
❌ 사용자에게 보이지 않는 정보 포함
✅ 실제 보이는 콘텐츠만 마크업
✅ 핵심 정보만 구조화
SEO 효과
기대 효과
| 지표 | 개선 |
|---|---|
| CTR (클릭률) | +20-58% |
| 노출 | 리치 결과 자격 |
| 신뢰도 | 별점, 리뷰 표시 |
| 음성 검색 | 답변 후보 |
주의사항
- 구조화 데이터 ≠ 순위 상승 보장
- 리치 결과 표시는 Google 재량
- 가이드라인 위반 시 수동 조치
모범 사례 체크리스트
구현
- 페이지 유형에 맞는 스키마 선택
- 모든 필수 속성 포함
- JSON-LD 형식 사용
-
<head>내 배치
콘텐츠
- 실제 페이지 콘텐츠와 일치
- 사용자에게 보이는 정보만 포함
- 최신 정보로 유지
테스트
- Rich Results Test 통과
- Schema Markup Validator 통과
- Search Console에서 오류 없음
FAQ
Q1: 구조화 데이터가 순위에 직접 영향을 주나요?
A: 직접적인 순위 요소는 아닙니다. 하지만 CTR 증가, 음성 검색 답변 등 간접 효과가 있습니다.
Q2: 여러 스키마를 한 페이지에 넣어도 되나요?
A: 네! Article + FAQ + BreadcrumbList를 함께 사용하는 것이 일반적입니다. 각각 별도의 <script> 태그로 추가하세요.
Q3: 리치 결과가 안 나타나는 이유는?
A: 가능한 원인:
- 필수 속성 누락
- 페이지 색인 안 됨
- Google의 재량 (보장 아님)
- 경쟁 페이지가 더 적합
Q4: Microdata vs JSON-LD 무엇을 선택?
A: JSON-LD를 권장합니다. Google 공식 권장이며, HTML과 분리되어 유지보수가 쉽습니다.
Q5: 동적 콘텐츠도 구조화 데이터를 적용할 수 있나요?
A: 네! JavaScript로 생성되는 JSON-LD도 Google이 읽을 수 있습니다. 단, 서버 사이드 렌더링이 더 안정적입니다.
마무리
구조화 데이터 핵심:
- JSON-LD 사용: Google 권장 형식
- 적합한 스키마 선택: 콘텐츠 유형에 맞게
- 필수 속성 포함: 유형별 필수 요소 확인
- 콘텐츠 일치: 실제 보이는 내용만
- 테스트 필수: Rich Results Test 통과
관련 도구
| 도구 | 용도 |
|---|---|
| 구조화 데이터 생성기 | JSON-LD 자동 생성 |
| 메타 태그 생성기 | 메타 태그 생성 |
| SERP 프리뷰 | 검색 결과 미리보기 |
저자 소개
Toolypet Team
Development Team
The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.