Citeon
실무 체크리스트

FAQ 스키마, 5분 만에 적용하는 법

정유진
정유진 · 콘텐츠·SEO 에디터

FAQPage 스키마는 schema.org 명세의 구조화 데이터 형식으로, 페이지 내 질문-답변 쌍을 기계 판독 가능한 JSON-LD 블록으로 선언한다. Google은 이 데이터를 SERP FAQ 아코디언(리치 결과)에 렌더링하고, Perplexity·ChatGPT Search·Gemini AI Overviews 같은 AI 답변 엔진은 구조화된 Q&A 텍스트를 비구조화 산문보다 인용 후보로 우선 추출하는 경향이 있다. 크롤 예산을 추가로 소비하지 않고 기존 페이지에 JSON-LD 블록 하나를 추가하는 것만으로 SERP 점유 면적과 AI 인용 가능성을 동시에 높일 수 있다는 점이 지금 이 작업을 정당화한다.

작동 원리: 크롤러와 AI 엔진이 FAQPage를 처리하는 방식

Googlebot은 페이지를 크롤링할 때 <script type="application/ld+json"> 블록을 파싱해 @type: "FAQPage"mainEntity 배열을 추출한다. JavaScript 실행 후 DOM에 삽입된 JSON-LD도 인식하지만, 서버 렌더링으로 HTML에 직접 포함된 방식이 크롤 인식 속도가 빠르고 예산 낭비가 없다. RAG 기반 AI 엔진 입장에서는 명시적 Q&A 쌍이 BM25 검색의 키워드 밀도를 높이고, 임베딩 청크 단위와 구조적으로 일치해 인용 점수를 높인다.

5분 구현: 최소 유효 JSON-LD 예시

아래는 순수 HTML 환경과 Next.js 13+ 양쪽에서 동작하는 최소 유효 FAQPage 스키마다. Next.js에서는 이 블록을 dangerouslySetInnerHTML<script type="application/ld+json">에 삽입하거나, next/head를 사용한다.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "FAQ 스키마는 어디에 삽입해야 하나요?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "HTML <head> 또는 </body> 직전에
                 script type='application/ld+json' 블록으로 삽입합니다.
                 서버 렌더링으로 HTML에 직접 포함하는 방식이
                 크롤 인식 속도가 가장 빠릅니다."
      }
    },
    {
      "@type": "Question",
      "name": "FAQ 스키마 적용 후 검색 결과에 언제 반영되나요?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Google이 해당 페이지를 재크롤링하고 색인 처리를 완료한 뒤
                 반영됩니다. Search Console에서 URL 검사 후
                 색인 생성 요청을 실행하면 수 시간에서 수일 내
                 처리되는 것이 일반적입니다."
      }
    }
  ]
}
</script>

구조화 데이터 타입 선택 기준

FAQPage 외에도 HowTo·QAPage·Article 등 유사 타입이 있다. 잘못된 타입을 선택하면 리치 결과 자격이 거부된다.

스키마 타입 적합한 콘텐츠 리치 결과 형식 AI 인용 기여도
FAQPage 편집팀 작성 Q&A, 제품 FAQ SERP 아코디언 (최대 3개 노출) 높음 — Q&A 쌍이 RAG 청크와 구조 일치
QAPage 사용자 질문·커뮤니티 답변 답변 스니펫 중간 — acceptedAnswer 단일 구조
HowTo 단계별 절차 콘텐츠 스텝 리치 결과 중간 — 스텝 구조 인식, Q&A 없음
Article 뉴스·블로그 일반 글 탑 스토리 (조건부) 낮음 — 명시적 Q&A 구조 없음

검증과 색인 요청: 3단계 체크리스트

  1. Google Rich Results Test — 왜: 스키마 파싱 오류와 리치 결과 자격을 Google 렌더링 파이프라인 기준으로 실시간 확인할 수 있다. 어떻게: search.google.com/test/rich-results에 URL 또는 HTML을 붙여넣고 "FAQPage" 항목이 오류 없이 초록색으로 표시되는지 확인한다.
  2. Schema.org Validator — 왜: Google 명세 외에 schema.org 표준 적합성을 함께 확인하면 Bing·AI 엔진의 파싱 오류를 예방할 수 있다. 어떻게: validator.schema.org에 JSON-LD를 입력해 경고·오류 항목을 수정하고, 특히 name/text 필드 누락 여부를 점검한다.
  3. Search Console URL 검사 → 색인 요청 — 왜: 스키마가 변경된 페이지를 크롤 큐에 즉시 올려 반영 시간을 단축한다. 어떻게: Search Console → URL 검사 → 해당 URL 입력 → "색인 생성 요청" 클릭, 수시간 뒤 "향상(Enhancements)" 탭에서 FAQ 항목 유효 수를 재확인한다.

흔한 함정: 스키마 텍스트와 본문 불일치

acceptedAnswer.text에 작성한 내용이 HTML 본문에 없거나 의미적으로 크게 다를 경우, Google은 Search Console Enhancements 탭에 "감지된 구조화 데이터와 일치하지 않는 콘텐츠" 경고를 표시하고 리치 결과 자격을 박탈한다. WordPress에서 Yoast SEO의 FAQ 블록 없이 커스텀 JSON-LD만 삽입했을 때 이 불일치가 자주 발생한다.

올바른 처리법: 페이지 본문에 Q&A 섹션을 먼저 작성하고, 그 텍스트를 그대로 JSON-LD text 필드에 복사한다. CMS 환경에서는 FAQ 컴포넌트 하나가 본문 HTML 렌더링과 JSON-LD 생성을 동시에 처리하도록 단일 데이터 소스로 구성해 두는 것이 구조적으로 안전하다.

FAQPage 스키마를 한 페이지에 두 개 이상 선언해도 되나요?

Google 가이드라인은 페이지당 FAQPage 타입을 하나만 허용한다. 여러 @type: "FAQPage" 블록을 선언하면 Rich Results Test에서 중복 선언 경고가 발생하며, 리치 결과가 첫 번째 블록 하나만 렌더링되거나 아예 자격이 거부될 수 있다. 모든 Q&A 항목을 단일 FAQPage 객체의 mainEntity 배열에 통합 선언하는 것이 표준이다.

동적 SPA(React/Vue)에서 FAQ 스키마를 삽입하면 크롤러가 인식하지 못하나요?

Googlebot은 JavaScript 실행 후 렌더링된 DOM에서도 JSON-LD를 파싱한다. 그러나 렌더링 파이프라인에 지연이 생기면 크롤 예산 내에 처리되지 않을 수 있다. Next.js App Router 기준으로는 서버 컴포넌트에서 JSON-LD를 출력하거나, generateMetadata와 함께 별도 JsonLd 서버 컴포넌트를 <head>에 삽입하는 방식이 SSR 보장과 크롤 안정성을 동시에 확보한다. Perplexity 등 AI 크롤러는 JavaScript를 실행하지 않으므로, SSR 또는 정적 HTML 출력이 필수다.

참고 자료

이 글의 권고는 아래 공식 문서·연구를 근거로 합니다.

정유진
정유진 · 콘텐츠·SEO 에디터

스키마·FAQ·콘텐츠 구조 등 실무 체크리스트를 쉽고 편안하게 정리합니다. 바로 따라 할 수 있는 글을 지향합니다.

내 사이트의 AI 검색 점수가 궁금하다면

30초 무료 진단으로 SEO·AEO·GEO 점수와 처방을 받아보세요.

무료 진단 시작
← 블로그 목록으로