Schema Markup Types 2026: Complete Reference Guide
Complete 2026 reference for schema.org structured data: Article, Organization, Product, BreadcrumbList, WebSite, FAQ, Event, and JSON-LD syntax.
Core schema types
Recommended format
Rich-result uplift
Valid before ship
Key Takeaways
JSON-LD basics
JSON-LD (JavaScript Object Notation for Linked Data) is the format Google explicitly recommends for structured data. It lets you declare Schema.org vocabulary inside a <script type="application/ld+json"> block, decoupled from visible HTML. This separation makes markup easier to maintain, template, and validate than inline microdata or RDFa attributes scattered through your DOM.
Every JSON-LD block needs three foundational keys. @context declares the vocabulary namespace (https://schema.org). @type identifies the entity (Article, Product, Person). @id is an optional but strongly recommended unique identifier - usually a fragment URI - that lets you cross-reference entities without duplicating them.
{
"@context": "https://schema.org",
"@type": "WebPage",
"@id": "https://www.digitalapplied.com/about#webpage",
"url": "https://www.digitalapplied.com/about",
"name": "About Digital Applied",
"isPartOf": {
"@id": "https://www.digitalapplied.com#website"
}
}Placement: head vs body
Google accepts JSON-LD in either <head> or <body>. In Next.js App Router, the cleanest pattern is rendering a <script> tag from the page component using dangerouslySetInnerHTML. Avoid injecting JSON-LD via client-side JavaScript after hydration - Googlebot executes JS but prefers server-rendered markup for reliability.
Using @graph for related entities
When a single page represents multiple connected entities (an article with its author, publisher, and breadcrumbs) wrap them in a @graph array. This signals to search engines that the entities share context and avoids repeating nested objects.
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Organization", "@id": "#org", "name": "Digital Applied" },
{ "@type": "WebSite", "@id": "#website", "publisher": { "@id": "#org" } },
{ "@type": "WebPage", "@id": "#webpage", "isPartOf": { "@id": "#website" } }
]
}#org or #article for internal @id references. They stay stable across URL changes and read cleanly in validators. Pair this with a consistent site-wide naming convention to avoid collisions.Article and WebPage types
Article and its subtypes (NewsArticle, BlogPosting) describe editorial content - blog posts, news stories, long-form guides. They are the most common markup on any content site and power article carousels, top stories modules, and the blue-link headline treatments in Discover. WebPage is the generic container for any non-article page; use it when more specific types do not apply.
BlogPosting example
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"@id": "https://www.digitalapplied.com/blog/example#article",
"headline": "Schema Markup Types: Complete Structured Data Reference",
"description": "Production-ready JSON-LD examples for every major Schema.org type.",
"image": "https://www.digitalapplied.com/og/schema-guide.jpg",
"datePublished": "2026-04-17T09:00:00+00:00",
"dateModified": "2026-04-17T09:00:00+00:00",
"author": {
"@type": "Person",
"name": "Richard Gibbons",
"url": "https://www.digitalapplied.com/about"
},
"publisher": {
"@type": "Organization",
"name": "Digital Applied",
"logo": {
"@type": "ImageObject",
"url": "https://www.digitalapplied.com/logo.png"
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.digitalapplied.com/blog/example"
}
}NewsArticle vs BlogPosting
Use NewsArticle for time-sensitive journalism eligible for Google News surfaces. Use BlogPosting for evergreen or opinion content. Both inherit from Article, so the properties are nearly identical - the distinction is signalling intent to Google's news systems. If you are unsure, default to BlogPosting for marketing blogs and Article for mixed-content sites.
WebPage with speakable
The speakable property on WebPage indicates which sections can be read aloud by voice assistants. It is currently in beta but worth including on news and how-to content where voice surfaces matter.
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "Digital Marketing Glossary",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": ["h1", ".summary"]
}
}For a deeper look at how these types fit into crawl and indexing, see our guide to how search engines work.
Organization and Person
Organization describes your business or brand. Person describes an individual - typically an author, founder, or executive. Both are foundational to the knowledge graph: Google uses them to build entity cards, attribute authorship, and connect profiles across the web via the sameAs property.
Organization with contact points
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.digitalapplied.com#organization",
"name": "Digital Applied",
"url": "https://www.digitalapplied.com",
"logo": {
"@type": "ImageObject",
"url": "https://www.digitalapplied.com/logo.png",
"width": 600,
"height": 60
},
"sameAs": [
"https://www.linkedin.com/company/digitalapplied",
"https://x.com/digitalapplied",
"https://github.com/digitalapplied"
],
"contactPoint": [{
"@type": "ContactPoint",
"telephone": "+1-555-0100",
"contactType": "customer service",
"email": "hello@digitalapplied.com",
"availableLanguage": ["English"]
}]
}Person schema
Use Person for team member pages and blog author bios. Populate sameAs with LinkedIn, GitHub, and verified social profiles - this is the clearest signal connecting real people to published work, and it supports the E-E-A-T (Experience, Expertise, Authoritativeness, Trust) signals Google evaluates for content quality.
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://www.digitalapplied.com/about#person",
"name": "Richard Gibbons",
"jobTitle": "Founder",
"worksFor": { "@id": "https://www.digitalapplied.com#organization" },
"url": "https://www.digitalapplied.com/about",
"sameAs": [
"https://www.linkedin.com/in/richardgibbons",
"https://github.com/richardgibbons"
]
}@id (e.g. https://www.digitalapplied.com#organization) and reference it from every page's graph. This consolidates signals instead of scattering duplicate Organization blocks site-wide.Product and Offer
Product and Offer power eCommerce rich results - price, availability, review stars, and the merchant listing experiences in Google Shopping. Every product page should include at minimum a Product with nested Offer, plus AggregateRating when reviews exist.
Product with single Offer
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Headless Commerce Build",
"image": "https://www.digitalapplied.com/services/commerce.jpg",
"description": "Custom Next.js + Shopify headless storefront build.",
"brand": {
"@type": "Brand",
"name": "Digital Applied"
},
"sku": "DA-COMMERCE-001",
"offers": {
"@type": "Offer",
"url": "https://www.digitalapplied.com/services/web-development",
"priceCurrency": "USD",
"price": "25000",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}AggregateRating and Review
AggregateRating surfaces star ratings in search results. Only include it when ratings come from genuine customer reviews displayed on the page - fabricating ratings or aggregating third-party reviews you do not host triggers spam detection.
{
"@type": "Product",
"name": "Example Product",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "127",
"bestRating": "5",
"worstRating": "1"
}
}Multi-variant products
For products with variants (sizes, colors), use ProductGroup with nested Product variants, each linked via isVariantOf. Google announced expanded variant support in late 2024 and it is now the preferred pattern for fashion and consumer electronics catalogs.
Learn how product schema fits into broader site architecture in our web development services overview.
LocalBusiness and related
LocalBusiness and its subtypes (Restaurant, Dentist, AutoRepair, 80+ others) power the local pack, Google Business Profile connections, and location-based rich results. Marking up your business accurately is the foundation of local SEO - see our technical SEO audit checklist for how to validate implementation.
LocalBusiness with address and hours
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://www.example.com#localbusiness",
"name": "Example Agency",
"image": "https://www.example.com/storefront.jpg",
"telephone": "+1-555-0100",
"priceRange": "$$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Market Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 37.7749,
"longitude": -122.4194
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}],
"url": "https://www.example.com"
}Choosing the right subtype
Always use the most specific subtype available. A dental practice should use Dentist, not LocalBusiness. A plumber should use Plumber. Specificity improves entity classification and unlocks category-specific features (menus for restaurants, service areas for home services).
Multiple locations
For businesses with multiple locations, publish a dedicated location page per site and mark each with its own LocalBusiness block at a stable @id. Avoid dumping an array of locations onto the homepage - Google has stated this dilutes entity signals.
Content-specific schemas
Beyond the foundational types, Schema.org includes dozens of content-specific vocabularies that unlock niche rich results. Implement these only when the content genuinely matches the type - fabricated markup is worse than no markup.
VideoObject
Required for video thumbnails in search, video carousels, and key-moments (clip markup). Every embedded or hosted video should have VideoObject with thumbnailUrl, duration in ISO 8601 format, and uploadDate.
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "Headless Commerce Demo",
"description": "Walkthrough of the Next.js + Shopify architecture.",
"thumbnailUrl": "https://www.example.com/video-thumb.jpg",
"uploadDate": "2026-04-01T08:00:00+00:00",
"duration": "PT4M32S",
"contentUrl": "https://www.example.com/videos/demo.mp4",
"embedUrl": "https://www.example.com/embed/demo"
}Recipe
Recipe unlocks the recipe carousel, cook-time filters, and voice-assistant integrations. Include recipeIngredient (array of strings), recipeInstructions, totalTime, nutrition, and a representative image.
Event
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Digital Marketing Summit 2026",
"startDate": "2026-09-15T09:00:00-07:00",
"endDate": "2026-09-17T17:00:00-07:00",
"eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "Place",
"name": "Moscone Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "747 Howard St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103"
}
},
"organizer": {
"@type": "Organization",
"name": "Digital Applied"
}
}Course, JobPosting, Dataset
Course powers the course list rich result on education queries. JobPosting feeds Google for Jobs - required fields include title, datePosted, hiringOrganization, and jobLocation. Dataset makes research data discoverable via Google Dataset Search; include license, creator, and distribution URLs.
FAQPage, HowTo, Review, SoftwareApplication, or QAPage markup. Google restricted FAQ rich results to government and health sites in 2023, limited HowTo to desktop, and tightened Review eligibility. For a marketing agency site, none of these produce visible SERP enhancements, so we invest markup effort in schemas that still deliver impressions.Validation and tools
Every schema block should pass three validation layers before shipping. Validation is the difference between markup that earns rich results and markup that silently fails or triggers manual actions. See our SEO optimization services page for how we integrate validation into our audit process.
Schema.org Validator
The official validator at validator.schema.org catches vocabulary errors - invalid @type values, misspelled properties, incorrect value types (string where URL expected). It does not evaluate Google-specific rich-result eligibility, so treat it as the syntax check, not the eligibility check.
Google Rich Results Test
Accessed via search.google.com/test/rich-results, this tool tells you exactly which rich result features your page qualifies for. It is the authoritative eligibility check - if Rich Results Test says your page is eligible, Google's systems agree. Warnings should be fixed; errors will block rich results entirely.
Search Console Enhancement reports
After deployment, Google Search Console surfaces structured data issues site-wide under the Enhancements section. Reports exist for Articles, Breadcrumbs, Products, Events, Videos, and more. Monitor these weekly - spikes in error counts indicate a deployment broke markup across templates.
Merchant Center validator
For eCommerce sites, Merchant Center runs its own structured data validation focused on Product schema. It catches issues the generic Rich Results Test misses - missing GTINs, price mismatches between feed and markup, unavailable stock mislabeled as InStock.
JSON-LD vs microdata vs RDFa
JSON-LD is the Google-recommended format. It keeps markup separate from content, is easy to template server-side, and validates reliably. Use it as the default for all new implementations.
Microdata embeds Schema.org properties directly in HTML attributes (itemscope, itemtype, itemprop). It tightly couples markup to DOM structure, making templates brittle. Acceptable to maintain on legacy sites, not recommended for new builds.
RDFa is a third option common in the semantic web and academic publishing communities. Functionally equivalent to microdata for Google's purposes but far less common. No reason to choose it over JSON-LD in 2026.
Mixing formats on a single page is legal but risky - validators may report conflicting data and Google's parsers can pick the wrong copy. Standardize on one format per site, and migrate incrementally if moving from microdata to JSON-LD.
To go deeper on terminology, see our SEO glossary and web development glossary.
Conclusion
Structured data rewards discipline more than volume. A dozen accurate, validated schema blocks outperform fifty half-implemented markups spread across template fragments. Start with the foundational trio - Organization, BreadcrumbList, and the appropriate content type (Article, Product, or LocalBusiness) - and expand only when you identify specific rich-result opportunities that match your content.
Validate every addition. Track Search Console Enhancement reports. Keep one canonical Organization and Person graph linked by stable @id identifiers. Avoid the schemas Google has deprecated for your site class. Do those four things and your structured data will compound into a meaningful CTR advantage over competitors relying on plain blue links.
Ship production-grade schema markup
Digital Applied builds Next.js sites with validated JSON-LD baked into every template. Ship rich-result-ready pages on day one, not as a retroactive project.
Related Articles
Continue exploring with these related guides