스키마 마크업 - Google 검색에서 리치 스니펫을 확보하세요 — Claude Skill
Claude Code용 Claude 스킬 · 제공: Corey Haines · 실행: /schema-markup (Claude 내)·업데이트: 2026년 6월 11일·v1.1.0
JSON-LD 스키마 마크업을 추가해 리치 스니펫과 검색 노출을 개선합니다
- FAQ, Product, Review, Article 스키마 유형에 맞는 유효한 JSON-LD 작성
- 사이트 URL 구조에 맞춘 breadcrumb 스키마 생성
- Google Search Console에서 표시된 오류를 기준으로 기존 스키마 감사
- 브랜드 SERP 존재감을 강화하기 위한 Organization 및 SiteLinks 스키마 추가
- 위치 기반 리치 결과를 위한 LocalBusiness 스키마 구현
대상
기능
기존 Q&A 콘텐츠를 바탕으로 블로그 글이나 랜딩 페이지에 넣을 FAQ schema JSON-LD를 작성합니다. 페이지 head에 바로 붙여넣을 수 있습니다
Search Console에 표시된 특정 오류를 검토하고 Google Rich Results Test를 통과하는 수정된 JSON-LD를 제공합니다
제품 페이지용으로 이름, 설명, 가격, 재고 상태, 리뷰 집계를 포함한 전체 Product 스키마를 생성합니다
작동 방식
페이지 URL, 기존 콘텐츠를 공유하거나 현재 스키마를 붙여넣습니다
필요한 스키마 유형 또는 원하는 리치 결과를 설명합니다
스킬이 페이지에 바로 추가할 수 있는 유효한 JSON-LD를 생성합니다
schema.org와 Google 요구사항에 맞춰 검증합니다
CMS 또는 개발자에게 전달할 구현 지침을 제공합니다
개선되는 지표
지원 도구
스키마 마크업을(를) 사용해 보시겠어요?
시작 방법을 선택하세요.
이 스킬을 컴퓨터에 로컬로 설치하고 실행합니다.
컴퓨터에서 터미널을 열고 이 명령을 붙여넣으세요:
이 명령은 스킬과 모든 파일을 컴퓨터에 다운로드합니다:
모든 프로젝트에서 사용하려면 끝에 -g를 추가하세요.
Claude Code를 시작한 다음 명령을 입력하세요:
스키마 마크업
당신은 구조화 데이터와 스키마 마크업 전문가입니다. 목표는 검색 엔진이 콘텐츠를 이해하고 검색에서 리치 결과를 표시할 수 있도록 schema.org 마크업을 구현하는 것입니다.
초기 평가
먼저 제품 마케팅 맥락을 확인하세요.
.agents/product-marketing-context.md가 있으면(오래된 설정에서는 .claude/product-marketing-context.md) 질문하기 전에 읽으세요. 그 맥락을 사용하고, 이미 다뤄지지 않았거나 이 작업에만 필요한 정보만 질문하세요.
스키마를 구현하기 전에 다음을 이해하세요.
-
페이지 유형 - 어떤 종류의 페이지인가요? 주 콘텐츠는 무엇인가요? 어떤 리치 결과가 가능한가요?
-
현재 상태 - 기존 스키마가 있나요? 구현 오류가 있나요? 이미 표시되는 리치 결과는 무엇인가요?
-
목표 - 어떤 리치 결과를 타깃하나요? 비즈니스 가치는 무엇인가요?
핵심 원칙
1. 정확성이 먼저입니다
- 스키마는 페이지 콘텐츠를 정확히 나타내야 합니다
- 존재하지 않는 콘텐츠를 마크업하지 마세요
- 콘텐츠가 바뀌면 최신 상태로 유지하세요
2. JSON-LD를 사용하세요
- Google은 JSON-LD 형식을 권장합니다
- 구현과 유지보수가 더 쉽습니다
<head>또는<body>끝에 배치합니다
3. Google 가이드라인을 따르세요
- Google이 지원하는 마크업만 사용합니다
- 스팸 전술을 피합니다
- 자격 요건을 검토합니다
4. 모든 것을 검증하세요
- 배포 전에 테스트합니다
- Search Console을 모니터링합니다
- 오류를 즉시 수정합니다
흔한 스키마 유형
| 유형 | 사용처 | 필수 속성 |
|---|---|---|
| Organization | 회사 홈페이지/about | name, url |
| WebSite | 홈페이지(검색창) | name, url |
| Article | 블로그 글, 뉴스 | headline, image, datePublished, author |
| Product | 제품 페이지 | name, image, offers |
| SoftwareApplication | SaaS/앱 페이지 | name, offers |
| FAQPage | FAQ 콘텐츠 | mainEntity (Q&A 배열) |
| HowTo | 튜토리얼 | name, step |
| BreadcrumbList | breadcrumb가 있는 모든 페이지 | itemListElement |
| LocalBusiness | 지역 비즈니스 페이지 | name, address |
| Event | 이벤트, 웨비나 | name, startDate, location |
전체 JSON-LD 예시: references/schema-examples.md를 보세요.
빠른 참조
Organization (회사 페이지)
필수: name, url 권장: logo, sameAs(소셜 프로필), contactPoint
Article/BlogPosting
필수: headline, image, datePublished, author 권장: dateModified, publisher, description
Product
필수: name, image, offers(price + availability) 권장: sku, brand, aggregateRating, review
FAQPage
필수: mainEntity(Question/Answer 쌍 배열)
BreadcrumbList
필수: itemListElement(position, name, item이 있는 배열)
여러 스키마 유형
@graph를 사용해 한 페이지에 여러 스키마 유형을 결합할 수 있습니다.
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Organization", ... },
{ "@type": "WebSite", ... },
{ "@type": "BreadcrumbList", ... }
]
}
검증 및 테스트
도구
- Google Rich Results Test: https://search.google.com/test/rich-results
- Schema.org Validator: https://validator.schema.org/
- Search Console: 향상된 검색 결과 리포트
흔한 오류
필수 속성 누락 - 필수 필드는 Google 문서를 확인하세요
잘못된 값 - 날짜는 ISO 8601이어야 하고, URL은 완전한 형식이어야 하며, enum 값은 정확해야 합니다
페이지 콘텐츠와 불일치 - 스키마가 보이는 콘텐츠와 맞지 않습니다
구현
정적 사이트
- HTML 템플릿에 JSON-LD를 직접 추가합니다
- 재사용 가능한 스키마는 include/partial을 사용합니다
동적 사이트(React, Next.js)
- 스키마를 렌더링하는 컴포넌트
- SEO를 위해 서버 사이드 렌더링
- 데이터를 JSON-LD로 직렬화
CMS / WordPress
- 플러그인(Yoast, Rank Math, Schema Pro)
- 테마 수정
- 구조화 데이터용 커스텀 필드
출력 형식
스키마 구현
// 전체 JSON-LD 코드 블록
{
"@context": "https://schema.org",
"@type": "...",
// 완전한 마크업
}
테스트 체크리스트
- Rich Results Test에서 검증됨
- 오류나 경고 없음
- 페이지 콘텐츠와 일치
- 모든 필수 속성 포함
작업별 질문
- 어떤 유형의 페이지인가요?
- 어떤 리치 결과를 얻고 싶나요?
- 스키마에 채울 수 있는 데이터는 무엇인가요?
- 페이지에 기존 스키마가 있나요?
- 기술 스택은 무엇인가요?
관련 스킬
- seo-audit: 스키마 검토를 포함한 전체 SEO용
- ai-seo: AI 검색 최적화용(스키마는 AI가 콘텐츠를 이해하는 데 도움)
- programmatic-seo: 대규모 템플릿 스키마용
- site-architecture: breadcrumb 구조와 navigation schema 계획용
참조 문서
스키마 마크업 예시
흔한 스키마 유형에 대한 전체 JSON-LD 예시입니다.
목차
- Organization
- WebSite(SearchAction 포함)
- Article / BlogPosting
- Product
- SoftwareApplication
- FAQPage
- HowTo
- BreadcrumbList
- LocalBusiness
- Event
- 여러 스키마 유형
- 구현 예시(Next.js)
Organization
회사/브랜드 홈페이지 또는 소개 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "예시 회사",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://twitter.com/example",
"https://linkedin.com/company/example",
"https://facebook.com/example"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-555-555-5555",
"contactType": "customer service"
}
}
WebSite(SearchAction 포함)
홈페이지용이며 sitelinks 검색창을 활성화합니다.
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "예시",
"url": "https://example.com",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://example.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
Article / BlogPosting
블로그 글과 뉴스 기사용입니다.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "스키마 마크업 구현 방법",
"image": "https://example.com/image.jpg",
"datePublished": "2024-01-15T08:00:00+00:00",
"dateModified": "2024-01-20T10:00:00+00:00",
"author": {
"@type": "Person",
"name": "Jane Doe",
"url": "https://example.com/authors/jane"
},
"publisher": {
"@type": "Organization",
"name": "예시 회사",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "스키마 마크업 구현을 위한 전체 가이드...",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/schema-guide"
}
}
Product
제품 페이지용입니다(이커머스 또는 SaaS).
{
"@context": "https://schema.org",
"@type": "Product",
"name": "프리미엄 위젯",
"image": "https://example.com/widget.jpg",
"description": "전문가를 위한 베스트셀러 위젯",
"sku": "WIDGET-001",
"brand": {
"@type": "Brand",
"name": "Example Co"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/products/widget",
"priceCurrency": "USD",
"price": "99.99",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2024-12-31"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "127"
}
}
SoftwareApplication
SaaS 제품 페이지와 앱 랜딩 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "예시 앱",
"applicationCategory": "BusinessApplication",
"operatingSystem": "Web, iOS, Android",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"ratingCount": "1250"
}
}
FAQPage
자주 묻는 질문이 있는 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "스키마 마크업이란 무엇인가요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "스키마 마크업은 검색 엔진이 콘텐츠를 이해하도록 돕는 구조화 데이터 어휘입니다..."
}
},
{
"@type": "Question",
"name": "스키마는 어떻게 구현하나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "권장 방식은 JSON-LD 형식을 사용하고 스크립트를 페이지 head에 배치하는 것입니다..."
}
}
]
}
HowTo
가이드형 콘텐츠와 튜토리얼용입니다.
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "웹사이트에 스키마 마크업을 추가하는 방법",
"description": "JSON-LD 스키마 구현을 위한 단계별 가이드",
"totalTime": "PT15M",
"step": [
{
"@type": "HowToStep",
"name": "스키마 유형 선택",
"text": "페이지 콘텐츠에 적합한 스키마 유형을 식별합니다...",
"url": "https://example.com/guide#step1"
},
{
"@type": "HowToStep",
"name": "JSON-LD 작성",
"text": "schema.org 사양을 따라 JSON-LD 마크업을 만듭니다...",
"url": "https://example.com/guide#step2"
},
{
"@type": "HowToStep",
"name": "페이지에 추가",
"text": "페이지 head 섹션에 script 태그를 삽입합니다...",
"url": "https://example.com/guide#step3"
}
]
}
BreadcrumbList
breadcrumb navigation이 있는 모든 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "홈",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "블로그",
"item": "https://example.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "SEO 가이드",
"item": "https://example.com/blog/seo-guide"
}
]
}
LocalBusiness
지역 비즈니스 위치 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "예시 커피숍",
"image": "https://example.com/shop.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "37.7749",
"longitude": "-122.4194"
},
"telephone": "+1-555-555-5555",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
}
],
"priceRange": "$$"
}
Event
이벤트, 웨비나, 컨퍼런스 페이지용입니다.
{
"@context": "https://schema.org",
"@type": "Event",
"name": "연례 마케팅 컨퍼런스",
"startDate": "2024-06-15T09:00:00-07:00",
"endDate": "2024-06-15T17:00:00-07:00",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/conference"
},
"image": "https://example.com/conference.jpg",
"description": "연례 마케팅 컨퍼런스에 참여하세요...",
"offers": {
"@type": "Offer",
"url": "https://example.com/conference/tickets",
"price": "199",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2024-01-01"
},
"performer": {
"@type": "Organization",
"name": "예시 회사"
},
"organizer": {
"@type": "Organization",
"name": "예시 회사",
"url": "https://example.com"
}
}
여러 스키마 유형
@graph를 사용해 여러 스키마 유형을 결합합니다.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "예시 회사",
"url": "https://example.com"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com",
"name": "예시",
"publisher": {
"@id": "https://example.com/#organization"
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [...]
}
]
}
구현 예시(Next.js)
export default function ProductPage({ product }) {
const schema = {
"@context": "https://schema.org",
"@type": "Product",
name: product.name,
// ... 다른 속성
};
return (
<>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
</Head>
{/* 페이지 콘텐츠 */}
</>
);
}