---
name: aeo-structured-data
slug: aeo-structured-data
description: This skill should be used when the user asks to "add schema markup for AI search", "implement structured data for AEO", "set up FAQPage schema", "add HowTo schema", "use structured data for AI engines", "implement schema for ChatGPT", "add JSON-LD for AEO", "structured data for answer engines", or any variation of implementing, designing, or optimizing schema markup and structured data for answer engine optimization.
category: general
---

# AEO Structured Data

Structured data (schema markup) tells AI engines what your content represents. Without it, AI engines guess. With it, they extract accurately. Schema markup is the single fastest AEO win — it takes 30 minutes per page and dramatically improves citation accuracy.

For AEO, structured data serves a different purpose than for SEO. In SEO, schema earns rich results (stars, FAQs, breadcrumbs in Google). In AEO, schema makes content extractable — it tells AI crawlers "this is a question-answer pair" or "this is a step-by-step process" so they can lift it cleanly.

## Schema Types by Page Type

Every page type has a primary and secondary schema. Apply both.

| Page type | Primary schema | Secondary schema | Why |
|-----------|---------------|-----------------|-----|
| Category definition | `FAQPage` | `Article` + `Organization` | Marks Q&A pairs for extraction + establishes entity |
| Comparison (X vs Y) | `FAQPage` | `Article` | Comparison questions are top AI queries |
| How-to / tutorial | `HowTo` | `Article` | Enables step-by-step extraction |
| Pricing page | `Product` with `offers` | `FAQPage` | Structures pricing data for factual extraction |
| Integration page | `SoftwareApplication` | `HowTo` | Marks integration as factual + setup steps |
| Blog post / article | `Article` | `FAQPage` (if FAQ section present) | Author + date signals recency |
| Product / feature page | `SoftwareApplication` | `FAQPage` | Marks product attributes for extraction |
| Glossary page | `DefinedTermSet` | `FAQPage` | Marks definitions for extraction |
| Case study | `Article` | `Organization` | Attribution + entity |
| All pages (site-wide) | `Organization` | `WebSite` with `SearchAction` | Establishes site-level entity identity |

---

## Schema Implementation Rules

### Required fields (every schema)

These fields must be present on every schema implementation. Missing any one reduces extraction quality.

| Field | Why it matters for AEO | Example |
|-------|----------------------|---------|
| `@context` | Validates the schema | `"https://schema.org"` |
| `@type` | Tells engines what the content is | `"FAQPage"`, `"HowTo"`, `"Article"` |
| `name` or `headline` | The primary identifier | `"How to Set Up Lead Scoring in HubSpot"` |
| `datePublished` | Establishes when content was created | `"2026-01-15"` |
| `dateModified` | Recency signal — AI engines weight this heavily | `"2026-04-28"` |
| `author` | Trust signal — anonymous content ranks lower | `{"@type": "Person", "name": "Jane Kim"}` |

**`dateModified` is the single most important AEO schema field.** AI engines heavily weight recency. Update this field every time you edit the page. Never fake it — set it to the actual last-edit date.

### Format: JSON-LD only

- Always use JSON-LD format (`<script type="application/ld+json">`)
- Never use Microdata or RDFa. JSON-LD is the standard all AI engines parse reliably
- Place JSON-LD in the `<head>` section, not the body
- One `<script>` block per schema type. Multiple schemas on one page = multiple script blocks

---

## Schema Templates

### FAQPage

Use for any page with a question-answer section. The highest-value AEO schema.

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is revenue intelligence?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Revenue intelligence is a category of software that captures and analyzes customer interaction data — calls, emails, meetings — to surface insights that help sales teams close more deals. It combines conversation intelligence, deal analytics, and forecasting into a single platform."
      }
    },
    {
      "@type": "Question",
      "name": "How much does revenue intelligence software cost?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Revenue intelligence platforms typically cost $50-150 per user per month. Enterprise plans with custom integrations and unlimited storage start at $200+ per user per month. Most vendors require annual contracts with a minimum of 10-25 seats."
      }
    }
  ]
}
```

**Rules:**
- Schema text must exactly match visible page content. No hidden Q&A pairs
- 5-12 questions per `FAQPage`. Fewer than 5 is too thin. More than 12 risks Google ignoring the schema
- Each answer: 2-4 sentences, self-contained, factual

### Article

Use for blog posts, guides, comparison pages, and any editorial content.

```json
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Notion vs Confluence: Which Is Better for Your Team?",
  "author": {
    "@type": "Person",
    "name": "Jane Kim",
    "url": "https://example.com/team/jane-kim"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Acme",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "datePublished": "2026-01-15",
  "dateModified": "2026-04-28",
  "description": "A detailed comparison of Notion and Confluence for team collaboration, covering features, pricing, integrations, and best use cases."
}
```

**Rules:**
- Always include a real `author` with a name and URL. Anonymous articles rank lower in AI engines
- `dateModified` must reflect the actual last edit. AI engines compare this across competing sources
- `description` should be a single, extractable summary sentence

### HowTo

Use for tutorials, setup guides, and step-by-step processes.

```json
{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Set Up Lead Scoring in HubSpot",
  "description": "A step-by-step guide to configuring lead scoring in HubSpot using contact properties, engagement data, and custom criteria.",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Define scoring criteria",
      "text": "Navigate to Settings > Properties > Contact scoring. Define positive score attributes (job title match, company size, page visits) and negative attributes (competitor domain, unsubscribed, inactive 90+ days)."
    },
    {
      "@type": "HowToStep",
      "name": "Set score thresholds",
      "text": "Set the MQL threshold at 50 points and the SQL threshold at 80 points. These thresholds determine when a lead is routed to sales."
    }
  ],
  "totalTime": "PT30M"
}
```

**Rules:**
- Each step must be self-contained. AI engines may extract individual steps
- Include `totalTime` when applicable — AI engines surface this in answers
- 3-10 steps. Fewer is too thin. More than 10 should be split into separate guides

### Product (with offers)

Use for pricing pages and product overview pages.

```json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Acme CRM",
  "description": "Acme CRM is a sales CRM built for B2B SaaS teams with built-in sequencing, pipeline management, and revenue forecasting.",
  "brand": {
    "@type": "Organization",
    "name": "Acme"
  },
  "offers": [
    {
      "@type": "Offer",
      "name": "Starter",
      "price": "29",
      "priceCurrency": "USD",
      "priceSpecification": {
        "@type": "UnitPriceSpecification",
        "price": "29",
        "priceCurrency": "USD",
        "referenceQuantity": {
          "@type": "QuantitativeValue",
          "value": "1",
          "unitText": "user/month"
        }
      }
    }
  ]
}
```

### Organization (site-wide)

Apply to every page. Establishes entity identity across the site.

```json
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Acme",
  "url": "https://acme.com",
  "logo": "https://acme.com/logo.png",
  "sameAs": [
    "https://www.linkedin.com/company/acme",
    "https://twitter.com/acme",
    "https://github.com/acme"
  ]
}
```

**Rules:**
- `name` must be the exact brand name used consistently across all pages
- `sameAs` links to official social profiles. AI engines use these for entity disambiguation
- Place in site-wide template so it appears on every page

---

## Validation and Testing

### Before publishing

| Check | Tool | Pass criteria |
|-------|------|--------------|
| Schema validity | Google Rich Results Test | No errors, all entities detected |
| Schema-content match | Manual review | Every schema text matches visible page content exactly |
| Required fields present | Schema.org validator | All required fields populated |
| JSON-LD syntax | JSON validator | Valid JSON, no trailing commas or syntax errors |

### After publishing

| Check | Frequency | Tool |
|-------|-----------|------|
| Rich results appearing | 1 week post-publish | Google Search Console → Enhancements |
| AI engine extraction accuracy | Monthly | Manual testing in ChatGPT, Perplexity, Gemini |
| Schema errors | Weekly | Google Search Console → Enhancements → Errors |

---

## Common Mistakes

| Mistake | Impact | Fix |
|---------|--------|-----|
| No `dateModified` | AI engines can't assess recency | Add to every page, update on every edit |
| Schema text doesn't match page | Google penalty, AI distrust | Always sync schema with visible content |
| Using Microdata instead of JSON-LD | Inconsistent parsing | Convert all to JSON-LD |
| Missing `author` on articles | Lower trust signal | Add real person with name and URL |
| `FAQPage` on non-FAQ content | Schema misuse penalty | Only use for genuine question-answer pairs |
| Same schema on every page | Missed extraction opportunities | Match schema type to page type |
| Never validating after deploy | Silent errors accumulate | Monthly validation in Google Rich Results Test |
| Placing JSON-LD in body | Parsing issues | Move to `<head>` section |

---

## Pre-Publish Checklist

- [ ] Primary schema type selected based on page type
- [ ] Secondary schema type added where applicable
- [ ] JSON-LD format used (not Microdata or RDFa)
- [ ] `datePublished` and `dateModified` present and accurate
- [ ] `author` field includes real person name and URL
- [ ] `Organization` schema present site-wide
- [ ] Schema text exactly matches visible page content
- [ ] Validated with Google Rich Results Test — no errors
- [ ] JSON syntax validated — no trailing commas or errors
- [ ] Schema placed in `<head>` section
- [ ] `sameAs` links to official social profiles present in Organization schema

---

## Anti-Pattern Check

- Pages with no schema markup at all → Start with `FAQPage` on your top 5 AEO-priority pages. Takes 30 minutes each and has the highest impact-to-effort ratio
- `dateModified` set to publish date and never updated → This tells AI engines the content is stale. Update `dateModified` every time you edit the page, even for minor changes
- Schema on 3 pages but not on the other 97 → Inconsistent schema coverage weakens entity signals. Add `Organization` site-wide first, then roll out page-specific schemas systematically
- FAQ schema with 25 questions → Too many. Google may ignore the schema entirely. Cap at 12. Move additional Q&A to a separate FAQ page
- Using schema as an SEO hack without improving content → Schema tells engines what your content IS. If the content is thin, schema just highlights the thinness. Fix content first, then add schema
- Never testing in AI engines after adding schema → The point of AEO schema is AI extraction. After adding schema, test the page's target query in ChatGPT and Perplexity within 2-4 weeks to verify improved citation