TL;DR
FAQPage JSON-LD can power expandable questions in Google results, but since 2023/2024 Google has tightly limited who gets FAQ rich results (often authoritative / government / health contexts in many markets; policies shift). Even without the snippet, on-page FAQs still help UX, featured snippets, and E-E-A-T. This guide focuses only on FAQ (complementing the general JSON-LD article): when schema is worth it, how to avoid content↔markup mismatch, how to ship it in Next.js, and how to test in Rich Results Test / GSC. Organization, BlogPosting, and BreadcrumbList live in the Schema.org overview post.
Who is this for
- Service firms with FAQ sections on offers, landings, or blogs
- Next.js developers adding structured data from markdown
- SEOs who saw competitor FAQ SERP features and need a compliance checklist
- Teams that lost FAQ rich results (do not panic, the content remains)
- Authors with FAQ in HTML but no JSON-LD (or the reverse)
Keyword
faqpage json-ld, schema faq rich results 2026, faqpage nextjs, faq structured data google, rich results test faq, faq seo corporate website
What FAQPage is (and is not)
FAQPage is a Schema.org type for a page with questions and answers. In JSON-LD:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long does a corporate website launch take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A typical scope is 4–8 weeks from brief to production, depending on locales and integrations."
}
}
]
}| It is | It is not |
|---|---|
| Markup for a visible on-page FAQ | A way to stuff invisible keywords |
| Complementary to QAPage (user Q&A threads) | A replacement for Organization / LocalBusiness |
| A potential rich result | A guaranteed #1 ranking |
QAPage ≠ FAQPage: QA is forum-style threads. Corporate sites almost always want FAQPage.
When Google shows (or withholds) FAQ rich results
Google’s policy evolves. Practical 2026 reality:
- FAQ rich results are restricted, many ordinary commercial pages do not get the snippet despite valid JSON-LD
- FAQ + schema is still worth it for UX, long answers under featured snippets, and People Also Ask alignment
- Markup must mirror visible content
- Medical / YMYL topics face stricter rules
Business takeaway: write FAQs for users and sales (scope, process, “from” pricing); treat the rich result as a bonus, not KPI #1.
Compliance pitfalls
- Every JSON-LD question must appear on the page (HTML), accordion is fine if present after SSR
- Schema answer ≈ visible answer (not a teaser vs an essay)
- No ads / “buy now” as the only answer content
- No FAQ about a different URL
- Avoid cloning the same FAQ across 20 landings, thin + spammy
- Do not mix Review and FAQ into one confusing block
- Language matches the locale (EN copy on
/en)
| Mistake | Outcome |
|---|---|
| Schema FAQ, no UI section | Rejection / quality issues |
| 40 keyword-stuffed questions | Markup ignored |
| Client-only FAQ (empty HTML) | Google misses the content |
| FAQ as images only | No text for snippets |
Where FAQs pay off on a service site
| URL | FAQ job |
|---|---|
| Offer / services | “From” pricing, timeline, scope, hosting |
| Ads landing | Claims aligned with the ad |
| Case study | Method, stack, limits |
| Guide post | Summary + CTA |
| Contact | Reply SLA, what to prepare for a brief |
3–7 strong questions beat 25 vague ones.
Next.js App Router implementation
1. FAQ in blog markdown
If your pipeline detects a ## FAQ section and emits JSON-LD, keep questions as ### Question plus an answer paragraph. Parser consistency means zero HTML↔schema drift.
2. Manual script on an offer page
// components/FaqJsonLd.tsx
type FaqItem = { question: string; answer: string };
export function FaqJsonLd({ items }: { items: FaqItem[] }) {
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: items.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
);
}3. Visible accordion (SSR)
export function FaqSection({ items }: { items: FaqItem[] }) {
return (
<section aria-labelledby="faq-heading">
<h2 id="faq-heading">FAQ</h2>
<div>
{items.map((item) => (
<details key={item.question}>
<summary>{item.question}</summary>
<p>{item.answer}</p>
</details>
))}
</div>
<FaqJsonLd items={items} />
</section>
);
}details/summary is accessible and indexable without JavaScript. Avoid FAQs loaded only in useEffect from an API unless the same copy is in the RSC HTML.
4. CMS / database-backed FAQ
If offer FAQs live in Branchly, feed the same records into UI and JSON-LD from a Server Component, one source of truth. SSR hosting on DevStudioIT Cloud ensures the first HTML response contains the questions.
Testing
- Rich Results Test, URL or code
- GSC enhancement / rich-result reports when available
- View Source / crawled page, FAQ present in HTML?
- After changes: wait for re-crawl; missing snippet ≠ broken schema
Schema.org validation ≠ guaranteed Google display.
FAQ alongside other types on one page
One URL can carry:
Organization/WebSite(layout)BreadcrumbListFAQPageServiceorBlogPosting
Use @graph or separate JSON-LD scripts. Do not force FAQ into Article alone on a services offer page.
Publish checklist
- 3–7 real customer questions (from calls / email)
- Concrete answers, no fluff
- Section visible in SSR HTML
- JSON-LD 1:1 with the UI
- Locale matches the URL
- Rich Results Test clean of critical errors
- CTA after FAQ →
#formularz-kontakt - After 30 days: GSC + whether a snippet appeared (bonus)
FAQ
Is FAQ schema useless without a rich result?
No. It structures content, supports classic snippets / PAA, and helps assistants. The rich result is optional.
How long should answers be?
Long enough to close the question (usually 2–5 sentences). Move essays into articles and link out.
Can I put FAQPage on every subpage?
Only with unique, on-topic FAQs. Cloning the same block everywhere looks spammy.
FAQ inside a click-opened modal, OK?
Risky if content is missing from the initial HTML. Prefer an SSR accordion.
CTA
Want FAQ + JSON-LD on your Next.js offer pages and blog, with SSR and rich-result testing?
- Book FAQ schema implementation, copy, JSON-LD, DevStudioIT Cloud, Branchly
About the author
We build fast websites, web/mobile apps, AI chatbots and hosting setups — with a focus on SEO and conversion.
Recommended links
From theory to production — Branchly, our hosting stack and shipped work.
