Schema.org Structured Data & JSON-LD
Machine-readable metadata embedded in your HTML that helps search engines and AI systems understand your content's meaning, not just its text.
What It Is
Schema.org structured data is a standardized vocabulary of tags (a "schema") that you add to your HTML to help machines understand your content. JSON-LD (JavaScript Object Notation for Linked Data) is the recommended format for embedding this data.
Instead of just reading your text, AI systems and search engines can parse structured data to understand: - This page is about a Product with a specific price and availability - This article was written by a specific Person with these credentials - This business is an Organization located at this address - These are Frequently Asked Questions with specific answers
Example JSON-LD block:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Business",
"url": "https://example.com",
"description": "What your business does",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "City",
"addressRegion": "ST",
"postalCode": "12345"
}
}
</script>
Why It Matters for AEO
AI systems are trained on and retrieve structured data far more reliably than unstructured text. When Perplexity or ChatGPT needs to answer "What's the best jazz vinyl shop in Pennsylvania?", structured data is what gives your business a fighting chance.
Key benefits: - Google Rich Results: FAQ dropdowns, star ratings, product carousels, and knowledge panels all come from structured data - AI Citation Accuracy: When your data is structured, AI systems can cite specific facts (prices, ratings, hours) instead of hallucinating - Entity Recognition: Schema markup helps AI connect your business to a known entity in the knowledge graph - Voice Search: Smart assistants rely heavily on structured data for spoken answers
How to Implement
Add JSON-LD blocks to the <head> or <body> of your pages. Each page type needs different schemas:
**Homepage** — Organization + WebSite + SearchAction: ```json { "@context": "https://schema.org", "@graph": [ { "@type": "Organization", "name": "Business Name", "url": "https://example.com", "logo": "https://example.com/logo.png", "sameAs": ["https://instagram.com/handle"] }, { "@type": "WebSite", "url": "https://example.com", "potentialAction": { "@type": "SearchAction", "target": "https://example.com/search?q={search_term_string}", "query-input": "required name=search_term_string" } } ] } ```
**Product pages** — Product with offers, reviews, and domain-specific properties.
**Blog articles** — Article or BlogPosting with author, datePublished, and image.
**FAQ pages** — FAQPage with Question and AcceptedAnswer pairs.
Validate your markup with Google's Rich Results Test (search.google.com/test/rich-results) and Schema.org's validator (validator.schema.org).
Common Mistakes
- Adding schema that doesn't match visible page content (Google penalizes this) - Using Microdata or RDFa instead of JSON-LD — JSON-LD is the preferred format - Inconsistent entity names across pages (e.g., "Acme Inc" on one page, "Acme Incorporated" on another) - Missing required properties — each schema type has required and recommended fields - Not validating after implementation — invisible errors are common - Duplicating schema blocks (two Organization schemas on one page)
External Resources
- schema.org — The complete vocabulary reference - Google Search Central: Structured Data documentation - Google Rich Results Test — Validate your markup - Schema.org Validator — Check syntax and completeness