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 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