The Technical Schema Markup Checklist for AEO & GEO
Which JSON-LD schema type to use for which page, the exact FAQPage structure, and the one drift bug that breaks schema most often.
Use JSON-LD, not microdata. Match the schema type to what the page actually is (FAQPage for Q&A, HowTo for steps, Article for editorial content). Every fact in your schema must also appear in the visible HTML, and the moment those two drift apart is the most common way schema markup quietly breaks.
Why JSON-LD and not the alternatives
Structured data can be written as JSON-LD, Microdata, or RDFa. JSON-LD wins for a practical reason: it lives in a single <script type="application/ld+json"> block, separate from your page's actual HTML. That means you can add, edit or remove it without touching your layout, and it's far easier to validate and debug than markup interleaved through your DOM. It's also what both Google and the AI answer engines document and expect.
Match the schema type to the actual page
This sounds obvious and is still the most common mistake: bolting FAQPage schema onto a page that has no real FAQ section, or skipping HowTo schema on a page that's genuinely a step-by-step guide.
| Page type | Primary schema | Why |
|---|---|---|
| Article / blog post | Article or NewsArticle | Establishes authorship, publish date, headline |
| FAQ section | FAQPage | Lets an engine extract a direct Q&A pair |
| Step-by-step guide | HowTo | Structures sequential steps explicitly |
| Product page | Product | Price, availability, and review data in one place |
| Category / listing page | ItemList | Names each entry explicitly rather than relying on visual layout |
The FAQPage structure, exactly
The required shape is specific: an FAQPage object containing a mainEntity array of Question objects, and each Question needs a name (the question text) and an acceptedAnswer containing the answer as text. Note it's acceptedAnswer, not suggestedAnswer, a naming mistake that's easy to copy from an outdated template.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Does adding schema guarantee my page gets cited?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Schema makes your content easier to parse and extract, it doesn't override whether the content itself answers the question well."
}
}]
}