Skip to content
Issue docs

No FAQPage schema on an FAQ section

Importantfaq_schema_faqIssue 94

What is this issue?

This issue reports an FAQPage schema block your page already declares that is malformed — a missing mainEntity, an empty question list, duplicate questions, or a Question missing its name or answer text — not a page that has FAQ content with no schema at all.

What this issue is not:

  • It does not guess. A support or help page with a fully rendered accordion of questions and answers, but no FAQPage JSON-LD, is never reported.
  • It does not compare the schema's questions against the page's visible text — only the schema's own internal consistency is checked.

Why it matters

FAQPage schema is important for AI search and voice assistants:

  • AI Overviews: Provides structured Q&A data that AI engines can use to answer user queries
  • Voice search: Voice assistants can read FAQ answers directly from structured data
  • Featured snippets: Q&A content may appear in featured snippets
  • User experience: Helps search engines understand and surface your FAQ content
  • Voice assistants: Enables voice assistants to provide accurate answers from your FAQ

Resolving this issue improves your SEO health score by ensuring Q&A content is properly structured for AI search and voice assistants.

How to fix it

If this issue was raised, your page already declares an FAQPage — open the finding for the exact entries at fault (PixyScan does not compare the schema against your visible Q&A; step 3 below is Google's own requirement for rich-result eligibility). The steps below are for a page that declares no FAQPage schema yet: worthwhile to add, and never reported as a defect while absent.

  1. Identify FAQ pages: Look for pages with FAQ URL patterns (/faq, /help, /support) or accordion Q&A sections

  2. Add FAQPage JSON-LD structured data to the page's <head> or before </body>:

    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "What is your return policy?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "We offer 30-day returns for all products in original condition."
          }
        },
        {
          "@type": "Question",
          "name": "Do you ship internationally?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes, we ship to over 150 countries worldwide."
          }
        }
      ]
    }
  3. Ensure schema matches visible content:

    • The Q&A in schema must exactly match what is visible on the page
    • Do not include hidden or collapsed Q&A unless expanded by default
    • All acceptedAnswer text should be visible by default
  4. Sync dynamically: Update schema dynamically from your CMS FAQ content

  5. Validate with Google's Rich Results Test


Notes

  • Google reduced FAQ rich result display in 2023, but the schema still provides strong signals for AI Overviews and voice search
  • Only use FAQPage schema for pages that actually have FAQ content
  • Ensure each Question has both name (question text) and acceptedAnswer with text (answer text)

Examples

Example 1: No Schema Declared — Not This Issue

<!-- FAQ page with a fully rendered Q&A, but no FAQPage schema -->
<html>
  <head>
    <title>Frequently Asked Questions - Example Store</title>
  </head>
  <body>
    <h1>Frequently Asked Questions</h1>

    <h2>What is your return policy?</h2>
    <p>We offer 30-day returns for all products in original condition.</p>

    <h2>Do you ship internationally?</h2>
    <p>Yes, we ship to over 150 countries worldwide.</p>
  </body>
</html>

Nothing is reported, however clearly the page reads as an FAQ. See How to fix it for why adding the schema is worth doing anyway.

Example 1b: The Same Page, With a Well-Formed FAQPage (passes)

<script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "What is your return policy?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "We offer 30-day returns for all products in original condition."
        }
      },
      {
        "@type": "Question",
        "name": "Do you ship internationally?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Yes, we ship to over 150 countries worldwide."
        }
      }
    ]
  }
</script>

Example 2: FAQPage Schema with Multiple Questions

Corrected state:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How long does shipping take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Standard shipping takes 3-5 business days. Express shipping takes 1-2 business days."
      }
    },
    {
      "@type": "Question",
      "name": "What payment methods do you accept?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We accept Visa, Mastercard, American Express, PayPal, and Apple Pay."
      }
    },
    {
      "@type": "Question",
      "name": "Can I track my order?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, you will receive a tracking number via email once your order ships."
      }
    }
  ]
}

Example 3: Incomplete FAQPage Schema

Problematic state:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is your return policy?"
    }
  ]
}

Missing acceptedAnswer property

Corrected state:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is your return policy?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We offer 30-day returns for all products in original condition."
      }
    }
  ]
}

How PixyScan detects this

  1. Read the declared structured data: every JSON-LD block is parsed, and @graph wrappers are flattened.

  2. Select declared FAQPage entities: any schema block whose @type is FAQPage. A page that declares none is not examined — a visible accordion of questions and answers, or a heading that says "FAQ", does not on its own trigger this check.

  3. Check the required property: a declared FAQPage must have a mainEntity property.

  4. Validate mainEntity, when present:

    • it must be a non-empty array
    • each entry must carry @type: "Question" — an entry with no @type at all, or with the wrong one, is flagged the same way
    • each Question needs a non-empty name; two questions with the same name (case-insensitively) are flagged as duplicates
    • each Question needs an acceptedAnswer carrying non-empty text
  5. This is reported when: the page declares an FAQPage missing mainEntity, or with an empty list, an entry with no or the wrong @type, duplicate questions, or entries missing a name or answer text. A page with visible FAQ content but no FAQPage schema at all is never reported. This check also does not compare the schema's questions against what is visibly rendered on the page.

What we store

Storage Level

Page Level — This issue is evaluated for each individual URL that contains structured data.


Database Table / Prisma Model

PageStructuredData


Stored Fields

Field Type Description
schemaType SchemaType The type of schema (e.g., Organization, Person)
schemaFormat SchemaFormat The format of the schema (JSON-LD, Microdata, RDFa)
schemaIdentifier String? Unique identifier for the schema
rawJson Json? The raw JSON-LD or structured data content
schemaErrors Json? Array of validation errors found in the schema
isValidSchema Boolean? Whether the schema is valid according to validation
missingFields Json? Reserved for future use — the crawler always writes null here today; no check currently populates it

Detection Dependencies

  • The following data sources are required to evaluate this issue:
  • HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
  • Structured Data Validation — The extracted schema is validated against Schema.org definitions
  • Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed

Further reading