# FAQ pages include FAQPage schema with questions and answers

- **Pattern:** `ab-002486` (`seo-advanced.structured-data.faq-schema`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-002486
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-002486)

## Why it matters

FAQ pages with visible Q&A content but no FAQPage schema forfeit an outsized SERP feature: Google expands FAQ Rich Results below the title link, sometimes doubling the vertical SERP footprint of a single result. The schema-org FAQPage and Question types are explicitly supported by Google for this expansion. A site with 10 FAQ questions that omits schema loses this real estate to any competitor who implements it. The mismatch between visible content and schema `mainEntity` is a common AI-generated defect — questions get hardcoded in markup but the schema block is never updated.

## Severity rationale

Medium because FAQ Rich Results expand SERP footprint significantly, but the failure affects only pages with FAQ content and doesn't break core site functionality.

## Remediation

Sync your FAQ schema `mainEntity` array to exactly match the visible questions rendered on the page. In `app/faq/page.tsx`, generate the schema from the same data source that populates the UI — never maintain them separately:

```tsx
const faqs = [
  { q: 'What is your return policy?', a: 'We offer 30-day returns with original receipt.' },
  { q: 'Do you ship internationally?', a: 'Yes, to 45 countries via DHL Express.' },
]

const schema = {
  '@context': 'https://schema.org',
  '@type': 'FAQPage',
  mainEntity: faqs.map(({ q, a }) => ({
    '@type': 'Question',
    name: q,
    acceptedAnswer: { '@type': 'Answer', text: a },
  })),
}
```

Each `Question` requires both `name` and `acceptedAnswer`. Validate that schema question count matches visible page question count before deploying.

## Detection

- **ID:** `faq-schema`
- **Severity:** `medium`
- **What to look for:** Count all FAQ pages or sections that display question-and-answer content. For each, check for FAQPage schema with a `mainEntity` array of Question objects containing at least `name` (question text) and `acceptedAnswer` (answer text). Before evaluating, extract and quote the first 2 visible FAQ questions from the page, then verify they appear in the schema `mainEntity` array.
- **Pass criteria:** Every FAQ page or section with at least 1 visible Q&A pair includes FAQPage schema where at least 90% of visible questions have matching `mainEntity` entries with `name` and `acceptedAnswer` properties that match the visible page content.
- **Fail criteria:** FAQ pages lack FAQPage schema entirely, or the schema exists but fewer than 90% of visible questions have matching `mainEntity` entries.
- **Skip (N/A) when:** The project has no dedicated FAQ page or section with visible question-and-answer content.
- **Detail on fail:** `"FAQ page has 8 visible questions but FAQPage schema contains only 3"` or `"FAQPage schema present but answer text differs from visible content"`.
- **Remediation:** FAQPage schema enables FAQ Rich Results in search. Add it to FAQ page components or in `app/faq/page.tsx`:

  ```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 with original receipt."
        }
      }
    ]
  }
  ```

## External references

- schema-org FAQPage
- schema-org Question

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-002486
