How to Create FAQ Schema
FAQ schema (technically FAQPage in Schema.org terms) is a type of structured data that marks up frequently asked questions and their answers on a page. When Google detects valid FAQ schema it understands exactly what each question is, what the corresponding answer is, and can treat the page as an authoritative Q&A resource.
Historically, FAQ schema was one of the most visible wins in structured data work: a page with FAQPage markup could earn an expandable accordion of Q&A rows directly in Google search results — giving the listing significantly more visual real estate than a standard blue-link snippet. Since Google's August 2023 update that restricted FAQ rich results to "authoritative government and health websites", most sites no longer earn the visible rich result. FAQ schema still matters, but the reasons have shifted: it's now primarily a semantic signal for AI Overviews, voice search, and future rich-result revivals, rather than a guaranteed SERP enhancement.
This guide walks through every step of implementing FAQ schema correctly in 2026: when to use it, when not to, how to build the JSON-LD by hand, how to generate it with tools, CMS-specific implementations (WordPress, Shopify, Webflow, Next.js), validation, common errors, and how to decide between FAQPage, HowTo, and QAPage.
What FAQ Schema Is and Why It Still Matters
FAQ schema is a structured-data vocabulary from Schema.org. A page typed as FAQPage declares a list of Question entities, each with a single acceptedAnswer. Search engines parse this to answer questions directly, to enrich knowledge panels, and to feed AI-generated overviews.
The 2023 restriction changed which pages see visible rich results in traditional search, but it did not change the value of the markup itself:
- AI Overviews and SGE. Google's AI-generated answers draw on structured Q&A data to produce and cite sourced answers.
- Voice search. Voice assistants pull from FAQ-marked content to answer spoken questions.
- Featured snippets. While FAQ-specific rich results are restricted, pages with FAQ schema still qualify for featured snippet placement based on the question-answer structure.
- Semantic understanding. Structured data removes ambiguity. Google understands faster which text is the question and which is the answer.
- Future rich-result shifts. If Google relaxes the 2023 restriction or introduces a new rich-result type that uses FAQPage data, you're already ready.
- Other search engines. Bing still shows FAQ-based enhancements for more sites. If any material share of your traffic comes from Bing, this matters.
For context on the bigger picture of structured data beyond FAQs, see what is structured data.
When to Use FAQ Schema (and When Not To)
The single most common mistake is retrofitting FAQ schema onto pages that don't actually contain a genuine FAQ. Google's documentation is explicit: FAQ schema is only appropriate when the page consists of a list of questions and answers written by the site owner, answering things a real audience actually asks.
Use FAQPage When
- You have a dedicated FAQ section on a help-centre page, product page, or service page
- Each question has a single, authoritative answer
- The answers are written by the site itself (not user-generated)
- The questions and answers are all visible on the page (no hidden/collapsed content that the crawler can't read)
- The same questions aren't already marked up elsewhere on the same page
Do NOT Use FAQPage When
- The page is a forum or Q&A community (users write the answers) — use QAPage instead
- There are multiple answers to the same question (forums, Stack Overflow-style pages) — use QAPage
- The questions are promotional in nature ("Why choose our product?") rather than genuine user questions
- The answers are advertisements or calls to action rather than substantive information
- You're trying to spam generic FAQs onto every page template to try to earn rich results
- The Q&A content is hidden behind tabs or collapsed by default such that users cannot see it
The Penalty Risk
Google issues manual actions for "Spammy structured data" — applied when FAQ schema is used on pages that don't genuinely contain an FAQ, or when the Q&As are thin/promotional. A manual action suppresses all rich results for the entire domain and can require a reconsideration request to lift. The risk is real: don't bolt FAQ schema onto pages that shouldn't have it.
Prerequisites
Before implementing FAQ schema, confirm:
- Your page has a genuine, visible FAQ section with at least 2-3 Q&A pairs
- Each question has exactly one answer
- The content is substantive (answers are full sentences, not one-word responses)
- You have access to edit the page's HTML, either directly or via your CMS
- You can validate the result using Google's Rich Results Test or the RankNibbler structured data checker
The FAQPage Schema Structure
A valid FAQPage JSON-LD block has this shape:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Question text goes here",
"acceptedAnswer": {
"@type": "Answer",
"text": "Answer text goes here"
}
}
// more Question objects...
]
}
Every element has a specific job:
| Field | Required? | Purpose |
|---|---|---|
@context | Required | Declares the Schema.org vocabulary |
@type at root | Required | Must be FAQPage |
mainEntity | Required | Array of Question objects |
Question.@type | Required | Must be Question |
Question.name | Required | The question text, as a plain string |
Question.acceptedAnswer | Required | A single Answer object — not an array |
Answer.@type | Required | Must be Answer |
Answer.text | Required | Full answer content as a string (can include HTML) |
Method 1: Build the JSON-LD Manually
For anyone comfortable editing HTML, hand-writing FAQ schema is straightforward. Work through these steps.
Step 1: Write the FAQ Content First
Publish the visible FAQ on the page before adding schema. The schema must match what users see. If you change the visible answer later, remember to update the schema too.
Example visible HTML on the page:
<section class="faq">
<h2>Frequently Asked Questions</h2>
<div class="qa">
<h3>How long does shipping take?</h3>
<p>Standard shipping takes 3-5 business days within the US.</p>
</div>
<div class="qa">
<h3>What is your return policy?</h3>
<p>Returns are accepted within 30 days of purchase.</p>
</div>
</section>
Step 2: Draft the JSON-LD
Create a JSON-LD block that mirrors the visible content:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long does shipping take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Standard shipping takes 3-5 business days within the US."
}
},
{
"@type": "Question",
"name": "What is your return policy?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Returns are accepted within 30 days of purchase."
}
}
]
}
</script>
Step 3: Place the Script in the HTML Head or Body
JSON-LD can go in either the <head> or <body>. Placing it in the head is conventional and makes it easier to track. Make sure the entire script is served in the initial HTML response — Google does render JavaScript, but server-side JSON-LD is faster and more reliable for structured data.
Step 4: Validate
Before deploying, validate the JSON at Google's Rich Results Test or using the RankNibbler structured data checker. Both flag syntax errors and missing required fields.
Step 5: Deploy and Re-verify
Push to production, then re-run the validator against the live URL. Fetch the HTML source (View Source, not Inspector) to confirm the JSON-LD is present as expected.
Step 6: Monitor in Search Console
In Google Search Console, go to Enhancements > FAQ (if available) or Rich results. Valid pages appear within a few days of Google's next crawl. Any errors appear here first.
Method 2: Use the RankNibbler Schema Generator
Hand-writing JSON-LD is fine for a handful of pages; for larger sites it's slow and error-prone. The RankNibbler Schema Generator produces valid FAQPage JSON-LD from a simple form input.
Step 1: Open the Generator
Go to ranknibbler.com/schema-generator and select FAQPage from the schema type dropdown.
Step 2: Add Your Questions and Answers
Paste your real, visible FAQ content into the question and answer fields. Add as many rows as you have genuine FAQs — the generator handles any count.
Step 3: Copy the Output
The generator builds the JSON-LD live as you type. Copy the full <script> tag.
Step 4: Paste Into Your Page
Drop the script tag into your page's head or body.
Step 5: Validate with the Structured Data Checker
Run the page URL through the structured data checker to confirm Google parses the markup correctly.
Method 3: Implementation in WordPress
WordPress offers several paths depending on your setup.
Via Yoast SEO
Yoast includes an FAQ block in the Gutenberg editor. Inside a post or page, add the "FAQ" block, fill in your questions and answers in the visual editor, and Yoast automatically generates and injects the FAQPage JSON-LD. This keeps the visible content and the schema in sync automatically.
Via Rank Math
Rank Math has a similar FAQ Schema block and a Schema tab in each post where FAQPage can be added manually. The block approach is preferred because visible and schema content stay linked.
Via Custom Functions
For themes without plugin support, add this to your theme's functions.php:
function add_faq_schema() {
if (is_page('faq')) {
$schema = array(
'@context' => 'https://schema.org',
'@type' => 'FAQPage',
'mainEntity' => array(
array(
'@type' => 'Question',
'name' => 'Your question?',
'acceptedAnswer' => array(
'@type' => 'Answer',
'text' => 'Your answer.'
)
)
)
);
echo '<script type="application/ld+json">' . json_encode($schema, JSON_UNESCAPED_SLASHES) . '</script>';
}
}
add_action('wp_head', 'add_faq_schema');
Via Raw Block Editor
For one-off pages, add a Custom HTML block in Gutenberg and paste the full <script type="application/ld+json">...</script> block.
Method 4: Implementation in Shopify
Shopify themes use Liquid. Add the JSON-LD block to your theme's product.liquid, page.liquid, or a dedicated FAQ template. A liquid-based example:
{% if page.handle == 'faq' %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Question 1?",
"acceptedAnswer": { "@type": "Answer", "text": "Answer 1." }
}
]
}
</script>
{% endif %}
For product-specific FAQs, consider apps like JudgeMe's FAQ feature or dedicated structured-data apps.
Method 5: Implementation in Webflow
Webflow doesn't have a first-party schema editor. Add the JSON-LD via:
- Project Settings > Custom Code for site-wide scripts, or
- Page Settings > Before </body> Tag for page-specific scripts, or
- An embed element directly in the Designer for more complex cases
Paste the full <script type="application/ld+json">...</script> block in the appropriate field and publish.
Method 6: Implementation in Next.js / React
Modern JS frameworks handle JSON-LD cleanly. A Next.js example using next/script:
import Script from 'next/script';
const faqJsonLd = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'How long does it take?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Typically 3-5 business days.'
}
}
]
};
export default function FaqPage() {
return (
<>
<Script
id="faq-schema"
type="application/ld+json"
strategy="beforeInteractive"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqJsonLd) }}
/>
{/* visible FAQ content */}
</>
);
}
For server-side rendering (App Router), the same structure works inside a Server Component. Ensure the JSON-LD is emitted in the initial HTML response, not only after hydration. Check script loading patterns for best practice.
Advanced Usage
HTML Inside Answers
The text field of an Answer can contain HTML — links, paragraphs, lists. Example:
"text": "<p>Our return policy is 30 days. See the <a href='/returns'>full policy</a> for details.</p>"
Escape any quotes appropriately and validate after — malformed HTML in the answer breaks the schema.
Nested Lists and Code
For technical FAQs, embed lists or code samples within the HTML of the answer text. Don't split them across multiple Answer objects — a Question can have only one acceptedAnswer.
Internationalisation
For multilingual sites, produce one FAQPage schema per language version of the page. Do not mix languages within a single schema block. Match schema language to page language via hreflang and page language declarations.
Dynamic Content
If FAQs are stored in a CMS and rendered dynamically, generate the JSON-LD server-side from the same source data. Two separate sources for visible content and schema content inevitably drift out of sync.
Validation and Debugging
Google Rich Results Test
search.google.com/test/rich-results parses any live URL or code snippet and reports:
- Whether the FAQPage markup is valid
- How many Q&A pairs were detected
- Any warnings (missing optional fields) or errors (missing required fields)
- Whether the page is currently eligible for rich results (post-2023, most pages will not be, but the validation still succeeds)
Schema.org Validator
validator.schema.org is the vocabulary-level validator. It catches structural issues even when they don't block Google's rich result but may affect other consumers of the schema.
RankNibbler Structured Data Checker
The structured data checker extracts and displays every piece of structured data on a page — JSON-LD, microdata, and RDFa — letting you see everything Google will parse, including duplicates, conflicts, or mistakenly included drafts.
Search Console Enhancement Reports
Once deployed, check Search Console's Enhancements area. Valid FAQ markup appears as a separate enhancement report with a count of valid and invalid items. Fix errors flagged here promptly.
Common Errors and How to Fix Them
| Error | Cause | Fix |
|---|---|---|
| Missing field "acceptedAnswer" | A Question object has no Answer | Add the acceptedAnswer object with @type and text |
| acceptedAnswer not an object | Answer was supplied as a string or array | Wrap in an object: {"@type":"Answer","text":"..."} |
| FAQ content does not match visible content | Schema text differs from what users see | Copy the visible text verbatim into the schema |
| Hidden FAQ content | Q&As are in collapsed/tabbed content that's DOM-hidden | Ensure content is in the initial DOM and visible |
| Multiple @types on one element | Mixed up HowTo and FAQPage in a single block | Split into separate script blocks |
| JSON parse error | Missing commas, brackets, or escaped quotes | Run through jsonlint.com, fix syntax |
| Promotional content flagged | Answer is an ad or CTA | Rewrite as a factual response to a user question |
| User-generated FAQ detected | Used FAQPage on a forum page | Switch to QAPage schema |
| Too few Q&A pairs | Only one Question in mainEntity | FAQPage can validate with one, but the intent is multiple; add more |
| Duplicate FAQ schema on the page | Two plugins both outputting schema | Disable one; keep only one source of schema |
FAQPage vs HowTo vs QAPage: Choosing the Right Type
Three related schema types cover question/answer-like content. Picking the wrong one can block rich results.
FAQPage
Use for a list of independent questions and authoritative answers, written by the site owner. Each question has exactly one answer. Example pages: product FAQs, policy FAQs, help-centre landing pages.
HowTo
Use for step-by-step instructions for completing a specific task. Structure is different from FAQPage — uses step entities rather than questions. Example pages: tutorials, recipes with visible steps, how-to guides. Note: HowTo rich results themselves were also restricted in 2023 and no longer show for most pages, but the markup remains useful for semantic understanding and AI Overviews.
QAPage
Use for pages where the primary content is a single user-submitted question with potentially multiple community-contributed answers. Think forum pages, Stack Overflow-style sites, Quora-style Q&A. QAPage supports multiple answers to one question — FAQPage does not.
Quick Decision Tree
- Multiple questions, each with one authoritative answer, written by the site → FAQPage
- A sequence of ordered steps to accomplish a task → HowTo
- One user question with community answers → QAPage
When in doubt, map the content structure first (what entities are you describing?) before choosing the schema type. The schema type has to reflect what's actually on the page.
The 2023 Restriction: What Changed and What Still Works
On 8 August 2023, Google announced that FAQ rich results would only appear for "authoritative government and health websites". The immediate impact: most sites with FAQPage schema stopped seeing the accordion rich result. Here's what's still true and what changed.
What Still Works
- FAQPage markup still validates through Google's testing tools
- Google still parses and understands the structured data semantically
- The markup feeds AI Overviews, Knowledge Graph entries, and voice search
- Featured snippets (non-FAQ) still draw on FAQ-structured content
- Bing and other search engines still show FAQ enhancements for broader sets of pages
- The schema is useful for site search, chatbots, and third-party integrations
What Changed
- Most commercial sites no longer see the expandable FAQ accordion in Google SERPs
- Click-through rate gains from FAQ rich results have largely disappeared for non-qualifying sites
- Some teams have deprioritised FAQ schema investment accordingly
Should You Still Implement FAQ Schema?
Yes — but calibrate expectations. FAQ schema is no longer a guaranteed SERP win, but:
- The cost of implementing is low (minutes per page with a generator)
- The semantic benefits persist
- AI-driven search surfaces are increasingly important and use structured data
- Future changes to Google's rich-result policy may restore broader eligibility
- Other search engines still reward the markup
The calculus: implement on pages that genuinely have an FAQ. Don't retrofit FAQ schema onto pages that don't.
Measuring FAQ Schema Impact
Since visible rich results are restricted, measurement has shifted to softer signals.
Search Console
- Rich results enhancement report: confirms FAQ markup is parsed correctly
- Performance report: filter by the URL with FAQ schema and compare CTR to peers
- Search Appearance filter: if your site does qualify, isolates impressions/clicks from FAQ-enhanced results
AI Overview Appearances
Tracking how often your content is cited in Google's AI Overviews is harder — there's no official report. Manually check top queries for your FAQ pages and note whether your answer appears in the AI summary.
Direct Traffic to FAQ Anchors
If your FAQ page uses fragment anchors (e.g. /faq#shipping), Google sometimes links directly to those anchors. Traffic to anchor-specific URLs suggests your structured Q&A is being surfaced.
Ongoing Maintenance
- Every time you update the visible FAQ content, update the schema to match
- Remove Q&As that are no longer relevant
- Re-validate via structured data checker after any template change
- Monitor Search Console enhancement reports monthly
- Audit for schema duplication whenever you add or change a plugin that generates structured data
Common Pitfalls
Generic FAQs on Product Pages
"Is this a quality product?" with answer "Yes, our products are high quality." This is promotional content dressed as FAQ. Avoid it — Google's spam team actively penalises the pattern.
Copy-Paste FAQ Templates
Running the same FAQ set across hundreds of product pages. Users aren't actually asking those questions on each product; Google sees the duplication.
Schema Without Visible Content
FAQ schema claiming content that's in an iframe, loaded via AJAX, or otherwise not in the main DOM. Google ignores this and may flag it as spammy.
Hidden FAQs Behind Accordions
Accordions are fine as long as the Q&A content is in the initial HTML and becomes visible when expanded. Don't use accordions that load content dynamically on click.
Not Updating Schema After Content Edits
Change the visible answer, forget to change the schema. Google flags the mismatch. Keep a single source of truth for Q&A content and generate schema from it.
Multiple Conflicting Schemas
Two plugins both injecting FAQPage schema. Remove duplicates and use only one system.
Using FAQ Schema for Product Features
"What are the dimensions?" with answer giving the dimensions. This is Product schema territory, not FAQ. Use the correct type.
FAQ Schema vs Other Ways to Answer User Questions
| Approach | Best For | Rich Result Eligibility |
|---|---|---|
| FAQPage schema | Dedicated FAQ sections | Restricted (gov/health) but semantic benefits persist |
| HowTo schema | Step-by-step instructions | Restricted (mobile-only for some categories) |
| QAPage schema | Forum and community Q&A pages | Still available for qualifying pages |
| Article schema with H2 questions | Blog posts structured around questions | Featured snippet eligibility |
| Regular body copy with clear questions | Anywhere — lowest implementation cost | Featured snippet and People Also Ask eligibility |
For many pages, well-structured H2 questions with clear answers in the body copy — no schema needed — still wins featured snippets. Don't assume FAQPage markup is the only way to signal Q&A content.
Frequently Asked Questions
Will FAQ schema still give me rich results in 2026?
Only if your site qualifies as an "authoritative government or health website" per Google's 2023 policy. For most commercial sites, FAQ schema no longer triggers the expandable accordion rich result. It still provides semantic benefits, AI Overview inclusion, and featured snippet eligibility.
Is FAQ schema worth implementing if there's no rich result?
Yes, because of AI Overviews, voice search, semantic understanding, and future policy changes. The cost of implementation is low, and the benefits are durable even without the visible rich result.
Can I use FAQ schema on every page of my site?
Only on pages that genuinely contain a Q&A section. Using it on unrelated templates (product pages, landing pages without actual FAQs) risks a "Spammy structured data" manual action.
How many questions should an FAQPage have?
Technically, one is valid. Practically, 3-10 substantive Q&As is the sweet spot. Fewer feels thin; more than 15-20 and the page should arguably be split by topic.
Can FAQ answers include HTML?
Yes. The text field of the Answer can contain HTML elements — paragraphs, links, lists, strong/em. Escape quotes correctly and validate after.
Do questions need to be real questions people ask?
Yes. Google explicitly requires the Q&A to be genuine content that users are asking. Made-up questions for keyword stuffing risk spam actions.
Can I have multiple FAQPage schemas on one page?
No. Only one FAQPage per page. Combine all Q&A pairs into a single FAQPage with one mainEntity array.
Do I need microdata or RDFa instead of JSON-LD?
JSON-LD is Google's preferred format and the easiest to implement. Microdata and RDFa are supported but harder to maintain. Use JSON-LD.
What if my FAQ content is user-generated (forum-style)?
Use QAPage, not FAQPage. QAPage supports multiple answers per question and is designed for community-generated content.
Should I include author information in FAQ schema?
FAQPage schema doesn't require author fields, but you can add an author property to the outer FAQPage object (or to individual Question objects) if your E-E-A-T signals benefit from attribution. Keep it aligned with the visible byline if there is one.
Can FAQ schema hurt my rankings?
Only if implemented spammily — fake FAQs, hidden content, or duplication across pages. Legitimate FAQ schema is a positive signal or neutral at worst.
How often should I update FAQ schema?
Update any time the visible FAQ content changes. Stale schema that no longer matches the page is worse than no schema.
Does FAQ schema need to be in the head or can it go in the body?
Both work. Convention puts it in the head. Body placement is fine as long as the script is in the initial HTML response.
Will FAQ schema improve my page speed score?
No — structured data doesn't directly affect page speed. A properly-sized JSON-LD block adds negligible weight (usually under 1KB).
Can I use FAQ schema on a landing page?
Only if the landing page has a genuine FAQ section. Adding a promotional "Why choose us?" FAQ just to earn schema eligibility is exactly what Google penalises.
Combining FAQ Schema With Other Schema Types
Many pages benefit from multiple schema types coexisting. FAQ schema plays nicely with most others.
FAQPage + Article
A blog post that covers a topic and ends with an FAQ section can carry both Article schema (for the main content) and FAQPage schema (for the Q&A section). Emit both JSON-LD blocks in the head:
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "Article", ... }
</script>
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "FAQPage", ... }
</script>
FAQPage + Product
Product pages often include an FAQ section covering shipping, returns, and product-specific questions. Add both Product schema (for the product data) and FAQPage schema (for the Q&As). Keep them in separate script blocks.
FAQPage + BreadcrumbList
Always include BreadcrumbList schema matching the visible breadcrumb on the page — regardless of whether FAQPage is also present. Breadcrumbs still earn rich results even when FAQ doesn't.
FAQPage + Organization
Organization schema typically lives on the homepage or in a sitewide script. It coexists with page-specific FAQPage without conflict.
Schema Stacking Limits
There's no hard limit to how many JSON-LD blocks a page can have, but keep it sensible — 2-4 types max for most pages. Each additional schema is a maintenance commitment. Adding schema you won't update is worse than not adding it at all.
Performance Considerations
FAQ schema rarely affects performance meaningfully, but a few patterns are worth watching.
JSON-LD Size
A well-structured FAQPage block with 10 Q&As is typically 2-5KB of HTML. Minifying the JSON (removing whitespace) saves a few hundred bytes. Don't over-optimise — readability and debuggability matter more.
Script Blocking
JSON-LD scripts are not executable JavaScript and never block rendering, even when placed in the head. Unlike external JS files, they have zero performance cost beyond their byte weight.
Server-Side vs Client-Side Generation
Always emit FAQ schema in the initial HTML response. JavaScript-injected schema (generated after page load) is parsed by Google but with lower reliability. Static or server-rendered is the safest bet.
Caching
Pages with FAQ schema cache normally. If you update the visible FAQ, purge the page's CDN cache so the schema update propagates with the content.
Examples: Good and Bad FAQ Schema
Example 1: Good — Product FAQ
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long does shipping take to the UK?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Standard UK delivery takes 2-3 business days. Next-day delivery is available at checkout for orders placed before 3pm GMT."
}
},
{
"@type": "Question",
"name": "What is your return policy?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Unworn items in original packaging can be returned within 30 days for a full refund. Return shipping is free via our UK returns portal."
}
},
{
"@type": "Question",
"name": "Do you offer international shipping?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we ship to EU, US, and Canada. International delivery takes 5-10 business days and rates are calculated at checkout."
}
}
]
}
Why it's good: Real questions users actually ask about a specific product/merchant. Answers are substantive (2+ sentences), specific, and informational rather than promotional.
Example 2: Bad — Promotional FAQ
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Why is our product the best?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Because we use the highest quality materials and our customers love us!"
}
},
{
"@type": "Question",
"name": "Should I buy now?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes! Click the buy button now to get our amazing deal."
}
}
]
}
Why it's bad: The questions aren't real user questions. Answers are promotional rather than informative. This pattern risks a spam action from Google.
Example 3: Bad — Hidden Content
<!-- Visible HTML -->
<div class="faq-tabs" style="display:none">
<div>
<h3>Question 1?</h3>
<p>Answer 1.</p>
</div>
</div>
<!-- JSON-LD references the hidden content -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Question 1?",
"acceptedAnswer": { "@type": "Answer", "text": "Answer 1." }
}
]
}
</script>
Why it's bad: The Q&A is hidden from users via CSS. Google flags this as schema not matching visible content.
Example 4: Good — Accordion That Works
<!-- Content is in initial DOM, just collapsed visually -->
<details>
<summary>Question 1?</summary>
<p>Answer 1 content here.</p>
</details>
<details>
<summary>Question 2?</summary>
<p>Answer 2 content here.</p>
</details>
Why it's good: The HTML <details> element uses native browser accordion behaviour. Content is present in the DOM, indexable by Google, and visible to users on click. The corresponding JSON-LD maps cleanly.
Automating FAQ Schema in Large Sites
For sites with hundreds or thousands of pages carrying FAQs, generating schema by hand is impractical.
Template-Driven Generation
Most CMSes let you define a field for FAQ content on a page or post type. Store each question and answer as a structured field rather than free-form HTML. At render time, the template loops over those fields to output both the visible HTML and the JSON-LD from the same source.
API-Driven Generation
For headless CMS setups, the FAQ content lives in the CMS and is consumed via API by the front-end. The front-end builds both visible output and JSON-LD from the single API payload. This approach scales cleanly and keeps content and schema perfectly in sync.
Build-Time Validation
Add JSON-LD validation to your CI/CD pipeline. Every build runs generated schema through a validator (e.g. schema-dts for TypeScript, or a custom script calling Google's Rich Results API). Broken schema fails the build rather than reaching production.
Monitoring at Scale
Use Search Console's Enhancement reports to track FAQ schema across the site. A sudden rise in errors indicates a template regression. Combine with the site audit tool for site-wide structured-data coverage reports.
Historical Context: Why Google Restricted FAQ Rich Results
Understanding the motivation for the 2023 change helps predict where the policy may go next.
The Rich Result Spam Problem
Between 2019 and 2022, FAQ rich results proliferated aggressively. Sites added FAQ schema to every template, often with fabricated questions designed to capture keyword real estate. SERPs became cluttered with expandable FAQs on product pages, affiliate pages, and thin content.
User Experience Impact
Heavy FAQ rich-result usage pushed organic results further down, sometimes below the fold on mobile. Users complained that SERPs were becoming harder to scan. Google's internal research likely confirmed that rich results beyond a certain density hurt rather than helped the search experience.
The Restriction
Google's response was to restrict FAQ rich results to "authoritative government and health websites" — presumably because those categories were judged to be high-trust sources where FAQ content has genuine public utility.
What This Means for Strategy
The restriction rewards sites that use FAQ schema honestly and penalises those that abused it. For most commercial sites, the rational response is to continue implementing FAQ schema on pages that have real FAQs and skip it everywhere else. Don't game the system — the ground has shifted before and will shift again.
Future of FAQ Schema
Several trends are likely to influence how FAQ schema evolves through the rest of the decade.
AI Overviews as the New SERP Feature
Google's AI-generated overviews increasingly replace traditional rich results. Structured Q&A data is prime training and retrieval material for these summaries. Sites with honest FAQ schema are positioned to be cited.
Conversational Search
Gemini, ChatGPT, Perplexity, and similar conversational search products parse structured data for authoritative answers. Well-implemented FAQ schema makes your content discoverable through these channels.
Potential Rich Result Revival
If Google gauges the SERP environment and decides to reopen FAQ rich results to more sites, you're already prepared. No need to rush to implement after the fact.
Schema.org Vocabulary Evolution
Schema.org periodically expands its vocabulary. New subtypes or properties may emerge that refine Q&A markup further. Staying on top of the vocabulary ensures your schema remains up to date.
Final Thoughts
FAQ schema in 2026 is less about chasing rich results and more about signalling clear semantic structure to AI-driven search and future rich-result iterations. Implement it where it naturally fits — genuine Q&A sections with authoritative answers — and skip it everywhere else. The cost is minimal, the risk of misuse is meaningful, and the payoff compounds as Google's search surfaces increasingly consume structured data.
Pair FAQ schema with other on-page SEO fundamentals — strong title tags, clear heading structure, and solid internal linking — and your page becomes legible to every modern search surface. Use the schema generator to produce the JSON-LD, the structured data checker to validate, and a quarterly review to keep schema and visible content in sync.
Last updated: March 2026