FAQ Schema Template: Copyable FAQPage JSON-LD
FAQ schema is a FAQPage block of JSON-LD: a mainEntity list of Question items, each with a name (the question) and an acceptedAnswer holding an Answer with the text. Put it on the page where the same questions and answers are visible, in the HTML the server sends. Google limited FAQ rich results to well-known government and health sites in 2023 and stopped showing them on 7 May 2026, so expect no Google rich result; the markup still gives any parser your questions and answers as explicit pairs.
The template
Copy it into the page that shows the FAQ. Add or remove Question items so the list matches the visible FAQ exactly, one item per question.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "[First question, word for word as it appears on the page]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Its answer, word for word as it appears on the page]"
}
},
{
"@type": "Question",
"name": "[Second question]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Second answer]"
}
},
{
"@type": "Question",
"name": "[Third question]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Third answer]"
}
}
]
}
</script>
A filled example
The FAQ from the pricing page of Acme Rota, a made-up product. The optional @id gives the block a stable identifier, the page URL plus #faq.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "https://www.example.com/pricing#faq",
"mainEntity": [
{
"@type": "Question",
"name": "Is Acme Rota priced per user or per location?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Per location. Every plan includes unlimited staff accounts at that location."
}
},
{
"@type": "Question",
"name": "Can I cancel at any time?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Plans are billed monthly and you can cancel from the billing page. Your rotas stay exportable for 30 days after cancelling."
}
},
{
"@type": "Question",
"name": "Does Acme Rota run payroll?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Acme Rota exports approved hours to your payroll system; it does not pay staff."
}
}
]
}
</script>
The properties
| Property | On | What it holds |
|---|---|---|
| @type: FAQPage | The block | A web page presenting one or more frequently asked questions. FAQPage is a kind of WebPage in schema.org. |
| mainEntity | FAQPage | The list of Question items. One item per question on the page. |
| name | Question | The full question, as written on the page. |
| acceptedAnswer | Question | One Answer: the answer the site gives. |
| text | Answer | The full answer, as written on the page. Plain text is the safest choice. |
Where to place it
- On the page whose FAQ it describes, and nowhere else. One FAQPage block per page.
- In the head or the body; both are valid. What matters is that it is in the HTML the server returns, so parsers that do not run JavaScript still see it.
- Only for questions the site answers itself. A forum thread where readers post their own answers is a QAPage, not a FAQPage.
- Word for word with the page. Google's structured data guidelines say not to mark up content that is hidden from readers, and a mismatch between the markup and the page is a credibility problem with any reader.
- Generated from the same data as the visible FAQ where you can, so the two cannot drift apart. Every FAQ on fenn.sh is built that way.
How to validate it
- Check that it parses. One trailing comma or unescaped quote invalidates the whole block; run it through any JSON linter.
- Paste the URL or the code into the Schema Markup Validator at validator.schema.org. It checks types and properties against schema.org.
- Confirm it ships: fetch the page with curl and search the response for "FAQPage". If it only appears in the browser, it is being injected by JavaScript.
- Read each name and text against the visible FAQ and fix any difference.
- Do not expect a FAQ result from Google's Rich Results Test. Google announced that FAQ support would leave the test, the Search Console rich result report and the search appearance filter in June 2026. URL Inspection in Search Console still shows the HTML Google rendered.
The honest note on rich results
In 2023 Google restricted FAQ rich results to well-known, authoritative government and health websites. On 7 May 2026 it stopped showing them for everyone, and on 15 June 2026 it removed the FAQ rich result documentation. FAQPage itself is still a valid schema.org type, and there is no need to strip accurate markup from a page with a real FAQ.
So the reason to add FAQPage today is not a bigger search listing. It is that the markup states, without any guessing, which text is a question and which text answers it, in a vocabulary every schema.org parser understands. No AI assistant has said it rewards FAQPage markup, so treat it as a small accuracy aid on a page that already has a real FAQ, and never add an FAQ section just to carry the markup.
How Fenn helps
Fenn's readiness check includes schema and FAQ markup, and each failure becomes a fix with the exact change and a copyable prompt. Fenn also drafts answer-first pages for the questions your customers ask, with the facts only you can supply flagged for you to fill in. You approve every draft and apply every fix yourself.
FAQ
Does FAQ schema still produce rich results in Google?
No. Google limited FAQ rich results to well-known government and health websites in 2023, and stopped showing them for all sites on 7 May 2026.
Is FAQ schema still worth adding?
On a page that already has a real, visible FAQ, yes: it is cheap and states your questions and answers as explicit pairs for any parser. Do not add an FAQ section only to carry the markup.
Can I mark up questions that are not visible on the page?
No. Google's structured data guidelines say not to mark up content hidden from readers. Keep every name and text word for word with the visible FAQ.
What is the difference between FAQPage and QAPage?
FAQPage is for questions the site answers itself, one answer each. QAPage is for a page where one question gets answers from many people, such as a forum or community thread.
Should FAQ JSON-LD go in the head or the body?
Either is valid. Make sure it is in the HTML the server returns rather than added later by JavaScript, so parsers that do not run scripts still see it.
Sources
Checked on 14 October 2026.