All fix guides
NoticeAI & Answer Engines

FAQ Schema That Doesn't Match Your Page

Your Q&A structured data does not describe the page it sits on. Either a question or an answer in the markup is not in the page's visible text (`faq_schema_not_visible`), or a QAPage block carries more than one question when Google's QAPage documentation allows exactly one (`qapage_multiple_questions`). Google's structured data guidelines state the rule in one line: "Don't mark up content that is not visible to readers of the page" (Structured data general guidelines, last updated 2026-07-10, read 2026-09-23). The fix is to make the two agree: publish the text the markup claims, or delete the entries that describe text you are not publishing. Set your expectations first, because it changes what you are protecting: FAQ markup earns no Google rich result any more, so this is about not shipping a claim you cannot back, not about a lost SERP feature.

What this means

This is a notice covering two ways Q&A markup can end up describing something other than the page it is on. The audit read the FAQPage or QAPage JSON-LD in your page, pulled out the question and answer strings, and compared them against the text a reader sees.

faq_schema_not_visible — at least one question or answer in the markup could not be found in the page's visible text. The causes are almost always mundane rather than deliberate: an SEO plugin still emits questions that were deleted from the page months ago, a shared template renders the same FAQ block on every page while only one of them shows the content, someone added extra keyword-bearing questions straight into the schema because it was faster than editing the page, or a visible answer was reworded and the JSON-LD was never updated.

qapage_multiple_questions — the page declares "@type": "QAPage" and the block contains more than one Question. Google's QAPage documentation is unambiguous on both points: "There must only be one Question type definition per page", and "Don't use QAPage markup for FAQ pages or pages where there are multiple questions per page" (QAPage structured data, last updated 2026-09-08, read 2026-09-23). QAPage describes a community thread — one visitor asks, other people answer, answers can be voted on. A list of questions you wrote and answered yourself is a FAQPage, whatever the page is titled.

Two things this is not. Content inside an accordion or a <details> element is not hidden content: the text is in the page's HTML and a reader can open it, so it counts as visible. And a small wording difference between the markup and the page is not the finding this is built to catch — what it looks for is a question or an answer that appears nowhere on the page at all. An answer that shortens or rephrases what the page says is not flagged either, as long as it reuses the page's own wording. If your FAQ answers are only inserted by JavaScript after the page loads, they may genuinely be missing from the HTML that non-rendering crawlers read, which is a separate problem worth fixing on its own terms; see the guide on content invisible to AI crawlers.

Why it matters

Google's structured data general guidelines state the rule directly: "Don't mark up content that is not visible to readers of the page. For example, if the JSON-LD markup describes a performer, the HTML body must describe that same performer." The same page adds "Don't mark up irrelevant or misleading content, such as fake reviews or content unrelated to the focus of a page" (Structured data general guidelines, last updated 2026-07-10, read 2026-09-23). This is a published policy, not a style preference, and mismatched or invented Q&A is the most common way FAQ markup crosses it.

The documented consequence is narrow, and it is worth reading precisely rather than repeating the folklore version. Google says: "If your page contains a structured data issue, it can result in a manual action. A structured data manual action means that a page loses eligibility for appearance as a rich result; it doesn't affect how the page ranks in Google web search" (same source, read 2026-09-23). Now notice where that lands. FAQ markup has no rich result left to lose: Google removed FAQ rich results from Search on May 7, 2026 (Google Search Central changelog, read 2026-09-23), and HowTo rich results went in September 2023. So the cost is not paid by the FAQ block. It is paid by the page, which loses eligibility for every rich result it does qualify for — the product price and availability, the review stars, the breadcrumb trail, the article byline. That is the honest case for fixing this: you are risking the rich results that still work, for markup that was buying you nothing.

Be equally clear about what the markup is worth when it is correct, because it changes how much effort this deserves. FAQPage earns no Google rich result. Google's AI optimization guide says structured data is not required for its generative AI features and that there is no special markup to add (last updated 2026-07-10, read 2026-09-23). Microsoft is the one operator that claims a benefit, saying schema helps its AI systems read content with more confidence, for Copilot and AI answers in Bing (Microsoft Advertising blog, 2025-10-08, read 2026-09-23). OpenAI and Perplexity publish nothing either way. The one independent measurement we know of, a difference-in-differences study of 1,885 pages by Ahrefs (2026-05-11, read 2026-09-23; a vendor, and every page it measured was already cited heavily), found no citation uplift. Valid, matching Q&A markup is cheap machine-readability. It is not a citation lever, and nobody should be inventing questions to feed one.

There is also a cost that has nothing to do with Google. Structured data is read as a statement of fact by anything that parses the page, and a model reading your JSON-LD cannot check it against your body copy. A question and answer that exist only in the markup are a claim you are publishing without publishing it: an answer you never wrote, attributed to you, in the one format machines treat as authoritative. If the answer is good enough to mark up, put it on the page. If it is not on the page, it does not belong in the markup.

How to fix it

  1. 1

    Open the page and find the block

    Start from the page the audit named. View source and search for application/ld+json, then find the script block whose @type is FAQPage or QAPage. Read the mainEntity array against the page itself and identify which question or answer is not there. Be ready for the block not to live in the file you edit: SEO plugins, theme partials and tag managers all inject JSON-LD, and an FAQ block that nobody can find in the template is usually coming from one of those.

  2. 2

    Decide which side is wrong, then make them match

    There are exactly two ways to satisfy the rule, and both are legitimate. If the question is one you genuinely want to answer, publish the answer in visible text on the page and keep the markup. If it is a question you no longer answer, or one that was written for a search engine rather than a reader, delete that Question object from the JSON-LD. What you must not do is split the difference by hiding the text on the page — a zero-height container, display: none, white-on-white text or an off-screen block is the violation restated, not a workaround for it.

  3. 3

    Fix a QAPage that is really an FAQ

    If the finding is qapage_multiple_questions and you wrote both the questions and the answers, the type is wrong rather than the content. Change "@type": "QAPage" to "FAQPage" and make sure every entry in mainEntity is a Question carrying an acceptedAnswer, which is an Answer object with a text property. QAPage also allows suggestedAnswer for community answers that were never accepted; FAQPage has no equivalent, so fold that content into the single accepted answer or drop it. If the page really is a community thread and really does hold several separate questions, the markup is not the thing to change: Google's rule is one question per page, so the fix is to give each question its own URL.

  4. 4

    Fix the generator, not just this page

    A single mismatched block is a typo; a template that produces them is a recurring bill. Find what writes the JSON-LD and make it read from the same content that renders the page, so the two cannot drift. The FAQ blocks in Yoast SEO and Rank Math do this by construction, because you type the question and the answer into the editor and the markup is generated from that. A snippet pasted into a theme header, or an FAQ block injected through a tag manager, does not: the markup and the page are then edited by different people in different systems, which is exactly how the drift starts.

  5. 5

    Consider whether to keep the block at all

    This is a real option, not a shrug. FAQPage markup earns no Google rich result, Google says structured data is not required for its AI features, and only Microsoft claims a benefit for Copilot. If you have an FAQ block that nobody owns and nothing keeps in sync, deleting it costs you very little and removes the risk completely. Keep it when the markup is generated from the visible content and stays correct on its own; that version is cheap and harmless. Keep a block you have to hand-maintain only if you are actually going to maintain it.

  6. 6

    Validate, then re-run this audit

    Paste the corrected block into validator.schema.org to confirm it still parses and uses the vocabulary correctly. Google removed FAQ support from the Rich Results Test in June 2026, so that tool will not check an FAQ block at all (Google Search Central changelog, read 2026-09-23). Note what the Schema.org validator does and does not do: it checks syntax and vocabulary, and it does not compare your markup against your visible text, so a clean pass there is not evidence this finding is resolved. Re-run this audit to confirm it clears. If the page already picked up a structured data manual action, fix the mismatch first, then request a review in the Manual Actions report in Search Console.

Example

<!-- WRONG: the page shows the shipping question, but the returns question and
     its answer exist only here. Nothing on the page says "30 days", so this is
     content marked up but not visible to readers. -->
<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 orders ship within 2 business days."
      }
    },
    {
      "@type": "Question",
      "name": "What is your return policy?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "You can return unused items within 30 days for a full refund."
      }
    }
  ]
}
</script>

<!-- WRONG: an owner-written FAQ typed as QAPage. Google allows exactly one
     Question per QAPage, and says not to use it for FAQ pages at all. -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "mainEntity": [
    { "@type": "Question", "name": "How long does shipping take?" },
    { "@type": "Question", "name": "What is your return policy?" }
  ]
}
</script>

<!-- RIGHT: FAQPage, and every question and answer is on the page. The <details>
     blocks start collapsed, which is fine — the text is in the HTML and a
     reader can open it. -->
<h2>Frequently asked questions</h2>
<details>
  <summary>How long does shipping take?</summary>
  <p>Standard orders ship within 2 business days.</p>
</details>
<details>
  <summary>What is your return policy?</summary>
  <p>You can return unused items within 30 days for a full refund.</p>
</details>

<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 orders ship within 2 business days."
      }
    },
    {
      "@type": "Question",
      "name": "What is your return policy?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "You can return unused items within 30 days for a full refund."
      }
    }
  ]
}
</script>

The first block marks up an answer the page never gives; the second gives an owner-written FAQ the QAPage type. The third publishes every question and answer and marks up exactly what is there.

Free tool
Check this with the Schema Markup Validator

Frequently asked

Does the answer in my markup have to match the page word for word?

It has to be the same content, visible on the page. Google's rule is that you must not mark up content that is not visible to readers of the page (Structured data general guidelines, last updated 2026-07-10, read 2026-09-23). Minor formatting differences are not the problem — the answer text may contain basic HTML such as links and lists, and whitespace does not matter. What this finding is looking for is a question or an answer that a reader cannot find on the page at all. The reliable way to never think about this again is to generate the JSON-LD from the same content that renders the page.

My FAQs are in an accordion that starts collapsed. Is that hidden content?

No. Accordion FAQs are fine as long as the content is present in the HTML and a reader can expand it. Collapsed-by-default is a presentation choice, not concealment. The rule is about content a reader cannot reach at all: questions that were never published, answers that exist only in the JSON-LD, or text pushed off-screen or set to display: none so that only a parser sees it.

What actually happens if I leave a mismatched FAQ block in place?

Google's stated consequence is a structured data manual action, and it says that means "a page loses eligibility for appearance as a rich result; it doesn't affect how the page ranks in Google web search" (Structured data general guidelines, read 2026-09-23). The sting is in the scope. FAQ has had no rich result since May 7, 2026, so nothing is taken from the FAQ block itself — the page loses eligibility for the rich results it does earn, such as product price, review stars or breadcrumbs. Your rankings are not affected, and there is no separate penalty for having FAQ markup.

Should I just delete my FAQ schema instead of fixing it?

That is a defensible choice and we will not talk you out of it. FAQPage markup earns no Google rich result, Google says structured data is not required for its generative AI features (AI optimization guide, last updated 2026-07-10, read 2026-09-23), Microsoft alone says schema helps its systems read content for Copilot (2025-10-08, read 2026-09-23), and Ahrefs measured no citation uplift from adding it (2026-05-11, read 2026-09-23). So what you give up by deleting an unmaintained block is small and uncertain. What you should not do is leave a block in place that claims content you do not publish, because that has a documented cost and no upside.

What is the difference between FAQPage and QAPage, and why was mine flagged?

FAQPage is for a list of questions that you, the site owner, wrote and answered, all visible on the page. QAPage is for a community page where one visitor asks a question and other people submit answers that can be voted on. Google's QAPage documentation says "There must only be one Question type definition per page" and "Don't use QAPage markup for FAQ pages or pages where there are multiple questions per page" (last updated 2026-09-08, read 2026-09-23). qapage_multiple_questions fires when a page marked up as QAPage carries several questions, which is almost always an owner-written FAQ that was given the wrong type.

Does your site have this issue?

Run a free, AI-powered audit and we’ll flag this and 150+ other checks in about a minute. No signup.

No signup needed. Results in under 60 seconds.

Related fixes