Back to Blog
    TechnicalAEOStrategy

    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.

    Julia Maehler··5 min read

    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 TypePrimary Schema
    Product pageProduct
    Category pageItemList + CollectionPage
    ArticleArticle or BlogPosting
    About pageOrganization or Person
    Contact pageOrganization with ContactPoint
    FAQ pageFAQPage

    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

    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:

    1. Chunking: JSON-LD provides natural chunk boundaries
    2. Metadata: Type, date, author available for filtering
    3. Relationships: Links between entities aid context
    4. 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?"