structured-data-implementation
title:: Implementing JSON-LD Schema Markup: A Developer's Guide to 15 Schema Types
description:: A developer's guide to implementing JSON-LD structured data. Covers 15 schema types with code examples, validation, and deployment strategies.
focus_keyword:: structured data implementation
category:: developers
author:: Victor Valentine Romo
date:: 2026.03.20
Implementing JSON-LD Schema Markup: A Developer's Guide to 15 Schema Types
Quick Summary
- What this covers: structured-data-implementation
- Who it's for: SEO practitioners at every career stage
- Key takeaway: Read the first section for the core framework, then use the specific tactics that match your situation.
- JSON-LD Fundamentals
- The 15 Schema Types Worth Implementing
- Implementation Architecture
- Testing and Deployment Pipeline
- Schema for Entity SEO
- Common Implementation Errors
- When This Approach Isn't Right
Structured data implementation using JSON-LD tells search engines what your content means, not just what it says. When Google encounters a page with valid schema markup, it can generate rich results — star ratings, FAQ accordions, product pricing, event dates — that occupy more SERP real estate and attract higher click-through rates than standard blue links.
JSON-LD is the recommended format because it decouples structured data from HTML markup. You inject a block anywhere in the page, and search engines parse it independently of the visual content. No class attributes, no microdata syntax threaded through your templates.
JSON-LD Fundamentals
Structure and Syntax
Every JSON-LD block starts with @context declaring the vocabulary and @type declaring the entity type:
``json
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Implementing JSON-LD Schema Markup",
"author": {
"@type": "Person",
"name": "Victor Valentine Romo"
}
}
`
Nest related entities using typed objects. Reference entities across blocks using
@id:
`json
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://example.com/#org",
"name": "Example Corp"
}
`
Other blocks reference this entity with
"publisher": {"@id": "https://example.com/#org"}.
Where to Place JSON-LD
Insert JSON-LD in the
or at the end of . Both positions are valid. Google parses the entire HTML document for JSON-LD blocks regardless of position.
For server-rendered applications, inject JSON-LD during server-side rendering to ensure crawlers receive it in the initial HTML response. For JavaScript SPAs, dynamic injection works if the rendering service processes it, but server-side injection is more reliable.
Validation Before Deployment
Validate every schema implementation before deploying to production:
Google's Rich Results Test — tests whether your markup qualifies for specific rich result types
Schema.org Validator — validates syntax against the full Schema.org vocabulary
Google Search Console Enhancements report — monitors structured data errors across your entire site post-deployment
Integrate validation into CI/CD by testing JSON-LD blocks against the Schema.org validator API. Catch errors before they reach production.
The 15 Schema Types Worth Implementing
1. Article
Applicable to: blog posts, news articles, how-to guides, opinion pieces.
`json
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article Title",
"description": "Article summary under 160 characters.",
"image": "https://example.com/image.jpg",
"datePublished": "2026-02-07",
"dateModified": "2026-02-07",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://example.com/about"
},
"publisher": {
"@type": "Organization",
"name": "Publisher Name",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
}
}
`
Rich result: Enhanced article appearance in search, potential inclusion in Google News and Top Stories.
2. FAQPage
Applicable to: any page with question-and-answer content.
`json
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is structured data?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Structured data is code that helps search engines understand page content."
}
}
]
}
`
Rich result: FAQ accordion directly in search results, significantly expanding your SERP footprint.
3. HowTo
Applicable to: tutorial pages, step-by-step guides, recipe-style content.
`json
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Implement JSON-LD",
"step": [
{
"@type": "HowToStep",
"name": "Choose Schema Type",
"text": "Select the schema type that matches your content."
},
{
"@type": "HowToStep",
"name": "Write JSON-LD Block",
"text": "Create the JSON-LD following schema.org specifications."
}
]
}
`
Rich result: Numbered step display in search results.
4. Product
Applicable to: e-commerce product pages, SaaS pricing pages.
`json
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product Name",
"description": "Product description.",
"image": "https://example.com/product.jpg",
"brand": {"@type": "Brand", "name": "Brand Name"},
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/product"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127"
}
}
`
Rich result: Price, availability, and star rating displayed in search.
5. LocalBusiness
Applicable to: business location pages, contact pages for physical businesses.
`json
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Business Name",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "City",
"addressRegion": "ST",
"postalCode": "12345"
},
"telephone": "+1-555-555-5555",
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}
}
`
Rich result: Business information panel, map integration.
6. Organization
Applicable to: homepage, about page.
Establishes entity identity for Google's Knowledge Graph. Include
sameAs links to official social profiles and authoritative references.
`json
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Organization Name",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://linkedin.com/company/example",
"https://twitter.com/example"
]
}
`
7. BreadcrumbList
Applicable to: every page with navigational hierarchy.
`json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com"},
{"@type": "ListItem", "position": 2, "name": "Category", "item": "https://example.com/category"},
{"@type": "ListItem", "position": 3, "name": "Page Title"}
]
}
`
Rich result: Breadcrumb trail replaces URL in search results.
8. Event
Applicable to: event listing pages, conference pages, webinar registration.
Include
startDate, endDate, location (physical or virtual), and offers for ticketing. Rich result: event card with date, location, and ticket price.
9. VideoObject
Applicable to: pages with embedded video content.
Include
name, description, thumbnailUrl, uploadDate, duration, and contentUrl or embedUrl. Rich result: video thumbnail in search results, potential Video carousel inclusion.
10. Review / AggregateRating
Applicable to: product reviews, service reviews, comparison pages.
Standalone
Review schema works for individual reviews. AggregateRating summarizes multiple reviews. Combine with Product, LocalBusiness, or Organization schema for context.
11. SoftwareApplication
Applicable to: SaaS product pages, app landing pages.
Include
applicationCategory, operatingSystem, offers, and aggregateRating. Rich result: app information with rating and pricing in search.
12. Course
Applicable to: educational content, training programs, certification pages.
Include
provider, description, coursePrerequisites, and hasCourseInstance with scheduling details. Rich result: course listing with provider and description.
13. JobPosting
Applicable to: career pages, job listing pages.
Required properties:
title, description, datePosted, hiringOrganization, jobLocation. Rich result: job listing card in Google Jobs.
14. WebSite (with SearchAction)
Applicable to: homepage only.
`json
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Site Name",
"url": "https://example.com",
"potentialAction": {
"@type": "SearchAction",
"target": "https://example.com/search?q={searchtermstring}",
"query-input": "required name=searchtermstring"
}
}
`
Rich result: Sitelinks search box in branded search results.
15. Speakable
Applicable to: news articles, informational content suitable for voice assistants.
Marks sections of content eligible for text-to-speech by voice assistants. Use CSS selectors or XPath to identify speakable sections.
Implementation Architecture
Template-Level Injection
Build schema generation into your page templates rather than manually adding JSON-LD to individual pages. Create functions that accept page data and return formatted JSON-LD:
`javascript
function buildArticleSchema(article) {
return {
"@context": "https://schema.org",
"@type": "Article",
"headline": article.title,
"datePublished": article.date,
"author": {"@type": "Person", "name": article.author}
};
}
`
This approach scales to thousands of pages and ensures consistency.
Multiple Schema Blocks Per Page
A single page can contain multiple JSON-LD blocks. A product page might include
Product, BreadcrumbList, and Organization schema. Each block is a separate