Structured Data with JSON-LD: A Practical Guide for 2026
Structured data is extra markup you add to a page to describe what it means in a way search engines can read precisely. Instead of letting Google guess that a block of text is a recipe, an event, or a product, you tell it directly. The payoff is rich results: the star ratings, FAQ dropdowns, event dates, and other enhanced listings that make your link stand out in search.
This guide focuses on JSON-LD, which is Google's recommended format, and shows how to add it without touching your visible HTML. It complements the SEO Audit Checklist → and the Meta Tag Generator →, which handle the rest of your on page signals.
Why JSON-LD over the alternatives
There are three ways to write structured data: Microdata and RDFa, which interleave attributes into your HTML elements, and JSON-LD, which is a single self contained script. Google recommends JSON-LD for a simple reason: it keeps the structured data separate from your markup. You drop one script block in and your HTML stays clean, which makes it far easier to add, edit, and debug.
Where it goes
Place your JSON-LD inside a script tag in the head of the document. It can technically live in the body, but the head is the conventional, reliable home for it.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Structured Data with JSON-LD",
"datePublished": "2026-06-12",
"author": { "@type": "Organization", "name": "WebDevCalc" }
}
</script>
Two keys are always present. @context points at schema.org, the shared
vocabulary every search engine understands. @type declares what kind of thing
this is, which determines every other property that applies.
Common schema types
Schema.org defines hundreds of types, but a short list covers most real sites.
| Type | Use it for |
|---|---|
| Article | Blog posts, guides, news |
| Organization | Your company identity and logo |
| Product | Items for sale, with price and rating |
| FAQPage | Question and answer sections |
| Event | Concerts, webinars, anything scheduled |
| BreadcrumbList | Navigation path in search results |
FAQ is the easiest rich result to earn
If your page genuinely answers common questions, an FAQPage block can earn
an expandable listing in search.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "Where does JSON-LD go?",
"acceptedAnswer": { "@type": "Answer", "text": "In the head of the page." }
}]
}
</script>
Tip: Only mark up content that is actually visible on the page. Adding structured data for a rating, a price, or an FAQ answer that a visitor cannot see is a guidelines violation and a fast way to earn a manual penalty. The markup must always match the real, visible content.
The rules that keep you safe
Match visible content. This is the cardinal rule. Your structured data must describe what is on the page, not an idealized version of it.
Fill required properties. Each type has properties Google needs before it will show a rich result. A Product without a price, or a Recipe without ingredients, will not qualify.
Do not mark up multiple things as one. If a page lists ten products, each gets its own description, not one block pretending the page is a single product.
Keep it accurate as content changes. Stale structured data, like an event date that has passed or a price that no longer holds, undermines trust and can be penalized.
Test everything
Never ship structured data you have not validated. A schema validator or Google's rich results test will parse your JSON-LD, flag syntax errors, and tell you whether the page is eligible for a rich result. A single misplaced comma silently disables the whole block, so this check is not optional. Validate, fix, and only then deploy.
Connecting related entities
Real pages often describe more than one thing at once: an article written by an
organization that publishes on a known website. Schema.org lets you nest these so the
relationships are explicit. The author and publisher properties
each take their own typed object, and an Article can point back to its page through
mainEntityOfPage. You do not have to flatten everything into one type. Nesting
typed objects is how you tell search engines that these entities belong together, which
produces a richer, more trustworthy picture of your content.
A realistic starting point
You do not need to mark up everything at once. Start with an Organization
block on your home page so Google understands your brand and logo. Add Article
to your posts and guides. If you sell things, add Product with real prices and
ratings. Layer in FAQPage where you genuinely answer questions. Each addition
is independent, so you can grow your structured data one type at a time.
Related reading
Structured data sits alongside the rest of your on page signals, so see the meta tags guide and the SEO audit checklist.
Bottom line
JSON-LD is the cleanest way to tell search engines what your page means. Put a single
script in the head, declare the right @type, fill its required
properties, and above all only describe content that is actually visible.
Validate before you ship. Pair it with the
Meta Tag Generator → and the
SEO Audit Checklist → for a page
that search engines fully understand.