Structured Data for AI Agents: Schema.org, JSON-LD, and Semantic Markup
A comprehensive guide to implementing structured data that AI agents can parse, understand, and act upon. Learn how Schema.org, JSON-LD, and semantic markup enable agent-ready websites.
Structured data has evolved from an SEO enhancement to a critical infrastructure component for the Agentic Web. While search engines use **structured data** for rich snippets, **AI agents** use it to understand what actions they can take and what data they can extract. This guide covers how to implement structured data that serves both purposes.
Why Structured Data Matters for AI Agents
The Agent Understanding Problem
When a human visits a product page, they instantly understand: - This is a product for sale - The price is $99.99 - It's currently in stock - They can add it to cart
AI agents need explicit signals to reach the same understanding. Without structured data, agents must: - Parse HTML and infer meaning from layout - Guess which elements are clickable - Estimate prices from text patterns - Assume availability based on button states
Structured data eliminates this guesswork.
From Rich Snippets to Agent Actions
Traditional use (SEO):
Structured Data → Search Engine → Rich Snippet in SERP
Modern use (Agents):
Structured Data → AI Agent → Understanding → Action
Agents use structured data to: - Discover capabilities: What can I do on this site? - Extract information: What are the exact prices, specs, availability? - Plan actions: What steps are needed to complete a task? - Validate results: Did my action succeed?
Schema.org Fundamentals
What Is Schema.org?
Schema.org is a collaborative vocabulary for structured data, supported by Google, Microsoft, Yahoo, and Yandex. It defines types (like Product, Event, Organization) and properties (like price, startDate, name).
Core Concepts
Types (Classes):
Thing
├── CreativeWork
│ ├── Article
│ ├── WebPage
│ └── SoftwareApplication
├── Event
├── Organization
├── Person
├── Place
└── Product
Properties: Each type has specific properties. A `Product` has: - `name` (text) - `description` (text) - `price` (number or PriceSpecification) - `availability` (ItemAvailability) - `brand` (Brand or Organization)
JSON-LD: The Preferred Format
JSON-LD (JavaScript Object Notation for Linked Data) is the recommended format for structured data:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Premium Wireless Headphones",
"description": "High-fidelity wireless headphones with noise cancellation",
"brand": {
"@type": "Brand",
"name": "AudioTech"
},
"offers": {
"@type": "Offer",
"price": "299.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "TechStore"
}
}
}
</script>
Why JSON-LD over Microdata or RDFa: - Cleaner separation from HTML - Easier to generate dynamically - No need to modify existing markup - Better supported by modern tools - Preferred by Google
Structured Data Types for Agent-Ready Sites
E-Commerce: Product and Offer
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Ergonomic Office Chair",
"image": [
"https://example.com/chair-front.jpg",
"https://example.com/chair-side.jpg"
],
"description": "Adjustable lumbar support, breathable mesh back",
"sku": "CHAIR-ERG-001",
"mpn": "925872",
"brand": {
"@type": "Brand",
"name": "ComfortSeating"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/ergonomic-chair",
"price": "449.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"priceValidUntil": "2025-12-31",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"businessDays": {
"@type": "QuantitativeValue",
"minValue": 3,
"maxValue": 5
}
}
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "1247"
}
}
What agents extract: - Exact price and currency for comparison - Stock status for availability checking - Shipping details for delivery estimates - Ratings for quality assessment
Services: Service and Offer
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Professional Website Audit",
"provider": {
"@type": "Organization",
"name": "Digital Agency Pro"
},
"description": "Comprehensive technical SEO and performance audit",
"serviceType": "SEO Audit",
"areaServed": {
"@type": "Country",
"name": "United States"
},
"offers": {
"@type": "Offer",
"price": "500.00",
"priceCurrency": "USD",
"eligibleRegion": {
"@type": "Country",
"name": "United States"
}
},
"termsOfService": "https://example.com/terms",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Audit Packages",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Basic Audit"
},
"price": "500"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Premium Audit"
},
"price": "1500"
}
]
}
}
Events and Bookings
{
"@context": "https://schema.org",
"@type": "Event",
"name": "AI & Content Strategy Workshop",
"startDate": "2025-03-15T09:00:00-05:00",
"endDate": "2025-03-15T17:00:00-05:00",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "Place",
"name": "Tech Conference Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Innovation Way",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
}
},
"organizer": {
"@type": "Organization",
"name": "Content Leaders Association",
"url": "https://contentleaders.org"
},
"offers": {
"@type": "Offer",
"price": "299",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2025-01-01T00:00:00-05:00",
"url": "https://example.com/register"
},
"performer": {
"@type": "Person",
"name": "Dr. Sarah Chen"
}
}
Agent use cases: - Calendar integration (add to schedule) - Travel booking (flights, hotels near venue) - Registration automation - Reminder setting
Articles and Content
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Structured Data for AI Agents",
"author": {
"@type": "Person",
"name": "Julia Maehler",
"url": "https://example.com/about"
},
"datePublished": "2025-12-31",
"dateModified": "2025-12-31",
"publisher": {
"@type": "Organization",
"name": "AI Content Hub",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "A guide to implementing structured data for AI agents",
"articleBody": "Full article text here...",
"keywords": ["structured data", "AI agents", "Schema.org"],
"about": {
"@type": "Thing",
"name": "Structured Data"
},
"isAccessibleForFree": true,
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": [".article-summary", ".key-points"]
}
}
FAQs for Agent Q&A
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is structured data?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Structured data is a standardized format for providing information about a page and classifying the page content."
}
},
{
"@type": "Question",
"name": "Why is JSON-LD preferred?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD is preferred because it separates data from HTML, is easier to maintain, and is better supported by search engines and AI systems."
}
}
]
}
Agent benefit: Direct extraction of Q&A pairs without parsing page content.
HowTo for Task Instructions
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Add Structured Data to Your Website",
"description": "Step-by-step guide to implementing JSON-LD structured data",
"totalTime": "PT30M",
"estimatedCost": {
"@type": "MonetaryAmount",
"currency": "USD",
"value": "0"
},
"step": [
{
"@type": "HowToStep",
"name": "Identify content type",
"text": "Determine which Schema.org type best describes your content",
"position": 1
},
{
"@type": "HowToStep",
"name": "Create JSON-LD",
"text": "Write the JSON-LD markup with appropriate properties",
"position": 2
},
{
"@type": "HowToStep",
"name": "Add to page",
"text": "Insert the script tag in your HTML head or body",
"position": 3
},
{
"@type": "HowToStep",
"name": "Test",
"text": "Validate using Google's Rich Results Test",
"position": 4
}
]
}
Agent benefit: Can follow procedural instructions autonomously.
Advanced Patterns for Agent Consumption
Action Schema: Defining Available Actions
The Action type tells agents what they can do:
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "TechStore",
"url": "https://techstore.example.com",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://techstore.example.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
More action types:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Mouse",
"potentialAction": [
{
"@type": "BuyAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://example.com/cart/add?sku=MOUSE-001",
"httpMethod": "POST"
}
},
{
"@type": "ViewAction",
"target": "https://example.com/products/wireless-mouse"
}
]
}
Linking Related Entities
Help agents understand relationships:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Laptop Stand",
"isRelatedTo": [
{
"@type": "Product",
"name": "Laptop Cooling Pad",
"url": "https://example.com/cooling-pad"
}
],
"isAccessoryOrSparePartFor": {
"@type": "Product",
"name": "MacBook Pro 16-inch"
},
"isSimilarTo": [
{
"@type": "Product",
"name": "Adjustable Desk Riser",
"url": "https://example.com/desk-riser"
}
]
}
Breadcrumb for Navigation Context
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Electronics",
"item": "https://example.com/electronics"
},
{
"@type": "ListItem",
"position": 3,
"name": "Laptops",
"item": "https://example.com/electronics/laptops"
}
]
}
Agent benefit: Understands site hierarchy without crawling.
Implementation Best Practices
1. One Type Per Page (Primary)
Each page should have one primary structured data type that best represents its content:
| Page Type | Primary Schema |
|---|---|
| Product page | Product |
| Category page | ItemList + CollectionPage |
| Article | Article or BlogPosting |
| About page | Organization or Person |
| Contact page | Organization with ContactPoint |
| FAQ page | FAQPage |
2. Nest Related Data
Don't create separate JSON-LD blocks for related entities—nest them:
// Good: Nested
{
"@type": "Product",
"brand": {
"@type": "Brand",
"name": "TechBrand"
}
}
// Avoid: Separate blocks for related data
3. Use Specific Types
Schema.org has a type hierarchy. Use the most specific type:
Thing → Product → Vehicle → Car
Use Car, not Product, for a car listing.
4. Include Required and Recommended Properties
Google documents required and recommended properties for each type. Include both:
Product (minimum for agents): - `name` (required) - `image` (required) - `description` (recommended) - `offers` (required for commerce) - `sku` or `gtin` (recommended) - `brand` (recommended) - `aggregateRating` (recommended)
5. Keep Data Fresh
Structured data must match visible content:
// If page shows "$299.99" but JSON-LD has:
"price": "399.99" // Wrong! Mismatch creates distrust
Automate structured data generation from your CMS or database.
Testing and Validation
Google Rich Results Test
https://search.google.com/test/rich-results
Tests for: - Valid JSON-LD syntax - Correct Schema.org usage - Required properties - Rich result eligibility
Schema.org Validator
https://validator.schema.org/
More permissive than Google's test—validates against full Schema.org spec.
Structured Data Testing Checklist
- [ ] JSON-LD is valid JSON (no syntax errors)
- [ ] @context is "https://schema.org"
- [ ] @type matches content
- [ ] Required properties present
- [ ] Data matches visible content
- [ ] URLs are absolute and valid
- [ ] Dates are in ISO 8601 format
- [ ] Prices include currency
- [ ] No deprecated properties
Structured Data and AI: Beyond Search
LLM Consumption
Large language models can parse JSON-LD directly:
Agent prompt: "What products does this page offer?"
→ Agent extracts JSON-LD
→ LLM parses structured Product data
→ Returns: "This page offers the Premium Wireless Headphones
by AudioTech for $299.99, currently in stock."
RAG System Integration
Structured data improves RAG retrieval:
- Chunking: JSON-LD provides natural chunk boundaries
- Metadata: Type, date, author available for filtering
- Relationships: Links between entities aid context
- Freshness: `dateModified` enables recency ranking
Agent Decision Making
Agents use structured data for decisions:
Task: "Find the cheapest flight to London"
Agent process:
1. Search flight booking sites
2. Extract Offer schema from each
3. Compare prices (structured, not scraped)
4. Present options with confidence
Future of Structured Data
Emerging Patterns
AI-specific extensions: - Custom properties for agent capabilities - Action schemas for complex workflows - Trust and verification markers
Dynamic structured data: - Real-time price updates - Live availability - Personalized offers
Complementary Technologies
Structured data works alongside:
- llms.txt: Site-level AI instructions
- MCP servers: Deep integration for actions
- APIs: Programmatic access to data
- robots.txt: Crawling permissions
Conclusion
Structured data is the foundation of agent-readable websites. While it began as an SEO tool for rich snippets, its role has expanded to become the semantic layer that AI agents rely on to understand and interact with web content.
Start with the basics: identify your primary content types and implement corresponding Schema.org markup. Then expand to actions, relationships, and advanced patterns that enable agents to do more than just read—to actually act.
The investment in structured data pays dividends across search visibility, AI citations, and agent interactions. Sites with comprehensive, accurate structured data will be the ones that agents can reliably work with—and therefore the ones they'll prefer.
Every page should answer the question: "If an AI agent visited this page, would it understand what's here and what it can do?"