Valid JSON-LD doesn't guarantee rich results. Each schema type has Google-specific required fields, separate from schema.org's minimum spec. Article needs headline AND image AND datePublished AND author. Product needs name AND image AND offers AND aggregateRating. Miss one required field, lose the rich result placement even if everything else is correct. This guide lists the required-field minimums per common type and the data-layer fixes to populate them.
{
"@type": "Article",
"headline": "Article title (required)",
"image": [
{
"@type": "ImageObject",
"url": "https://yoursite.com/article.jpg",
"width": 1200,
"height": 675
}
],
"datePublished": "2024-01-15T14:00:00Z",
"dateModified": "2024-02-03T10:30:00Z",
"author": {
"@type": "Person",
"name": "Jane Doe",
"url": "https://yoursite.com/authors/jane-doe"
},
"publisher": {
"@type": "Organization",
"name": "Acme Co",
"logo": {
"@type": "ImageObject",
"url": "https://yoursite.com/logo.png",
"width": 600,
"height": 60
}
}
}
{
"@type": "Product",
"name": "Product name",
"image": ["https://yoursite.com/product.jpg"],
"description": "Product description...",
"sku": "SKU-12345",
"brand": {
"@type": "Brand",
"name": "Brand name"
},
"offers": {
"@type": "Offer",
"url": "https://yoursite.com/products/widget",
"priceCurrency": "USD",
"price": "29.99",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "234"
}
}
{
"@type": "Recipe",
"name": "Recipe name",
"image": ["https://yoursite.com/recipe.jpg"],
"author": { "@type": "Person", "name": "Chef Name" },
"datePublished": "2024-01-15",
"description": "Description...",
"recipeYield": "4 servings",
"recipeIngredient": [
"2 cups flour",
"1 tsp salt",
"1 cup water"
],
"recipeInstructions": [
{ "@type": "HowToStep", "text": "Mix ingredients" },
{ "@type": "HowToStep", "text": "Bake for 30 minutes" }
],
"prepTime": "PT15M",
"cookTime": "PT30M",
"totalTime": "PT45M"
}
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Question text?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Answer text..."
}
},
{
"@type": "Question",
"name": "Second question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Second answer..."
}
}
]
}
{
"@type": "Event",
"name": "Event name",
"startDate": "2025-06-15T19:00:00-05:00",
"endDate": "2025-06-15T22:00:00-05:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Venue name",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "City",
"postalCode": "12345",
"addressCountry": "US"
}
},
"image": ["https://yoursite.com/event.jpg"],
"description": "Event description",
"offers": {
"@type": "Offer",
"url": "https://yoursite.com/events/buy-ticket",
"price": "25.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2024-12-01T00:00:00-05:00"
},
"organizer": {
"@type": "Organization",
"name": "Organiser name",
"url": "https://organiser.example"
}
}
Common missing-field root cause: CMS lacks the data field. Fix by adding: