A quick-reference guide to the 25 most-used schema.org types. For each type: what it’s for, required and recommended fields (per Google’s structured data documentation), and a minimal valid JSON-LD example.
Copy any example, paste it into a <script type="application/ld+json"> block, fill in your values, and validate with Google Rich Results Test.
Product
Used for: individual product pages on e-commerce sites.
Enables: product rich results, merchant listings, star ratings in SERPs.
Required (per Google): name + at least one of offers, review, or aggregateRating.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Classic Leather Wallet",
"image": "https://example.com/wallet.jpg",
"description": "Slim bifold wallet in full-grain leather.",
"sku": "WALLET-001",
"brand": { "@type": "Brand", "name": "CraftCo" },
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-12-31"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}
Offer
Used for: nested inside Product to describe pricing. Rarely used standalone.
Key fields: price, priceCurrency, availability, priceValidUntil.
AggregateRating
Used for: nested inside Product, Recipe, LocalBusiness, and others.
Enables: star ratings in search results.
Required: ratingValue + (reviewCount or ratingCount). Ratings must be visible to users on the page.
Review
Used for: individual customer reviews.
Enables: review snippet in search results (requires author, reviewRating, itemReviewed).
{
"@context": "https://schema.org",
"@type": "Review",
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"author": { "@type": "Person", "name": "Alex Kim" },
"reviewBody": "Great quality, arrived quickly.",
"datePublished": "2026-03-10",
"itemReviewed": { "@type": "Product", "name": "Classic Leather Wallet" }
}
Article
Used for: news articles, blog posts, in-depth guides.
Enables: article rich result (top stories, date in snippet).
Required (per Google): headline, image, datePublished, author.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Getting Started with JSON-LD",
"image": "https://example.com/article-image.jpg",
"datePublished": "2026-05-01",
"dateModified": "2026-05-10",
"author": { "@type": "Person", "name": "Deshan M" },
"publisher": {
"@type": "Organization",
"name": "SEOMarkup.site",
"logo": { "@type": "ImageObject", "url": "https://www.seomarkup.site/logo.png" }
}
}
BlogPosting
Used for: blog posts specifically (subtype of Article). Same fields as Article.
NewsArticle
Used for: news journalism. Adds dateline field. Same required fields as Article.
FAQPage
Used for: pages where questions and answers are the primary content.
Enables: FAQ accordion in search results (questions fold out directly in SERP).
Required: mainEntity array of Question objects, each with name and acceptedAnswer.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is JSON-LD?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD is a method of encoding linked data using JSON, commonly used for structured data markup on web pages."
}
},
{
"@type": "Question",
"name": "Do I need technical skills to add structured data?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Basic HTML knowledge is enough. You add a script tag with your JSON-LD to the page — no special tools required."
}
}
]
}
Recipe
Used for: cooking recipes.
Enables: recipe rich result (image, cook time, rating, calories in SERP).
Required (per Google): name, image, author.
Recommended: description, prepTime, cookTime, totalTime, keywords, recipeYield, recipeCategory, recipeCuisine, nutrition, recipeIngredient, recipeInstructions, aggregateRating.
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "Simple Tomato Pasta",
"image": "https://example.com/pasta.jpg",
"author": { "@type": "Person", "name": "Maria Rossi" },
"datePublished": "2026-04-01",
"description": "A quick weeknight pasta with fresh tomatoes and basil.",
"prepTime": "PT10M",
"cookTime": "PT20M",
"totalTime": "PT30M",
"recipeYield": "4 servings",
"recipeIngredient": ["400g pasta", "500g tomatoes", "fresh basil", "olive oil", "garlic"],
"recipeInstructions": [
{ "@type": "HowToStep", "text": "Cook pasta according to package instructions." },
{ "@type": "HowToStep", "text": "Sauté garlic in olive oil, add chopped tomatoes, simmer 15 minutes." },
{ "@type": "HowToStep", "text": "Toss pasta with sauce and fresh basil." }
],
"aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.8", "reviewCount": "52" }
}
HowTo
Used for: step-by-step instructional content (non-recipe).
Enables: HowTo rich result with numbered steps in SERP.
Required: name, step (array of HowToStep).
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Add JSON-LD to Your Website",
"step": [
{ "@type": "HowToStep", "name": "Write your JSON-LD", "text": "Create a JSON object matching your schema type." },
{ "@type": "HowToStep", "name": "Wrap in a script tag", "text": "Place the JSON inside <script type='application/ld+json'>." },
{ "@type": "HowToStep", "name": "Validate", "text": "Test with Google Rich Results Test." }
]
}
LocalBusiness
Used for: physical business locations.
Enables: local knowledge panel, business hours, ratings, address in SERPs.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "The Corner Café",
"image": "https://example.com/cafe.jpg",
"@id": "https://cornercafe.example.com",
"url": "https://cornercafe.example.com",
"telephone": "+1-555-123-4567",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Springfield",
"addressRegion": "IL",
"postalCode": "62701",
"addressCountry": "US"
},
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "07:00", "closes": "18:00" }
],
"aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.5", "reviewCount": "89" }
}
Organization
Used for: companies, institutions, non-profits. Less specific than LocalBusiness.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "SEOMarkup.site",
"url": "https://www.seomarkup.site",
"logo": "https://www.seomarkup.site/logo.png",
"sameAs": [
"https://github.com/deshanm/schema-markup"
]
}
Person
Used for: author profiles, about pages for individuals.
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Deshan M",
"url": "https://www.seomarkup.site",
"jobTitle": "Software Developer",
"sameAs": ["https://github.com/deshanm"]
}
Event
Used for: conferences, concerts, webinars, sporting events.
Enables: event rich result with date, venue, and ticket link.
Required (per Google): name, startDate, location.
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Structured Data Workshop",
"startDate": "2026-09-15T10:00:00",
"endDate": "2026-09-15T16:00:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "TechHub London",
"address": { "@type": "PostalAddress", "addressLocality": "London", "addressCountry": "GB" }
},
"organizer": { "@type": "Organization", "name": "SEOMarkup.site", "url": "https://www.seomarkup.site" },
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "GBP", "availability": "https://schema.org/InStock", "validFrom": "2026-06-01" }
}
VideoObject
Used for: video content pages.
Enables: video rich result in SERPs (thumbnail, duration, upload date).
Required (per Google): name, description, thumbnailUrl, uploadDate.
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Inspect Structured Data with SEOMarkup",
"description": "A 3-minute walkthrough of the SEOMarkup Chrome extension.",
"thumbnailUrl": "https://www.seomarkup.site/og-image.png",
"uploadDate": "2026-01-10",
"duration": "PT3M24S",
"embedUrl": "https://www.youtube.com/embed/4nP8GkuxYYo"
}
BreadcrumbList
Used for: site navigation trails on any page type.
Enables: breadcrumb display in SERP snippet (replaces URL with readable path).
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog/" },
{ "@type": "ListItem", "position": 3, "name": "JSON-LD Guide", "item": "https://example.com/blog/json-ld-guide" }
]
}
Course
Used for: online or offline educational courses.
Enables: course rich result.
Required (per Google): name, description, provider.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Structured Data Fundamentals",
"description": "Learn how to implement JSON-LD structured data for SEO from scratch.",
"provider": { "@type": "Organization", "name": "SEOMarkup Academy", "sameAs": "https://www.seomarkup.site" }
}
Book
Used for: books (physical or digital).
{
"@context": "https://schema.org",
"@type": "Book",
"name": "The Structured Data Handbook",
"author": { "@type": "Person", "name": "Deshan M" },
"isbn": "9780000000000",
"numberOfPages": "320",
"publisher": { "@type": "Organization", "name": "SEOMarkup Press" }
}
JobPosting
Used for: job listings.
Enables: job rich result in Google for Jobs.
Required (per Google): title, description, hiringOrganization, jobLocation, datePosted.
{
"@context": "https://schema.org",
"@type": "JobPosting",
"title": "Frontend Developer",
"description": "Build and maintain web applications...",
"hiringOrganization": { "@type": "Organization", "name": "TechCorp", "sameAs": "https://techcorp.example.com" },
"jobLocation": { "@type": "Place", "address": { "@type": "PostalAddress", "addressLocality": "London", "addressCountry": "GB" } },
"datePosted": "2026-05-01",
"validThrough": "2026-06-30",
"employmentType": "FULL_TIME",
"baseSalary": { "@type": "MonetaryAmount", "currency": "GBP", "value": { "@type": "QuantitativeValue", "value": 70000, "unitText": "YEAR" } }
}
WebSite
Used for: the root homepage. Enables sitelinks search box (with potentialAction).
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "SEOMarkup.site",
"url": "https://www.seomarkup.site"
}
SoftwareApplication
Used for: web apps, mobile apps, browser extensions, desktop software.
Enables: application rich result with rating and OS info.
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "SEOMarkup - Structured Data Inspector",
"applicationCategory": "BrowserApplication",
"operatingSystem": "Chrome",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
"aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.8", "ratingCount": "42" }
}
ImageObject
Used for: describing images in detail; usually nested inside other types (Article.image, Product.image).
{
"@context": "https://schema.org",
"@type": "ImageObject",
"url": "https://example.com/hero-image.jpg",
"width": "1200",
"height": "630",
"caption": "SEOMarkup extension open on a product page"
}
Service
Used for: professional services, agencies, freelancers.
{
"@context": "https://schema.org",
"@type": "Service",
"name": "SEO Structured Data Audit",
"description": "Full audit of your website's structured data implementation.",
"provider": { "@type": "Organization", "name": "SEOMarkup" },
"areaServed": "GB",
"serviceType": "SEO Consulting"
}
Place
Used for: geographical locations without business details. Often nested inside Event.
QAPage
Used for: pages structured around a single question and multiple answers (Stack Overflow style).
Different from FAQPage — use FAQPage for your own FAQ, QAPage for user-generated Q&A.
Quick reference table
| Type | Enables | Key required fields |
|---|---|---|
| Product | Product rich results | name + offers/reviews |
| FAQPage | FAQ accordion in SERP | mainEntity array |
| Recipe | Recipe card | name, image, author |
| Article | Top stories, article rich result | headline, image, datePublished, author |
| Event | Event rich result | name, startDate, location |
| LocalBusiness | Local panel | name, address |
| VideoObject | Video rich result | name, description, thumbnailUrl, uploadDate |
| Course | Course rich result | name, description, provider |
| JobPosting | Google for Jobs | title, description, hiringOrganization, jobLocation, datePosted |
| BreadcrumbList | Breadcrumb in SERP | itemListElement |
| HowTo | How-to rich result | name, step |
Tools to validate your markup
- Google Rich Results Test — paste URL or code, see eligibility
- Schema.org Validator — validates against schema.org spec
- SEOMarkup Schema Generator — generate Product, FAQ, LocalBusiness, or Article JSON-LD
- SEOMarkup Rich Result Preview — visualise how your markup might render
- SEOMarkup Chrome Extension — inspect structured data on any live page