/ Agent Compat Fixes / Agent Schema

How to Fix Missing Schema Agents Rely On

Agents lean on structured data to extract task-relevant facts without parsing prose. Product schema with offers tells an agent "yes, buyable, this price, in stock". Event schema gives date/location/booking URL. LocalBusiness gives hours and address. Without these, agents either guess from page content (often wrongly) or skip your site entirely. This guide covers the schema types and properties agents actually consume.

1. Map tasks to schema

Agent taskSchema typeKey properties
Buy productProductoffers (price, availability, url)
Book eventEventstartDate, location, offers
Find/visit shopLocalBusinessaddress, openingHours, telephone
Cook recipeReciperecipeIngredient, recipeInstructions, totalTime
Apply for jobJobPostingtitle, hiringOrganization, jobLocation, baseSalary
Book tableFoodEstablishment + reservationacceptsReservations, hasMenu, servesCuisine
Read reviewReview / ProductreviewRating, author, itemReviewed

2. Product schema (ecommerce)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Blue Ceramic Widget",
  "image": [
    "https://example.com/widget-1.jpg",
    "https://example.com/widget-2.jpg"
  ],
  "description": "Hand-thrown ceramic widget, 12cm diameter, food-safe glaze.",
  "sku": "WID-BLU-12",
  "gtin": "0123456789012",
  "brand": {
    "@type": "Brand",
    "name": "Acme Ceramics"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/widget-blue",
    "priceCurrency": "GBP",
    "price": "29.00",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2026-12-31",
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": { "@type": "MonetaryAmount", "value": "4.99", "currency": "GBP" },
      "deliveryTime": { "@type": "ShippingDeliveryTime", "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 5, "unitCode": "DAY" } }
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "142"
  }
}
</script>

Agent extracts: name, price, currency, availability, shipping cost and time, rating. Everything it needs to recommend or buy.

3. Event schema (bookings, conferences)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Annual Pottery Workshop",
  "startDate": "2026-09-15T10:00:00+01:00",
  "endDate": "2026-09-15T16:00:00+01:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Acme Studio",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "12 High Street",
      "addressLocality": "Brighton",
      "postalCode": "BN1 1AA",
      "addressCountry": "GB"
    }
  },
  "organizer": {
    "@type": "Organization",
    "name": "Acme Ceramics",
    "url": "https://example.com"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/events/pottery-2026/book",
    "price": "75.00",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-06-01T00:00:00+01:00"
  }
}
</script>

4. LocalBusiness schema

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Acme Ceramics Studio",
  "image": "https://example.com/studio.jpg",
  "telephone": "+44-1273-555-0123",
  "email": "hello@example.com",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 High Street",
    "addressLocality": "Brighton",
    "postalCode": "BN1 1AA",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 50.8225,
    "longitude": -0.1372
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "09:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday"],
      "opens": "10:00",
      "closes": "16:00"
    }
  ],
  "url": "https://example.com"
}
</script>

5. Recipe schema

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Simple Sourdough Bread",
  "author": { "@type": "Person", "name": "Jane Baker" },
  "datePublished": "2026-01-15",
  "prepTime": "PT30M",
  "cookTime": "PT45M",
  "totalTime": "PT24H15M",
  "recipeYield": "1 loaf",
  "recipeCategory": "Bread",
  "recipeCuisine": "European",
  "recipeIngredient": [
    "500g strong white bread flour",
    "10g fine salt",
    "350g water at 20°C",
    "100g active sourdough starter"
  ],
  "recipeInstructions": [
    { "@type": "HowToStep", "name": "Mix", "text": "Combine flour and water, rest 1 hour." },
    { "@type": "HowToStep", "name": "Add starter", "text": "Mix in starter and salt." },
    { "@type": "HowToStep", "name": "Bulk ferment", "text": "Rest 4 hours with folds every 30 minutes." }
  ],
  "nutrition": {
    "@type": "NutritionInformation",
    "calories": "180 calories per slice"
  }
}
</script>

6. Where to place schema

JSON-LD in <head> reaches all agents:

<!DOCTYPE html>
<html>
<head>
  <title>...</title>
  <meta name="description" content="..." />
  
  <script type="application/ld+json">
  { ... }
  </script>
</head>

Avoid: schema injected via JS after page load — agents fetching raw HTML miss it. Schema must be server-rendered.

7. Validate

Step 1
Schema.org validator
validator.schema.org — paste URL or markup. Parses JSON-LD and flags syntax errors.
Step 2
Google Rich Results Test
search.google.com/test/rich-results — checks required + recommended properties for Google's rich snippets. Same checks help agent extraction.
💡 The 20% of schema that delivers 80% of agent value: Product.offers, Event.startDate, LocalBusiness.openingHoursSpecification, Recipe.recipeIngredient, JobPosting.baseSalary. Populate those properties accurately and most agent tasks succeed even on otherwise sparse pages.

🤖 Re-run Agent Compat audit

Verify schema coverage matches the tasks agents do on your site.

Run Agent Compat →
Related Guides: Agent Compat Fixes  ·  Fix Agent Contact  ·  Fix Agent Checkout
💬 Got a problem?