Structured data has been a search-optimization staple for over a decade, mostly in service of rich results — star ratings, recipe cards, event listings. Its role in AI search is different: instead of decorating a result, it's disambiguating your content for a machine that has to decide, in milliseconds, whether your page contains the answer to a question.

Here's what that means in practice, and which schema types actually earn their keep.

Why schema matters more, not less, in an AI-mediated search

A retrieval pipeline behind an AI assistant has to do two things fast: find candidate pages, and extract a clean, attributable answer from the ones it selects. Well-formed JSON-LD helps with both. It gives the system an unambiguous, pre-parsed version of your headline, your author, your publish date, and — critically — your questions and answers, instead of forcing it to infer structure from raw HTML.

That matters because AI systems have a strong incentive to avoid hallucination-by-misparse: quoting the wrong paragraph, misattributing a claim, or citing stale content. Clean structured data reduces the chance your page gets skipped for being ambiguous.

FAQPage: the highest-leverage type

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is generative engine optimization?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "GEO is the practice of structuring content so AI systems are more likely to cite it when answering a related question."
      }
    }
  ]
}

FAQPage schema works because it mirrors the actual shape of a prompt-and-answer exchange. Keep answers self-contained — a reader (human or model) should understand the answer without needing the surrounding page for context. Avoid stuffing every FAQ with marketing copy; answer the question directly in the first sentence.

Article schema: establishing provenance

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Schema Markup for AI Search",
  "datePublished": "2026-08-08",
  "dateModified": "2026-08-08",
  "author": { "@type": "Organization", "name": "The SEO Xpert" },
  "publisher": { "@type": "Organization", "name": "The SEO Xpert" }
}

datePublished and dateModified give retrieval systems a freshness signal — useful for time-sensitive queries where an AI assistant needs to prefer recent content over an older, higher-authority page. Keep dateModified honest: update it only when you meaningfully revise the content, not as a ranking trick. Systems that detect fake freshness signals tend to discount the source going forward.

Speakable: built for voice, useful for AI

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [".article-summary", ".key-takeaways"]
  }
}

Speakable was designed for smart speakers reading news aloud, but the underlying idea — explicitly marking the most quotable, self-contained summary on the page — is exactly what an AI system also needs. Point it at your summary paragraph and key-takeaways block rather than the full article body; you want to flag the most extractable content, not all of it.

Common mistakes that undermine schema

  • Marking up content that isn't visible on the page. Structured data should describe what a reader actually sees. Search engines and AI crawlers both treat markup-content mismatches as a spam signal.
  • Leaving broken or invalid JSON-LD in production. A single trailing comma breaks the entire block. Validate every template change, not just on launch day.
  • Duplicating conflicting schema. If a page has two Article blocks with different datePublished values, you've handed the retrieval system a coin flip instead of a signal.
  • Treating schema as a substitute for good writing. Markup describes your content; it doesn't fix content that's vague, unstructured, or thin. Fix the writing first, then mark it up.

Schema markup is a small, mechanical piece of a much larger GEO practice — but it's the piece most sites get wrong for free, and fixing it costs a template change, not a content rewrite.