/ โ† Schema Debugger Fixes / FAQPage Schema Errors
In this guide
  1. What FAQPage markup is, and who gets the rich result
  2. The fields FAQPage needs
  3. The errors you will see, and what each one means
  4. Fixing JSON that cannot be read
  5. Making the markup match the page
  6. The fix, step by step
  7. FAQPage inside a larger @graph
  8. Stopping it from coming back
  9. Questions and answers

What FAQPage markup is, and who gets the rich result

FAQPage is a schema.org type for a page that lists questions written by the site owner, each with one answer, also written by the site owner. The markup is a list: one FAQPage whose mainEntity holds a Question for each question, and each Question holds an acceptedAnswer of type Answer.

Since August 2023 Google only shows the FAQ rich result, the expandable questions under a search listing, for well-known, authoritative government and health websites. For every other site the markup is still read and still valid, but the drop-down questions are not shown in Google Search. That change is why many site owners saw FAQ results disappear without touching their pages: nothing was broken, the display was withdrawn.

So why fix it at all? Because the markup is still used. Other search engines read it, AI answer engines use clear question-and-answer pairs when they quote a page, and a broken block is reported as an error in Search Console and in audits, which hides real problems among the noise. A clean, accurate FAQPage block costs nothing to keep and removes a warning from every report.

๐Ÿ’ก If your page is not a government or health site, do not expect the FAQ drop-downs to return after a fix. Judge the fix by a clean result in the Rich Results Test and the Schema Markup Validator, not by what appears in Google Search.

When FAQPage is the wrong type

The fields FAQPage needs

FAQPage has very few fields, and every one of them is required. A missing field is the most common error in audits and in the Rich Results Test.

TypeFieldWhat it holds
FAQPagemainEntityAn array of Question items, one for each question on the page.
QuestionnameThe full text of the question, as shown on the page.
QuestionacceptedAnswerOne Answer item. Not an array of several answers.
AnswertextThe full answer. It may contain limited HTML: headings, paragraphs, line breaks, lists, links, bold and italic.

Everything else is optional. Adding extra properties such as author or dateCreated to a Question does no harm, but it does not help the FAQ result either.

A correct block you can copy

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How long does delivery take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Orders placed before 2pm are sent the same day and usually arrive in 1 to 2 working days."
      }
    },
    {
      "@type": "Question",
      "name": "Can I return an item?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. You have 30 days to return an unused item. <a href=\"https://example.com/returns\">Start a return</a>."
      }
    }
  ]
}
</script>

Note the link inside the second answer: the double quotes around the address are escaped with a backslash (\"). Without the backslashes the JSON ends early and the whole block is unreadable.

The errors you will see, and what each one means

These are the messages the Rich Results Test, the Schema Markup Validator, Search Console and the Schema Debugger give for FAQPage, with the cause behind each one.

MessageCauseFix
Missing field "acceptedAnswer"A Question has no answer, often an empty answer box in a plugin or a question added without one.Add an acceptedAnswer with an Answer and its text, or remove the Question.
Missing field "name"The question text is in text or headline instead of name.Put the question in name.
Missing field "text" (in acceptedAnswer)The answer is in name or description, or the field is empty.Put the answer in text and make sure it is not blank.
Invalid object type for field "mainEntity"mainEntity holds a string, or objects without "@type": "Question".Make mainEntity an array of objects, each with "@type": "Question".
Unparsable structured data / Parsing error: Missing ',' or '}'The JSON is broken: a trailing comma, a curly quote, an unescaped quote or a raw line break.See the parsing section below.
Duplicate field "FAQPage"Two FAQPage blocks on one page, usually a plugin and a theme both adding one.Keep one source and switch the other off.
Page not eligible for rich results (FAQ detected)The markup is valid, but the site is not a government or health site.Nothing to fix. The markup is correct.

Fixing JSON that cannot be read

An unparsable block is worse than a missing field: the whole script is ignored, including any other types in the same block, such as your Organization or BreadcrumbList. Four mistakes cause almost all of them.

1. A comma after the last item

    { "@type": "Question", "name": "...", "acceptedAnswer": { ... } },
  ]      <-- the comma before ] breaks the JSON

JSON does not allow a comma after the last item in a list or the last field in an object. This happens most often when a question is deleted by hand and the comma before it is left behind.

2. Curly quotes

Word processors and some CMS editors turn " into โ€œ and โ€. JSON only accepts straight double quotes around names and values. Curly quotes are fine inside the text of an answer, but never as the quotes that open or close a value.

3. A double quote inside the answer

"text": "Use the "Returns" button on your account page."          <-- broken
"text": "Use the \"Returns\" button on your account page."        <-- fixed

4. A line break inside the text

A raw line break inside a value ends the string. Keep each answer on one line, or use <br> or <p> tags inside the text for breaks that should show.

โš ๏ธ When the answer comes from a CMS field, fix the template, not the one page. A template that outputs the field without escaping it will break again the next time someone types a quote mark into an answer. In PHP, output the whole block with json_encode(); in JavaScript, build an object and use JSON.stringify(). Both escape quotes and line breaks for you.

Making the markup match the page

Google's rule is simple: every question and answer in the markup must be visible to the reader on the same page. Markup for content that is hidden, on another page, or different from what the reader sees is treated as misleading and can lead to a manual action that removes all rich results from the site.

๐Ÿ’ก The most reliable way to keep them in line is to build the markup from the same data as the visible FAQ, so there is only one copy of each question to edit. The Schema Debugger compares the markup with the page text and lists questions that are in one but not the other.

The fix, step by step

Step 1

Find every FAQPage block on the page

Open the page source (Ctrl+U, or Cmd+Option+U on a Mac) and search for FAQPage. Note each match and where it comes from: an SEO plugin (Yoast, Rank Math, All in One SEO), a block from the page builder, the theme, or code added by hand. The Schema Debugger lists every block on the page with its source position, which is quicker on long pages.

Step 2

Fix JSON that cannot be read

Paste the block into the Schema Markup Validator. If it reports a parsing error, it gives the line and column; the fault is almost always one of the four in the parsing section. Fix it at the source, the template or the plugin field, not in a saved copy of the HTML. Then paste the corrected block in again and repeat until the validator reads it without a parsing error.

Step 3

Add the required fields

Check that the FAQPage has a mainEntity array, that each Question has name and acceptedAnswer, and that each Answer has text. In a plugin, a missing field usually means an empty question or answer box: fill it in or delete the row. When the markup is written by hand, compare it with the correct block in the required fields section above.

Step 4

Make the markup match the page

Read the visible FAQ and the markup side by side. Remove questions that are no longer on the page, add any visible question that is missing from the markup, and bring shortened answers into line with the full answer the reader sees. The wording should be the same, or very close, in both places, and the questions should appear in the same order on the page and in the markup.

Step 5

Keep one FAQPage block

If two sources output FAQPage, keep the one that is easiest to keep in line with the page and switch the other off. In Yoast and Rank Math the FAQ block adds its own markup, so do not also add FAQPage by hand or through a second schema plugin. After switching one source off, view the page source again and search for FAQPage to confirm only one block is left.

Step 6

Test and request a recrawl

Test the live URL in the Rich Results Test and the Schema Markup Validator. When both are clean, use URL Inspection in Search Console and choose Request indexing. Search Console reports usually update within a few days to two weeks as Google recrawls. On the FAQ report, choose Validate fix so Google rechecks every affected page and tells you when they pass.

FAQPage inside a larger @graph

Many sites output one JSON-LD block with an @graph that holds the WebPage, Organization, BreadcrumbList and FAQPage together. That is fine, and it keeps everything in one place. Two points matter:

{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "WebPage", "@id": "https://example.com/delivery#webpage", "url": "https://example.com/delivery", "name": "Delivery" },
    { "@type": "FAQPage", "@id": "https://example.com/delivery#faq", "isPartOf": { "@id": "https://example.com/delivery#webpage" },
      "mainEntity": [ { "@type": "Question", "name": "...", "acceptedAnswer": { "@type": "Answer", "text": "..." } } ] }
  ]
}

Stopping it from coming back

Questions and answers

1. Why did my FAQ rich results disappear from Google?

Since August 2023 Google only shows FAQ rich results for well-known, authoritative government and health websites. If your site is neither, the drop-down questions under your listing stopped showing even though your markup is still valid and nothing on your page is broken. Fixing or rewriting the markup will not bring them back. Judge your FAQ markup by a clean result in the Rich Results Test and the Schema Markup Validator instead of by what appears in Google Search.

2. Is FAQPage markup still worth adding?

Yes, if the page really is a list of questions you answer. The markup is still read by Google, by other search engines and by AI answer engines, and it states plainly which answer belongs to which question, so an assistant can quote your answer accurately. Valid markup also keeps your Search Console and audit reports free of errors that hide real problems. Do not add FAQPage to pages that are not FAQs just to get markup on them.

3. What does "Missing field acceptedAnswer" mean?

It means one of your Question items has no answer attached to it. It usually comes from an empty answer box in an SEO plugin or page builder block, or from a question added by hand without its answer. Open the FAQ block, find the question with the blank answer and either write the answer or delete the question. Every Question needs an acceptedAnswer holding one Answer, and every Answer needs its text filled in.

4. Can the answer text contain links and lists?

Yes. The text of an Answer may contain a limited set of HTML: headings, paragraphs, line breaks, ordered and unordered lists, links, and bold and italic text. Anything else is ignored. Because the answer sits inside a JSON string, every double quote in the HTML, such as the quotes around a link address, must be escaped with a backslash, or the whole block breaks. Letting a JSON encoder build the block handles this for you.

5. Should I use FAQPage or QAPage?

Use FAQPage when the site owner wrote both the questions and the answers, and each question has one answer, such as a delivery or returns FAQ. Use QAPage when visitors can post answers, or when one question can have several competing answers, such as a forum thread, a support community or a product question with customer replies. Choosing the wrong type is a common reason for markup that validates but is never shown.

6. Can I have two FAQPage blocks on one page?

No. Two FAQPage blocks on the same page are reported as a duplicate, and search engines may ignore both. It usually happens when an SEO plugin and a page builder, or a theme and a plugin, each output their own block. Keep one FAQPage that lists every question in its mainEntity array, and switch off the FAQ output in the other source rather than deleting the visible questions from the page.

7. How long before Search Console shows the fix?

After you request indexing with the URL Inspection tool, Google usually recrawls the page within a few days. The FAQ enhancement report in Search Console updates as Google recrawls each affected page, which can take up to two weeks across a whole site. You can speed up the report by choosing Validate fix once the pages are corrected. Check each page straight away in the Rich Results Test rather than waiting for the report.

Check your FAQ markup now

The Schema Debugger lists every structured data block on a page, shows each missing or invalid field, and compares your FAQ markup with the visible questions.

Open Schema Debugger Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Schema Debugger Fixes  ·  Schema Debugger Guide  ·  HowTo Schema Errors  ·  Product Schema Errors  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.