FAQPage schema: mainEntity, Question and acceptedAnswer
FAQ markup with no mainEntity, or Question entries missing name or acceptedAnswer. squirrel checks the structure on every page that carries it.
What FAQPage schema is
FAQPage is the schema.org type for a page of questions and answers written by the site itself. Its mainEntity holds an array of Question nodes, each with a name holding the question text and an acceptedAnswer holding an Answer with a text. A page where readers submit competing answers is QAPage, not FAQPage.
Google stopped showing FAQ rich results in Search on 7 May 2026 and removed the documentation for the feature, having already restricted it in August 2023 to well-known government and health sites. The markup is still valid schema.org and still describes the page accurately for any other consumer, which is why this rule checks the structure rather than telling you to add it.
What squirrel checks
The rule reads every script[type="application/ld+json"] on the page and keeps the first FAQPage node from the last script that contains one, matching either a plain @type or an @type array. It emits one or two checks:
faq-schema: reports at info status with the messageNo FAQPage schema foundwhen no such node exists. No further checks run.faq-mainEntity: warns with the messageFAQPage missing mainEntityand the valueAdd array of Question itemswhenmainEntityis absent.faq-questions: warns with the messageFAQPage has no questionswhenmainEntityis an empty array. It warns with the messageN question(s) missing required propertiesand the valueEach Question needs @type, name, acceptedAnswerwhen at least one entry lacks any of the three. AmainEntityentry that is a node reference,{"@id": "…#q1"}as Yoast writes it, is read from the node with that@idanywhere in the page’s JSON-LD, in the same@graphor another script. A reference to a node the page does not have is counted as missing its properties.faq-valid: emitted only when at least one entry is valid, passing with the messageFAQPage has N valid question(s).
An entry counts as valid only when its @type is exactly the string Question. An entry whose @type is an array containing Question is counted as invalid. A mainEntity holding a single object rather than an array is accepted and treated as one question. Every property test is a truthiness test rather than a presence test, so a property present but empty, 0 or false counts as missing. A mainEntity of "" or 0 therefore reports as missing.
How to fix it
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "How long does delivery take?",
"acceptedAnswer": { "@type": "Answer", "text": "Three to five working days." }
}]
}
</script>Put it in the <head> of the FAQ page, and keep every question and answer visible in the page content as well.
JSON-LD wrapped in an @graph array, which is what Yoast, Rank Math and several other generators emit, is read the same as a top-level node: the rule flattens each script before looking for FAQPage.
| Rule ID | schema/faq |
| Category | Structured Data |
| Scope | Per-page |
| Severity | warning |
| Weight | 4/10 |
Enable / disable
Disable this rule
[rules]
disable = ["schema/faq"]Disable all Structured Data rules
[rules]
disable = ["schema/*"]Enable only this rule
[rules]
enable = ["schema/faq"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- schema/json-ld-valid: whether the JSON-LD parses and passes schema.org validation at all.
- content/heading-hierarchy: the heading structure an FAQ page normally uses for the same questions.
- ax/llms-txt: the plain-text summary agents read, which often covers the same ground as an FAQ.
- schema/article: the type to use when the page is a written article rather than a question list.
Structured data findings ship in every audit next to the core SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
- Changes to HowTo and FAQ rich results, Google Search Central Blog
- Search documentation updates, Google Search Central
- FAQPage, schema.org
Check your site
Run squirrel audit https://example.com and open the Structured Data section of the report. Each FAQ page shows how many questions validated. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.