스키마는 “많이”가 아니라 “알맞게” 넣는 것이 핵심입니다. 회사면 Organization(매장이면 LocalBusiness), 글이면 Article, 자주 묻는 질문이 보이면 FAQPage, 상품·서비스면 Product·Service, 경로는 BreadcrumbList, 저자는 Person — 페이지에 실제로 존재하는 것만 골라 @graph 하나로 묶고, 리치 결과 테스트로 검증합니다.
요약
- 핵심 8타입: Organization·LocalBusiness·Article·FAQPage·Product·Service·BreadcrumbList·Person.
- “페이지에 실제로 보이는 것”만 마크업한다 — 화면과 다른 마크업은 오히려 위험.
- 여러 블록은
@graph로 묶고@id로 서로 연결해 관계를 알린다. - 스키마는 리치결과 ‘자격’을 만들 뿐, 표시는 보장되지 않는다 — 작성 후 반드시 검증.
현장에서 가장 많이 받는 질문은 “스키마를 더 넣으면 검색에 더 잘 나오나요?”입니다. 답은 “아니요”에 가깝습니다. 스키마는 점수를 올리는 마법이 아니라, 페이지의 정체를 정확히 말해주는 라벨입니다. 라벨이 틀리거나 화면과 다르면 안 넣느니만 못합니다. 그래서 먼저 “이 페이지는 무엇인가”를 정하고, 그에 맞는 타입을 고르는 순서가 맞습니다.
스키마 타입, 왜 골라 써야 하나요?
검색엔진과 AI는 페이지를 읽을 때 “이건 회사 소개구나”, “이건 글이구나”를 추측합니다. 스키마는 그 추측을 추측이 아니라 확정으로 바꿔줍니다. 그런데 회사 소개 페이지에 Product를 붙이면 라벨이 어긋납니다. 타입을 고른다는 건 결국 “이 페이지의 정체를 정직하게 선언한다”는 뜻입니다.
가장 자주 쓰는 8타입, 언제 무엇을
아래가 실무 빈도가 높은 핵심입니다. 이 안에서 대부분 해결됩니다.
- Organization — 회사·브랜드 그 자체. 사이트 전역의 ‘우리 회사’ 엔티티. 로고·연락처·sameAs(공식 채널)를 담습니다.
- LocalBusiness — 오프라인 매장·지역 영업점. 주소·영업시간·전화로 손님이 찾아오는 곳. Restaurant·Dentist 등 하위 타입이 더 정확합니다.
- Article — 블로그 글·인사이트·뉴스. 제목·저자·발행일·발행사를 담습니다.
- FAQPage — 페이지에 ‘질문–답’ 묶음이 실제로 보일 때. 보이지 않는데 넣으면 정책 위반입니다.
- Product — 판매 상품. 이름·이미지·가격(offers)·재고·리뷰를 담습니다.
- Service — 형체 없는 서비스 제공(컨설팅·제작·수리 등). 제공자·제공 지역·서비스 종류를 담습니다.
- BreadcrumbList — 홈 → 카테고리 → 현재로 이어지는 경로. 검색결과의 경로 표시에 쓰입니다.
- Person — 저자·대표·전문가 개인. Article의 author로 연결해 신뢰(E-E-A-T)를 보강합니다.
업종·페이지별로 정리하면?
| 상황 | 주로 쓰는 타입 |
|---|---|
| 지역 카페·병원·매장 홈 | LocalBusiness (+ Organization) |
| 회사 소개 페이지 | Organization (+ Person 대표) |
| 블로그·인사이트 글 | Article (+ Person 저자, BreadcrumbList) |
| 쇼핑몰 상품 상세 | Product (+ BreadcrumbList) |
| 제작·컨설팅 서비스 소개 | Service (+ Organization) |
| FAQ가 보이는 모든 페이지 | FAQPage 추가 |
LocalBusiness, 직접 한번 만들어볼까요?
가장 문의가 많은 게 지역 업종입니다. 아래 예시를 그대로 복사해 본인 정보로 바꾸면 시작점이 됩니다. (값은 화면에 실제로 보이는 정보와 같아야 합니다.)
LocalBusiness 스키마 — 복사
지역 업종에 자주 쓰는 예시. '복사'.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "내 가게",
"address": { "@type": "PostalAddress", "addressLocality": "서울 강남구" },
"telephone": "+82-2-000-0000",
"openingHours": "Mo-Fr 09:00-18:00",
"url": "https://example.com/"
}
여러 개일 때 @graph로 어떻게 묶나요?
실제 페이지는 보통 한 가지가 아닙니다. 글 페이지라면 Article + Person(저자) + BreadcrumbList가 함께 있죠. 이때 블록을 따로따로 흩어 놓지 말고 @graph 배열 하나에 담습니다. 그리고 핵심은 @id입니다. 저자를 "@id":"https://example.com/#founder"처럼 한 번 정의하고, Article에서는 "author":{"@id":"https://example.com/#founder"}로 참조만 하면, 검색엔진과 AI가 “이 글의 저자 = 이 사람”이라는 관계를 정확히 잇습니다. 같은 회사 정보를 페이지마다 풀어 쓸 필요도 없어집니다.
스키마가 정확하면 AI는 무엇을 더 잘하나요?
두 가지가 좋아집니다. 첫째, 검색에서 리치 결과(평점 별점·FAQ 펼침·경로·사이트링크 등)로 나올 ‘자격’이 생깁니다. 둘째, ChatGPT·Perplexity 같은 AI 답변 엔진이 “이 회사는 무엇을 하고, 어디 있고, 이 글은 누가 썼는지”를 헷갈리지 않고 인용합니다. 자연어 문장은 해석이 갈리지만, @id로 묶인 구조화 데이터는 사실 관계를 못 박아 줍니다.
흔히 하는 실수는 무엇인가요?
가장 잦은 실수는 ‘없는 걸 넣는 것’입니다. FAQ가 화면에 안 보이는데 FAQPage를 넣거나, 리뷰가 없는데 평점을 넣으면 정책 위반입니다. 그다음은 타입 선택 오류(회사인데 Product), 필수 속성 누락(Product의 offers 없음), 그리고 화면 값과 마크업 값의 불일치입니다. 원칙은 하나입니다 — 마크업은 사용자가 실제로 보는 것과 같아야 한다.
작성한 다음, 어떻게 검증하나요?
코드를 넣었다고 끝이 아닙니다. ① 구글 리치 결과 테스트에 URL이나 코드를 붙여 오류·경고를 확인합니다. ② Schema.org Validator로 타입·속성 유효성을 봅니다. ③ 빠르게 자가 점검하려면 JSON이 문법적으로 유효한지(괄호·쉼표)부터 확인하세요. 배포 후에도 검색엔진 콘솔에서 적용 상태를 주기적으로 봅니다.
| 항목 | 스키마 없음 | 알맞은 타입 적용 |
|---|---|---|
| 리치 결과 | 표시 자격 없음 | 별점·FAQ·경로 표시 ‘자격’ 확보 |
| AI 이해 | 본문 추측에 의존 | 정체·관계를 못 박아 정확히 인용 |
| 일관성 | 페이지마다 제각각 | @id 참조로 한 번 정의·재사용 |
설명한 ‘여러 개를 @graph로 묶기’가 실제로 어떤 모양인지 보여드리는 게 빠릅니다. 글 페이지의 Article + Person + BreadcrumbList를 한 덩어리로 묶은 예시입니다.
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Person",
"@id": "https://example.com/#founder",
"name": "Findable" },
{ "@type": "Article",
"headline": "글 제목",
"author": { "@id": "https://example.com/#founder" },
"datePublished": "2026-06-24" },
{ "@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "홈", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "인사이트", "item": "https://example.com/insights/" }
] }
]
}저자를 @id로 한 번 정의하고 Article이 참조만 하니, 관계가 끊기지 않고 회사 정보를 페이지마다 풀어 쓸 필요도 없습니다.
타입을 고를 때 가장 자주 빠뜨리는 게 ‘필수 속성’입니다. 그래서 저는 타입별로 빠지면 안 되는 핵심 속성을 표로 옆에 두고 점검합니다.
| 타입 | 쓰는 때 | 빠지면 안 되는 속성 |
|---|---|---|
| Organization | 회사·브랜드 전역 엔티티 | name·url·logo·sameAs |
| LocalBusiness | 주소로 손님이 오는 매장 | name·address·telephone·openingHours |
| Article | 글·인사이트·뉴스 | headline·author·datePublished |
| Product | 판매 상품 상세 | name·image·offers(price·priceCurrency) |
| Service | 형체 없는 서비스 | name·provider·areaServed |
| FAQPage | 질문–답이 화면에 보일 때 | mainEntity(Question·acceptedAnswer) |
필수 속성 누락과 ‘화면에 없는 걸 넣기’가 검증에서 가장 자주 걸립니다. 이 표로 먼저 거르면 리치 결과 테스트를 한 번에 통과하기 쉽습니다.
정리하면, 어디서부터 시작할까요?
“이 페이지는 무엇인가”를 먼저 정하고, 위 8타입 중 해당하는 것만 고르세요. 여러 개면 @graph로 묶고 @id로 잇고, 마지막에 리치 결과 테스트로 검증. 이 순서만 지켜도 대부분의 사이트는 “찾아지는 구조”를 갖춥니다. 무엇을 어디에 넣을지 막막하면 Findable이 페이지별로 설계해 드립니다.
스키마 타입은 한 페이지에 몇 개까지 넣어도 되나요?
Organization과 LocalBusiness 중 무엇을 써야 하나요?
@graph로 묶으면 무엇이 좋아지나요?
스키마를 넣으면 리치결과가 무조건 나오나요?
작성한 스키마는 어떻게 검증하나요?
구조화 데이터 기초
스키마가 검색·AI에 왜 필요한가.
엔티티와 sameAs
@id·sameAs로 같은 존재임을 알리기.
FAQ 페이지 설계
보이는 FAQ와 FAQPage 마크업 맞추기.
이 글의 예시는 schema.org 표준을 따른 일반 가이드입니다. 스키마 적용이 리치 결과 표시나 특정 검색 성과를 보장하지는 않으며(표시는 검색엔진이 결정), 마크업은 항상 실제로 보이는 정보와 일치해야 합니다. 날조된 사례·수치는 사용하지 않았습니다.