Complete Structured Data Guide 2026 - Get Rich Results with JSON-LD
Learn how to get Google Rich Snippets with Schema.org and JSON-LD. Implementation guide with practical examples for FAQ, How-to, and Product schemas.
Toolypet Team
Development Team
Complete Structured Data Guide 2026
Have you seen star ratings, FAQs, or recipe cards in search results? That's Rich Results.
As of 2026, pages with rich results have an average 58% higher CTR. Make your content stand out with structured data.
What is Structured Data?
Structured data is a standardized format that helps search engines understand page content.
Key Concepts
| Term | Description |
|---|---|
| Schema.org | Vocabulary co-developed by Google, Microsoft, and Yahoo |
| JSON-LD | JavaScript-based data format (Google recommended) |
| Rich Results | Enhanced search results based on structured data |
| Rich Snippet | Older term for rich results |
Why JSON-LD?
| Format | Pros | Cons |
|---|---|---|
| JSON-LD | Separate from HTML, easy maintenance | JavaScript dependency |
| Microdata | Embedded directly in HTML | Complex code |
| RDFa | Flexible | Learning curve |
Google Official Recommendation: JSON-LD
Types of Rich Results
Major Types Supported by Google
| Type | Display Format | Use Case |
|---|---|---|
| Article | News card | Blogs, News |
| FAQ | Expandable Q&A | FAQ pages |
| How-to | Step-by-step guide | Tutorials |
| Product | Price, stock, rating | Product pages |
| Review | Star rating display | Review content |
| Recipe | Cook time, calories | Recipes |
| Event | Date, location | Events |
| LocalBusiness | Hours, location | Local businesses |
| BreadcrumbList | Path display | All pages |
JSON-LD Basic Structure
Template
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SchemaType",
"property1": "value1",
"property2": "value2"
}
</script>
Required Elements
| Element | Description |
|---|---|
@context | Always "https://schema.org" |
@type | Schema type (Article, FAQ, etc.) |
| Required properties | Varies by type |
Practical Implementation Examples
1. Article (Blog/News)
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Complete Structured Data Guide 2026",
"description": "How to get rich results with JSON-LD",
"image": "https://example.com/article-image.jpg",
"author": {
"@type": "Person",
"name": "Sam Rank",
"url": "https://example.com/author/sam-rank"
},
"publisher": {
"@type": "Organization",
"name": "Toolypet",
"logo": {
"@type": "ImageObject",
"url": "https://toolypet.com/logo.png"
}
},
"datePublished": "2026-02-22",
"dateModified": "2026-02-22"
}
2. FAQ (Frequently Asked Questions)
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is structured data?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Structured data is a standardized format that helps search engines understand page content."
}
},
{
"@type": "Question",
"name": "Where should I put JSON-LD?",
"acceptedAnswer": {
"@type": "Answer",
"text": "It can be placed anywhere in the HTML <head> or <body>, but placing it in the <head> is recommended."
}
}
]
}
3. How-to (Step-by-Step Guide)
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Add JSON-LD Structured Data",
"description": "How to add JSON-LD to your webpage",
"totalTime": "PT10M",
"step": [
{
"@type": "HowToStep",
"name": "Choose Schema Type",
"text": "Select the Schema.org type that matches your page content."
},
{
"@type": "HowToStep",
"name": "Write JSON-LD Code",
"text": "Write JSON-LD code according to your chosen schema."
},
{
"@type": "HowToStep",
"name": "Insert into HTML",
"text": "Wrap the code with <script type='application/ld+json'> tag and insert into HTML."
},
{
"@type": "HowToStep",
"name": "Test",
"text": "Validate using Google Rich Results Test."
}
]
}
4. Product
{
"@context": "https://schema.org",
"@type": "Product",
"name": "SEO Guidebook 2026",
"description": "Practical guide with the latest SEO strategies",
"image": "https://example.com/product.jpg",
"brand": {
"@type": "Brand",
"name": "Toolypet"
},
"offers": {
"@type": "Offer",
"price": "29.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/product"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "124"
}
}
5. BreadcrumbList
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://example.com/seo"
},
{
"@type": "ListItem",
"position": 3,
"name": "Structured Data Guide",
"item": "https://example.com/seo/structured-data"
}
]
}
6. LocalBusiness
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Morning Glory Cafe",
"image": "https://example.com/cafe.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94102",
"addressCountry": "US"
},
"telephone": "+1-415-555-1234",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "22:00"
}
],
"priceRange": "$$"
}
Framework-Specific Implementation
Next.js
// app/layout.tsx or pages/_document.tsx
import Script from 'next/script';
export default function Layout({ children }) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Toolypet",
"url": "https://toolypet.com"
};
return (
<html>
<head>
<Script
id="json-ld"
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</head>
<body>{children}</body>
</html>
);
}
React (Helmet)
import { Helmet } from 'react-helmet';
function ArticlePage({ article }) {
const jsonLd = {
"@context": "https://schema.org",
"@type": "Article",
"headline": article.title,
"author": { "@type": "Person", "name": article.author }
};
return (
<>
<Helmet>
<script type="application/ld+json">
{JSON.stringify(jsonLd)}
</script>
</Helmet>
<article>{/* Content */}</article>
</>
);
}
WordPress
// functions.php
function add_json_ld_schema() {
if (is_single()) {
$schema = array(
"@context" => "https://schema.org",
"@type" => "Article",
"headline" => get_the_title(),
"datePublished" => get_the_date('c')
);
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
}
}
add_action('wp_head', 'add_json_ld_schema');
Validation and Testing
Google Official Tools
| Tool | URL | Purpose |
|---|---|---|
| Rich Results Test | search.google.com/test/rich-results | Test rich results eligibility |
| Schema Markup Validator | validator.schema.org | Validate schema syntax |
| Search Console | search.google.com/search-console | Check actual indexing status |
Testing Checklist
- No JSON syntax errors
- All required properties included
- Matches actual page content
- Valid image URLs
- Rich Results Test passed
Common Mistakes and Solutions
1. JSON Syntax Errors
// ❌ Wrong: trailing comma
{
"name": "Test",
"url": "https://example.com", // Here!
}
// ✅ Correct
{
"name": "Test",
"url": "https://example.com"
}
2. Missing Required Properties
// ❌ Missing author in Article
{
"@type": "Article",
"headline": "Title only"
}
// ✅ Including required properties
{
"@type": "Article",
"headline": "Complete Article",
"author": { "@type": "Person", "name": "Author" },
"datePublished": "2026-02-22"
}
3. Content Mismatch
// ❌ Different from page content
{
"@type": "Product",
"price": "10000" // Actual page shows 15000
}
// Google guideline violation = risk of manual action
4. Excessive Markup
❌ Marking up all text as structured data
❌ Applying schema to hidden content
❌ Including information not visible to users
✅ Only mark up actually visible content
✅ Structure only key information
SEO Impact
Expected Benefits
| Metric | Improvement |
|---|---|
| CTR (Click-through rate) | +20-58% |
| Impressions | Rich results eligibility |
| Trust | Star ratings, reviews displayed |
| Voice Search | Answer candidate |
Cautions
- Structured data ≠ guaranteed ranking improvement
- Rich results display is at Google's discretion
- Manual action for guideline violations
Best Practices Checklist
Implementation
- Choose appropriate schema for page type
- Include all required properties
- Use JSON-LD format
- Place in
<head>
Content
- Matches actual page content
- Only includes user-visible information
- Keep information up to date
Testing
- Rich Results Test passed
- Schema Markup Validator passed
- No errors in Search Console
FAQ
Q1: Does structured data directly affect rankings?
A: It's not a direct ranking factor. However, it has indirect effects like increased CTR and voice search answers.
Q2: Can I put multiple schemas on one page?
A: Yes! It's common to use Article + FAQ + BreadcrumbList together. Add each as a separate <script> tag.
Q3: Why aren't rich results showing?
A: Possible reasons:
- Missing required properties
- Page not indexed
- Google's discretion (not guaranteed)
- Competing pages more suitable
Q4: Microdata vs JSON-LD - which should I choose?
A: JSON-LD is recommended. It's officially recommended by Google and easier to maintain as it's separate from HTML.
Q5: Can structured data be applied to dynamic content?
A: Yes! Google can read JSON-LD generated by JavaScript. However, server-side rendering is more stable.
Conclusion
Structured Data Essentials:
- Use JSON-LD: Google recommended format
- Choose appropriate schema: Match content type
- Include required properties: Check type-specific requirements
- Match content: Only visible information
- Test thoroughly: Pass Rich Results Test
Related Tools
| Tool | Purpose |
|---|---|
| Structured Data Generator | Auto-generate JSON-LD |
| Meta Tag Generator | Generate meta tags |
| SERP Preview | Preview search results |
About the Author
Toolypet Team
Development Team
The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.