The short answer: JSON-LD is a JSON block you drop into your page's HTML that tells Google what the page is about. It unlocks rich results — FAQ accordions, star ratings, breadcrumbs, How-To steps — that have 30-50% higher CTR than plain blue links. Below are the 12 schema types that cover 95% of what you'll ever need, with code you can copy directly.
Why JSON-LD specifically
Google supports three structured-data formats: JSON-LD, Microdata, and RDFa. Of the three, only JSON-LD lets you keep your structured data separate from your visual markup. You can redesign your page entirely without touching the schema. That decoupling is why Google explicitly recommends it and why every major framework (Next.js, Astro, SvelteKit) ships first-class support.
Practical impact: every page on this site emits JSON-LD via a <script type="application/ld+json"> tag rendered server-side. That's how you get FAQ rich results, breadcrumb trails in search, and the "article preview" card on social shares — without writing a single line of microdata.
The 12 schema types you actually need
1. Article (blog posts, news, editorial)
Use on every blog post and news article. Unlocks the "rich article" card with author, date, and image. Mandatory fields: headline, author,datePublished, image.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "JSON-LD Examples: The 12 Schema Types You Need",
"image": "https://www.inbuild.io/og-image.png",
"author": { "@type": "Organization", "name": "InBuild" },
"publisher": {
"@type": "Organization",
"name": "InBuild",
"logo": { "@type": "ImageObject", "url": "https://www.inbuild.io/logo.png" }
},
"datePublished": "2026-05-15",
"dateModified": "2026-05-15"
}2. Product (e-commerce, SaaS)
Unlocks star ratings, price, and stock status in search. Mandatory: name,image, offers. The aggregateRating block is what triggers the star widget — only include it if the ratings are real.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "InBuild Pro",
"image": ["https://www.inbuild.io/product.png"],
"description": "AI website builder with code export.",
"brand": { "@type": "Brand", "name": "InBuild" },
"offers": {
"@type": "Offer",
"url": "https://www.inbuild.io/pricing",
"priceCurrency": "USD",
"price": "49.00",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "1247"
}
}3. FAQPage (the single biggest CTR boost)
FAQs render as expandable dropdowns directly in search results. They're the highest-ROI schema type — easy to author, huge visual real estate. The exact FAQPagestructure:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is JSON-LD?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JSON-LD is Google's preferred structured-data format..."
}
},
{
"@type": "Question",
"name": "Where do I put it in my HTML?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Inside a <script type=\"application/ld+json\"> tag, anywhere in <head> or <body>."
}
}
]
}Gotcha: Google requires the FAQ content to also appear visibly on the page — don't add FAQ schema for questions you don't answer on the page itself. Mismatch triggers manual penalty.
4. HowTo (tutorial pages)
Renders as numbered steps in search. Required: name, step array with HowToStep items. Add image per step for richer display.
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to deploy Next.js to Vercel",
"step": [
{
"@type": "HowToStep",
"name": "Push your repo to GitHub",
"text": "Run git init, git add, git commit, then push to a new GitHub repository."
},
{
"@type": "HowToStep",
"name": "Import the repo into Vercel",
"text": "Go to vercel.com/new and select your GitHub repository."
}
]
}5. BreadcrumbList (every nested page)
Replaces the ugly URL in Google's result with a clickable trail (Home › Blog › Post Title). Every page deeper than your homepage should emit this.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.inbuild.io/" },
{ "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://www.inbuild.io/blog" },
{ "@type": "ListItem", "position": 3, "name": "JSON-LD Examples" }
]
}6. Organization (your homepage)
Feeds Google's Knowledge Panel. One per site, on the homepage only. Critical fields: name, url, logo, sameAs (social profiles).
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "InBuild",
"url": "https://www.inbuild.io",
"logo": "https://www.inbuild.io/logo.png",
"sameAs": [
"https://x.com/inbuild",
"https://github.com/inbuild"
]
}7. LocalBusiness (physical locations)
For brick-and-mortar — restaurants, gyms, doctors. Unlocks the Google Maps card with hours, phone, and reviews. Required: name, address,telephone, openingHoursSpecification.
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Joe's Coffee",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Portland",
"addressRegion": "OR",
"postalCode": "97201"
},
"telephone": "+1-503-555-0100",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00", "closes": "19:00"
}
]
}8. Event (concerts, conferences, webinars)
{
"@context": "https://schema.org",
"@type": "Event",
"name": "InBuild 2026 Launch",
"startDate": "2026-09-12T18:00",
"location": { "@type": "VirtualLocation", "url": "https://www.inbuild.io/launch" },
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode"
}9. Recipe
High-traffic vertical. Unlocks the rich recipe card with cook time, calories, and ratings. Mandatory: name, image, recipeIngredient,recipeInstructions.
10. Review (a single review of something)
Different from aggregateRating inside Product. Review is an entire page that's about reviewing one thing. Required: itemReviewed, reviewRating,author.
11. VideoObject
Required for video-hosted pages to appear in Google's video carousel. Fields: name, description, thumbnailUrl,uploadDate, contentUrl.
12. SoftwareApplication (apps, tools, SaaS)
Use on every product page, free tool, or downloadable app. Unlocks the price/rating card. See our free slug generator for a live example.
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "InBuild",
"applicationCategory": "DesignApplication",
"operatingSystem": "Web",
"offers": { "@type": "Offer", "price": "49.00", "priceCurrency": "USD" }
}Implementing JSON-LD in Next.js
In Next.js 16 (App Router), drop a <script> tag with dangerouslySetInnerHTML directly in your route component. It renders server-side and never hydrates — exactly what crawlers see.
export default function Page() {
const jsonLd = {
"@context": "https://schema.org",
"@type": "Article",
"headline": "Hello world",
// ... rest of your schema
}
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<h1>Your content here</h1>
</>
)
}For a deeper walkthrough see our structured data guide and the JSON-LD glossary entry.
Five common mistakes to avoid
- Schema for content that isn't on the page. FAQ schema must match visible Q&A pairs. Product schema must match a real product page. Mismatches trigger manual penalties.
- Fake reviews.
aggregateRatingwith invented review counts is the fastest way to lose all rich results. Use real data. - Missing required fields. Each schema type has required properties. The Rich Results Test will flag missing ones — run it before shipping.
- Wrong @type capitalization.
FAQPagenotFaqPage.BreadcrumbListnotbreadcrumb_list. Case-sensitive. - HTML-encoded JSON. If your CMS double-escapes quotes you'll ship broken JSON. Always view-source on production and paste into a JSON validator.
How InBuild handles structured data for you
Every page InBuild generates ships with appropriate JSON-LD — Article schema for blog posts, Product schema for pricing pages, FAQPage for any section labeled "FAQ", BreadcrumbList on every nested route. You don't configure anything; the AI detects your page's purpose and emits the right schema. Inspect any generated page's view source to see it.
Pair that with our free JSON-LD generator to handcraft custom schemas, or read the glossary entry for a one-page definition.