Skip to content

FAQPage schema missing on informational pages

Pages at paths matching /faq, /guide, /how-to, /learn, or /help have no FAQPage schema. FAQPage is the most directly useful schema type for AI search: Perplexity, ChatGPT search, and Google’s AI Overviews all pull structured question-and-answer content from FAQPage blocks when generating responses. Without it, your answers are available only as unstructured prose, which is harder to extract and less likely to be cited.

Add a FAQPage block to each informational page. Each question must include the full answer text in the text field.

app/faq/page.tsx
export default function FAQPage() {
const schema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'What is your refund policy?',
acceptedAnswer: {
'@type': 'Answer',
text: 'We offer a full refund within 30 days of purchase. Contact support@yoursite.com to request a refund and we will process it within 5 business days.',
},
},
{
'@type': 'Question',
name: 'How do I cancel my subscription?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Go to Account Settings, click Billing, then click Cancel Subscription. Your access continues until the end of the current billing period.',
},
},
],
}
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
<main>
<h1>Frequently Asked Questions</h1>
</main>
</>
)
}
pages/faq.tsx
import Head from 'next/head'
export default function FAQPage() {
const schema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'What is your refund policy?',
acceptedAnswer: {
'@type': 'Answer',
text: 'We offer a full refund within 30 days of purchase. Contact support@yoursite.com to request a refund and we will process it within 5 business days.',
},
},
{
'@type': 'Question',
name: 'How do I cancel my subscription?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Go to Account Settings, click Billing, then click Cancel Subscription. Your access continues until the end of the current billing period.',
},
},
],
}
return (
<>
<Head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
</Head>
<main>
<h1>Frequently Asked Questions</h1>
</main>
</>
)
}
src/pages/faq.astro
---
const schema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'What is your refund policy?',
acceptedAnswer: {
'@type': 'Answer',
text: 'We offer a full refund within 30 days of purchase. Contact support@yoursite.com to request a refund and we will process it within 5 business days.',
},
},
{
'@type': 'Question',
name: 'How do I cancel my subscription?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Go to Account Settings, click Billing, then click Cancel Subscription. Your access continues until the end of the current billing period.',
},
},
],
}
---
<html>
<head>
<script type="application/ld+json" set:html={JSON.stringify(schema)} />
</head>
<body>
<main>
<h1>Frequently Asked Questions</h1>
</main>
</body>
</html>
src/routes/faq/+page.svelte
<script>
const schemaJson = JSON.stringify({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'What is your refund policy?',
acceptedAnswer: {
'@type': 'Answer',
text: 'We offer a full refund within 30 days of purchase. Contact support@yoursite.com to request a refund and we will process it within 5 business days.',
},
},
{
'@type': 'Question',
name: 'How do I cancel my subscription?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Go to Account Settings, click Billing, then click Cancel Subscription. Your access continues until the end of the current billing period.',
},
},
],
})
</script>
<svelte:head>
{@html `<script type="application/ld+json">${schemaJson}</script>`}
</svelte:head>
<main>
<h1>Frequently Asked Questions</h1>
</main>
pages/faq.vue
<script setup>
useHead({
script: [{
type: 'application/ld+json',
innerHTML: JSON.stringify({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'What is your refund policy?',
acceptedAnswer: {
'@type': 'Answer',
text: 'We offer a full refund within 30 days of purchase. Contact support@yoursite.com to request a refund and we will process it within 5 business days.',
},
},
{
'@type': 'Question',
name: 'How do I cancel my subscription?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Go to Account Settings, click Billing, then click Cancel Subscription. Your access continues until the end of the current billing period.',
},
},
],
}),
}],
})
</script>
<template>
<main>
<h1>Frequently Asked Questions</h1>
</main>
</template>

Paste the FAQ or guide page URL into Google’s Rich Results Test and confirm FAQPage is listed as a detected type. Re-run orino audit to confirm schema-faqpage-missing passes.