Most sites have no structured data. The ones that do often implement it incorrectly. This is good news: adding valid JSON-LD is one of the fastest ways to get more SERP real estate without improving your ranking position.
What structured data actually does
Structured data (schema markup) tells Google what your content means, not just what it says. A page about a recipe can use structured data to tell Google: this is a Recipe, the cook time is 30 minutes, the rating is 4.8 stars.
When Google understands the content type, it can display rich results — enhanced SERP listings that include stars, images, FAQs, prices, or other visual elements. Rich results don't improve your position, but they significantly increase the visual footprint of your result and typically improve CTR by 10–40%.
Which schema types produce rich results
Not all schema types produce rich results. The ones that do (as of 2025):
- FAQPage — expandable FAQ dropdowns below your result (very visible)
- Article / BlogPosting / NewsArticle — article date, image in Top Stories carousel
- Product — price, availability, star ratings in product results
- Review / AggregateRating — star ratings next to your result
- HowTo — step-by-step instructions with images in rich result
- BreadcrumbList — replaces URL with breadcrumb trail in SERPs
- SiteLinksSearchBox — search box directly in your Google result
- Event — event date, location in event-specific SERP features
- JobPosting — job details in Google Jobs
- VideoObject — video thumbnail, duration in video results
How to implement JSON-LD
JSON-LD is the recommended format. It goes in a <script> tag in the page <head>and doesn't require modifying your HTML structure. This makes it easy to add and maintain.
Example for a blog post:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Fix Render-Blocking Resources",
"description": "...",
"datePublished": "2025-03-19",
"dateModified": "2025-03-19",
"author": {
"@type": "Organization",
"name": "SEO Improvement",
"url": "https://seoimprove.net"
},
"publisher": {
"@type": "Organization",
"name": "SEO Improvement"
}
}
</script>Example for FAQ:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is a render-blocking resource?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A render-blocking resource is a CSS or JS file that the browser must download and process before it can paint any content to the screen."
}
}
]
}Common implementation mistakes
- Marking up content not visible on the page.Google requires that structured data describes content users can see. A hidden FAQ that doesn't appear in the HTML body will be rejected.
- Missing required properties. Each schema type has required fields.
Productrequires a name.Articlerequires a headline and datePublished. Omitting required fields disqualifies the rich result. - Incorrect date formats. Dates must be in ISO 8601 format:
2025-04-30or2025-04-30T09:00:00Z. - FAQPage with only one question. Google expects at least 2 questions for the FAQ rich result. One question renders as a plain result.
- AggregateRating with no review count. A rating of 5 stars with 0 reviews will be rejected.
How to test your structured data
Use Google's Rich Results Test (search.google.com/test/rich-results). Enter your URL or paste your JSON-LD. It shows which rich result types are eligible, which required fields are missing, and any validation errors.
After deploying, check Google Search Console → Enhancements. Each schema type you implement gets its own report showing how many pages are eligible for rich results and how many have errors.
The @graph approach for multiple types
When a page benefits from multiple schema types, use an @graph array to keep everything in a single <script> tag:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://yoursite.com/#website",
"url": "https://yoursite.com",
"name": "Your Site"
},
{
"@type": "Article",
"@id": "https://yoursite.com/post/#article",
"headline": "Your Article Title"
}
]
}This is cleaner than multiple separate <script> tags and is the format recommended by Yoast and most SEO tools.