FAQ 스키마(FAQPage) 만드는 법 — 워드프레스·일반 HTML 모두
FAQPage 스키마의 형식, 구글의 사용 정책, 워드프레스 / 직접 HTML 두 가지 적용법, 흔한 실수와 검증 방법까지.
한 줄 요약
FAQPage 스키마는 자주 묻는 질문과 그에 대한 공식 답변을 검색엔진·AI에게 명시적으로 알려주는 마크업입니다. AI 검색(ChatGPT·Gemini·Google AI Overview)이 답변할 때 가장 자주 인용하는 형식이라 ROI가 높습니다.
1. FAQ 스키마가 노출되는 곳
전통적인 구글 리치 스니펫(검색 결과에 펼쳐지는 Q&A 박스)에는 2023년 정책 변경 이후 일반 사이트 노출이 줄었습니다. 그러나 노출 채널은 더 넓어졌습니다.
- Google AI Overview — 답변 생성 시 FAQ 마크업된 페이지를 우선 인용
- ChatGPT / Perplexity / Claude — 웹 검색 모드에서 FAQPage를 구조 정보로 활용
- 음성 검색·스마트 스피커 — Q&A 형식이 음성 답변에 직접 적합
- 사이트 자체 SEO 신호 — 페이지의 주제·범위를 명확히 전달
리치 스니펫만 보고 FAQ 스키마를 포기하는 사이트가 많은데, AI 검색 시대에는 오히려 더 중요해진 마크업입니다.
2. 구글 정책: 자격 조건
FAQPage 스키마를 정상 인정받으려면 다음을 지켜야 합니다.
! FAQPage 정책 핵심
- 답변이 페이지에 실제로 보여야 함 — 사용자가 페이지에 와서 답을 읽을 수 있어야 합니다. 마크업에만 있고 페이지에는 없으면 스팸으로 간주됩니다.
- 공식 답변이어야 함 — 사용자 댓글·게시판은 안 됩니다. 그건
QAPage를 따로 쓰세요. - 광고·마케팅 콘텐츠 금지 — "이 제품을 사면 어떻게 좋아지나요?" 같은 자기 홍보성 Q&A는 정책 위반입니다.
- 혐오·폭력·성적 콘텐츠 금지
- 중복 금지 — 동일한 Q&A를 여러 페이지에 마크업하지 마세요.
3. JSON-LD 코드 형식
가장 단순한 형식부터 보겠습니다.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "환불 정책이 어떻게 되나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "구매 후 7일 이내라면 사용 여부와 관계없이 100% 환불해드립니다."
}
},
{
"@type": "Question",
"name": "배송은 얼마나 걸리나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "주문 후 영업일 기준 2~3일 소요됩니다."
}
}
]
}
핵심은 @type: "FAQPage" 하나, 그 안의 mainEntity 배열에 Question을 나열하는 구조입니다. 필요한 만큼 추가하면 됩니다(보통 5~15개가 적절).
4. 적용법 A — 일반 HTML 사이트
<head> 또는 </body> 직전에 <script type="application/ld+json"> 블록으로 붙입니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<title>배송·환불 안내</title>
</head>
<body>
<h1>자주 묻는 질문</h1>
<h2>환불 정책이 어떻게 되나요?</h2>
<p>구매 후 7일 이내라면 사용 여부와 관계없이 100% 환불해드립니다.</p>
<h2>배송은 얼마나 걸리나요?</h2>
<p>주문 후 영업일 기준 2~3일 소요됩니다.</p>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{ "@type": "Question", "name": "환불 정책이 어떻게 되나요?",
"acceptedAnswer": { "@type": "Answer", "text": "구매 후 7일 이내라면 사용 여부와 관계없이 100% 환불해드립니다." }},
{ "@type": "Question", "name": "배송은 얼마나 걸리나요?",
"acceptedAnswer": { "@type": "Answer", "text": "주문 후 영업일 기준 2~3일 소요됩니다." }}
]
}
</script>
</body>
</html>
핵심 — HTML 본문의 질문·답변과 JSON-LD의 텍스트가 일치해야 합니다. 본문 답변이 더 길고 마크업은 요약 버전이어도 괜찮지만, 본문에 없는 답을 마크업에 넣으면 안 됩니다.
5. 적용법 B — 워드프레스
세 가지 방법이 있습니다. 위에서 아래로 갈수록 정확도가 높아집니다.
B-1. Yoast SEO / Rank Math 플러그인
블록 에디터(Gutenberg)에서 "FAQ" 블록을 추가하면 자동으로 FAQPage JSON-LD가 페이지에 삽입됩니다. 가장 쉽지만 출력 형식 통제가 어렵습니다. 답변이 길거나 HTML이 들어가면 plugin이 어떻게 처리할지 일관되지 않을 수 있습니다.
B-2. Schema 전용 플러그인
"Schema & Structured Data for WP & AMP" 같은 전용 플러그인은 FAQPage 외 다른 타입까지 통합 관리할 수 있습니다. 단 플러그인이 우리 사이트의 Organization·WebSite와 중복으로 출력하지 않는지 확인해야 합니다.
B-3. 직접 코드 추가 (가장 정확)
functions.php에 후크하거나 page template에 <script type="application/ld+json"> 블록을 직접 작성합니다. 출력 형식을 100% 통제할 수 있습니다.
add_action('wp_head', function() {
if (!is_page('faq')) return;
$faqs = [
['q' => '환불 정책이 어떻게 되나요?', 'a' => '구매 후 7일 이내...'],
['q' => '배송은 얼마나 걸리나요?', 'a' => '영업일 기준 2~3일...'],
];
$main = array_map(fn($f) => [
'@type' => 'Question', 'name' => $f['q'],
'acceptedAnswer' => ['@type' => 'Answer', 'text' => $f['a']]
], $faqs);
$jsonld = json_encode([
'@context' => 'https://schema.org', '@type' => 'FAQPage',
'mainEntity' => $main
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo '<script type="application/ld+json">' . $jsonld . '</script>';
});
6. 검증
코드를 적용했으면 두 도구로 검증하세요.
- Rich Results Test — 구글이 인식하는지, 어떤 오류가 있는지
- Schema Markup Validator — schema.org 규격 자체를 엄격하게 검사
Rich Results Test에서 "FAQs" 항목이 감지되면 정상입니다.
7. 흔한 실수 5가지
- 답변이 페이지에 없는데 마크업만 함 — 가장 흔한 페널티 사유
- 같은 답변을 여러 페이지에 중복 사용 — 구글이 모두 무시할 수 있음
- 광고성·자기 홍보성 Q&A — "왜 우리 제품이 최고인가요?" 같은 류
- answer.text에 광고 링크 삽입 — 외부 유도 목적의 a 태그는 정책 위반
- Q&A가 5개 미만 — 너무 적으면 FAQPage로서 가치가 낮다고 평가될 수 있음
직접 만들기
Schema:LAB의 폼 빌더로 FAQPage를 정확하게 만들 수 있습니다. 질문/답변을 입력하면 즉시 JSON-LD가 생성되고, 그대로 복사해 페이지에 붙이면 됩니다.
질문과 답변을 입력하면 schema.org 규격에 맞는 FAQPage JSON-LD를 즉시 생성합니다. (Free 플랜에 포함)
→ FAQPage 폼으로 직접 만들기URL을 넣으면 현재 어떤 구조화 데이터가 적용돼 있는지, FAQPage가 빠져있다면 추천 항목으로 표시됩니다.
→ 내 사이트에 FAQ 스키마가 없는지 진단