If you are here, you probably know you need FAQPage schema and you want the code. So here it is. Copy, paste, change the text, validate, ship.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Your question here?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Your answer here. Keep it under 60 words. State the answer first, then add detail."
}
}
]
}That is the minimum viable FAQPage schema. One question, one answer, wrapped in the right JSON-LD structure. Put it inside a <script> tag in your page HTML.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do you offer free shipping?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we offer free shipping on all orders over $50 within the continental US. Orders typically arrive in 3 to 5 business days."
}
}
]
}
</script>The rest of this article covers multi-question examples, how to add schema to different platforms, validation, and the common errors that break it.
FAQPage schema with multiple questions
Most pages have more than one question. Just add more objects to the mainEntity array.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What are your business hours?",
"acceptedAnswer": {
"@type": "Answer",
"text": "We are open Monday through Friday, 9 AM to 6 PM, and Saturday 10 AM to 4 PM. We are closed on Sundays and major holidays."
}
},
{
"@type": "Question",
"name": "Do you take reservations?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we take reservations for parties of up to 8. Book online through our website or call us during business hours. We hold reservations for 15 minutes past the scheduled time."
}
},
{
"@type": "Question",
"name": "Do you offer gluten-free options?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. We have six gluten-free entrees and a separate gluten-free dessert menu. Our kitchen uses dedicated prep surfaces for gluten-free orders."
}
}
]
}Notice the pattern. Each question is a Question object inside the array. Each has a name (the question text) and an acceptedAnswer containing an Answer object with a text field. That is the entire structure.
How to add FAQPage schema to your site
Static HTML sites
Paste the JSON-LD block inside a <script type="application/ld+json"> tag anywhere in your page HTML. Most people put it in the <head> or just before the closing </body> tag. The location does not matter to parsers. What matters is that it is valid JSON and that the questions match the visible text on the page.
WordPress
If you use Yoast SEO, the FAQ block in the Gutenberg editor generates FAQPage schema automatically. Add an FAQ block, type your questions and answers, and Yoast outputs the schema.
Rank Math does the same thing with its FAQ schema block. Both are free.
If you do not use either plugin, you can paste the JSON-LD into a Custom HTML block in your post or page editor. WordPress will render it inside the page.
Shopify
Shopify does not generate FAQPage schema by default. You need to add it manually. The cleanest approach is to create a snippet file in your theme:
- Go to Online Store > Themes > Edit code
- Under Snippets, create a new file called faq-schema.liquid
- Paste your JSON-LD inside a <script type="application/ld+json"> tag
- Include it on the relevant page template with {% render 'faq-schema' %}
If your FAQ content comes from a metafield or a page builder app, you need to loop through the questions in Liquid and output them as JSON. The exact code depends on your setup.
Next.js, React, and other JavaScript frameworks
Render the JSON-LD as a script tag in your component. Use dangerouslySetInnerHTML or a dedicated schema component. The key thing: the JSON-LD must be in the server-rendered HTML, not injected by client-side JavaScript after page load. Crawlers need to see it in the initial response.
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: faqItems.map(item => ({
"@type": "Question",
name: item.question,
acceptedAnswer: {
"@type": "Answer",
text: item.answer
}
}))
})
}}
/>How to validate your FAQPage schema
Before you publish, check that your schema is valid. Use one of these free tools.
Google Rich Results Test (search.google.com/test/rich-results). Paste your URL or your raw HTML. The tool tells you whether Google can parse the FAQPage schema and whether it detects any errors. This is the tool Google officially recommends.
Schema.org Validator (validator.schema.org). Paste your URL or JSON-LD. This tool checks schema structure against the schema.org specification. It is stricter than Google's tool and catches structural issues Google's tool might miss.
If either tool reports errors, fix them before publishing. Common errors are covered below.
The five errors that break FAQPage schema
These are the issues we see most often. All of them are easy to fix once you know what to look for.
Invalid JSON. A missing comma, a trailing comma, or an unescaped quote character will break the entire block. JSON does not allow trailing commas after the last item in an array or object. If your answer text contains quotation marks, escape them with a backslash. Paste your JSON into jsonlint.com to check.
Schema questions that do not match visible content. Every question in your schema must appear as visible text on the same page. If you add hidden schema-only questions that human readers cannot see, Google considers this spam. AI crawlers may also skip your page entirely. The fix is simple: every schema question needs a matching visible heading on the page.
Answers that are too long or too vague. The text field should contain a complete but concise answer. Aim for 40 to 60 words for simple questions. If your visible answer is three paragraphs, put the summary in the schema text field and let the page carry the detail. Do not copy a wall of text into the schema. Extraction models work best with tight, self-contained answers.
Schema on the wrong page. Sometimes the FAQPage schema lives on the homepage but the FAQ content is on a separate page. Or the schema references questions that only appear on a different URL. Put the schema on the same page where the questions and answers are visible to humans.
Missing @context or wrong @type. Every FAQPage schema block needs "@context": "https://schema.org" and "@type": "FAQPage". Without @context, parsers do not know which vocabulary you are using. Without the correct @type, they do not know this is FAQ content.
Why FAQPage schema matters for AI search specifically
Google removed the FAQ rich result accordion for most sites back in 2023. A lot of SEO guides said schema was dead after that. It is not.
AI search engines read FAQPage schema directly from your HTML. ChatGPT, Perplexity, Google AI Overviews, and Claude all use it to extract question-and-answer pairs without having to parse your paragraphs and guess at boundaries. The schema hands them pre-structured content they can cite directly.
The IAB published its "Measuring Visibility in the AI Era" framework on August 3, 2026. It defines four dimensions of AI visibility. FAQPage schema contributes to two of them. It feeds Prominence, because well-structured Q&A content is easier for AI models to retrieve and cite. It feeds Portrayal, because the schema ensures your answers are extracted accurately rather than paraphrased or invented.
In other words, FAQPage schema is one of the clearest paths from directional measurement (checking whether you have the right inputs) toward decision-grade measurement (verifying that AI engines actually cite you with accurate answers). If you want a deeper look at the strategy behind this, our guide to how FAQ sections improve AI search performance covers the evidence.
How to check whether AI engines are reading your schema
Validation tools tell you whether your schema is syntactically correct. They do not tell you whether ChatGPT or Perplexity is actually citing your answers.
Type your FAQ questions directly into ChatGPT, Perplexity, and Google. Use the exact phrasing from your schema. See whether your site appears as a cited source. If it does not after a few weeks, the problem is usually one of two things: your robots.txt blocks the AI crawler, or your page does not rank well enough to enter the candidate pool. Both are fixable.
Check that AI crawlers can reach your site. Your robots.txt should allow GPTBot, PerplexityBot, ClaudeBot, and Google-Extended. If any of those are blocked, no amount of schema will help. Our robots.txt guide for AI crawlers covers the exact configuration.
Run a free audit at parceit.com. The audit engine checks your FAQPage schema, your crawlability, your content structure, and every other signal that determines whether AI search engines will cite you. You get a prioritized list of what to fix first.