Structured Data Markup: What It Is and How to Fix It
Learn what structured data markup is, how our free SEO report tests for it, and how to add JSON-LD so search engines understand your page.
Free to use 14 min read Updated Oct 2026
What is structured data markup? The quick answer
Quick answer: Structured data markup is code added to a page that labels its content, such as what it is, who wrote it, what it costs and when it was published, using the shared schema.org vocabulary. Our report passes a page when the rendered HTML holds at least one JSON-LD block or one Microdata item, and fails it when it holds neither.
- Pass: the rendered page has at least one JSON-LD script with content in it, or at least one Microdata item.
- Fail: the page has neither, so search engines get no labeled description of what it contains.
- Fix: add one JSON-LD block that describes the page, using real values that match the visible text.
The honest benefit is eligibility. Valid markup can make a page qualify for rich results and gives search engines cleaner facts about who you are, but nobody can promise you a higher ranking for adding it.
What is structured data in SEO, and how is it different from the database term?
In SEO, structured data is a standard set of labels placed inside the page code. Each label names a type of thing and its properties. A product has a name, a price and an availability, and a recipe has a cook time. Search engines read that machine readable data directly instead of guessing from the layout which number is the price. The text 4.7 is only a number until you label it as the rating value of a product.
The phrase has a second meaning that dominates the suggestions for the bare term. In data science, structured data means information kept in rows and columns, like a SQL table. This guide covers markup inside web pages only.
A short glossary keeps the vocabulary straight. Structured data is the idea. The vocabulary of types and properties is schema.org, which the major search engines agreed to support, and the Schema.org getting started guide shows how it works. JSON-LD, Microdata and RDFa are the three syntaxes. A rich result is the richer display, such as review stars or a price, that Google may choose to show.
Structured data vs schema markup
In daily work the two terms mean the same thing. Structured data is the general concept, while schema markup is structured data written with the schema.org vocabulary.
Markup vs rich results
Markup is what you add, and you control it completely. A rich result is what Google may or may not show in return, and that decision belongs to Google, which can change or drop a feature at any time, as it did with FAQ results. Write markup that describes the page honestly rather than chasing one snippet.
Why structured data markup matters for SEO and AI search
The most visible payoff is the rich result. When a page qualifies, Google may show a review snippet with stars, a price, stock status, breadcrumbs, event dates or recipe details in the listing. Those rich snippets change your search appearance and can lift click through rate even when your position stays the same.
Google is careful about what it promises, and you should be too. Its introduction says the markup helps it understand a page and makes the page eligible for features, but a valid block does not guarantee a rich result and it is not described as a ranking boost. Read the Google structured data intro once, because it settles most arguments about what markup can do.
There is also an entity SEO angle. Organization markup with your name, logo and sameAs links to your official profiles helps search engines work out who you are. That can feed a knowledge panel and the Knowledge Graph, which matters most for a small business with a common name.
Search engines are no longer the only machine readers. Some AI systems can use JSON-LD as cheap extra context about what a page is, and our own AI Readiness item looks for it. Treat it as clear labeling, not a trick, and don't expect citations. Shops, recipe sites, publishers and local businesses gain the most, while a brochure site may only need a few basics. The on-page SEO guide covers the surrounding fundamentals.
How SEO Site Checker tests structured data markup
A real headless Chromium browser opens your URL, waits for the load event and reads the rendered HTML. JSON-LD added by a script or a tag manager before the page finishes loading is therefore seen, while markup injected much later may be missed.
The rule: the report counts every script element whose type is exactly application/ld+json and that contains text, plus every element that carries an itemscope attribute. If the two counts add up to one or more, the check passes. If both are zero, it fails.
What the check looks at
The check works on the rendered page, not the raw source file. It tallies JSON-LD scripts and itemscope attributes, which mark the start of a Microdata item. Each nested itemscope counts as its own item, so a product containing an offer and a brand can show a Microdata count higher than you expected.
Pass and fail in your report
A pass shows a green tick with the number of JSON-LD blocks and Microdata items found. A fail shows a red marker and a How to Fix button. There is no warning state. Everyone sees the counts, and signed in users can open the blocks themselves, while other visitors are prompted to log in or create a free account first.
What the check does not judge
The report does not test whether the JSON is valid, whether @context and @type are present, which type you used, whether a required property is missing or whether the page is eligible for a rich result. Invalid JSON-LD still counts as present, so a green tick means markup exists, not that it is correct. A type written as application/LD+JSON, or with a charset parameter, is not matched, and RDFa is not counted. A bot challenge page, such as a Cloudflare interstitial, is graded as if it were your site, with an amber banner warning that the findings do not reflect the real page.
The AI Readiness section scores JSON-LD separately and more strictly: a page with JSON-LD passes, a page with only Microdata gets a warning, and a page with neither fails. That item is added after the SEO score is counted, so it never changes your SEO score. For syntax, type and property checks, use the Schema Markup Validator, which goes much deeper than a presence check.
JSON-LD, Microdata or RDFa: which structured data format should you use?
Google supports all three formats and recommends JSON-LD, which in most cases is the easiest to implement and maintain. The table sets them side by side, including how our report treats each one.
| Format | Where it lives | Upkeep | Our report |
|---|---|---|---|
| JSON-LD | A script block in the head or body, apart from the visible HTML | Easy to generate and edit, but it must be kept in step with the content | Counted |
| Microdata | itemscope, itemtype and itemprop attributes on the visible elements | Stays in sync with the text, but is harder to maintain in templates | Counted |
| RDFa | vocab, typeof and property attributes on the visible elements | Similar to Microdata, and seen mostly in some CMS ecosystems | Not counted |
Mixing formats on one page is allowed. The one firm rule is that you never describe the same thing twice with conflicting values, for example two different prices for the same product. If you want to see how the attributes look in practice, the MDN Microdata guide is a neutral technical reference for itemscope, itemtype and itemprop.
Why JSON-LD wins for most sites
You write one block, in one place, and it doesn't touch your visible HTML. That makes it easy to template, easy to review in a pull request and easy to test. My advice is simple: choose JSON-LD unless there is a reason not to.
When Microdata makes sense
Microdata is fine when a theme or a platform already prints it cleanly and the values stay correct. In that case, ripping it out for JSON-LD adds work and risk for no gain, and our report counts it either way.
Which structured data types should you add first?
Start with what fits your site, not with every type you can find. Most sites should begin with Organization schema, WebSite schema and, on inner pages, BreadcrumbList. Organization has no required properties, and Google advises adding as many recommended ones as apply.
| Site type | Start with | Key properties |
|---|---|---|
| Most sites | Organization, WebSite, BreadcrumbList | name, url, logo, sameAs |
| Publishers and blogs | Article schema or BlogPosting | headline, author, datePublished, image |
| Shops | Product schema with an Offer | price, currency, availability |
| Local businesses | LocalBusiness schema | address, phone, opening hours |
| Events | Event schema | name, startDate, location |
| Recipes | Recipe schema | name, image, with ingredients and cook time recommended |
| Jobs | JobPosting schema | title, description, datePosted, hiringOrganization, jobLocation, with salary recommended |
Review markup such as AggregateRating belongs only on pages that show real user reviews.
Be upfront about retired features. Google has stopped showing the FAQ rich result, so FAQPage schema no longer earns that snippet, and the HowTo schema type is absent from the current Search gallery. Keep such markup only if it matches visible content. Google's advice is worth repeating: fewer properties that are complete and accurate beat many half filled in.
How to check structured data on your website
Five quick checks, from our report to Google's own tools, show you what is on the page and what Google makes of it.
- Run the free report. Open the Structured Data item and read the JSON-LD and Microdata counts.
- Search the source. View the page source and search for application/ld+json and itemscope. Source shows raw HTML, so use the browser inspector for markup added by scripts.
- Ask the console. Open the browser console and run the two lines below. Each returns a count.
- Test the URL. Use Google's Rich Results Test for rich result eligibility, then the official validator at validator.schema.org for general syntax. These two replaced the old Structured Data Testing Tool. Our own Schema Markup Validator tool adds a quick property check for common types.
- Watch it after launch. Use the URL Inspection tool and the enhancement reports in Google Search Console to see what Google actually found, including structured data errors and structured data warnings.
document.querySelectorAll('script[type="application/ld+json"]').length
document.querySelectorAll('[itemscope]').lengthA result of 1 or more on either line should pass our check, and 0 on both matches a fail.
How to add structured data markup to a page, with a JSON-LD example
Adding one block is a small job once you know the values, and a schema generator is optional because the example below is short enough to edit by hand. The steps below use an Organization for a home page, which is the safest first block for most sites.
- Pick the type. Choose the type that matches the main subject of the page and open its property list on schema.org.
- Write the JSON-LD. Use the example below as a template and replace every value with your own real details.
- Place the script. Put it in the head, though the body also works. Use straight quotes, no trailing commas and absolute https URLs.
- Match the page. Every value must agree with what visitors can see. Run the block through a JSON validator before publishing.
- Publish and re-test. Clear the page cache, load the live URL and run the report again.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Studio",
"url": "https://www.example.com/",
"logo": "https://www.example.com/images/logo.png",
"sameAs": [
"https://www.linkedin.com/company/example-studio",
"https://www.youtube.com/@examplestudio"
]
}
</script>Notice that the type attribute is written in lowercase with nothing after it, because our check matches it exactly. For a blog post, the same pattern applies with the type Article. You would use headline, author, datePublished and an image URL instead, and each must match the byline, date and hero image on the page.
Structured data markup on WordPress, Shopify, Wix and other platforms
You rarely need to write markup by hand on a hosted platform, because most print a default set. The real job is to check what already exists before adding more.
| Platform | What it does | What to check |
|---|---|---|
| WordPress | SEO plugins such as Yoast SEO and Rank Math print Organization, WebSite and Article markup | Make sure the theme isn't printing a second copy |
| Shopify | Most themes print Product markup | Inspect the product template before adding another block |
| Wix and Squarespace | Both generate markup for common types such as products and blog posts | Wix lets you edit defaults or add custom markup per page in its SEO settings, and Squarespace takes custom JSON-LD through code injection |
| Google Tag Manager | A custom HTML tag can output JSON-LD | Google reads the rendered page, but warns that dynamic Product markup can be crawled less reliably |
| Static HTML | You control the template | Paste the script in the head |
Menu names change between releases, so check each platform's own help pages for the exact path. The duplicate problem is the most common one: a theme and a plugin both print an Organization block, and the two disagree about the logo.
Structured data guidelines to follow
These rules come from Google's guidelines and apply whichever format you pick.
- Mark up visible content only. Anything you label should be something visitors can see on that page.
- Describe the page it sits on. Keep prices, dates and availability current, and include every required property for the feature you want.
- Keep the page crawlable. Google must be able to fetch it, so review the robots.txt check and make sure the page doesn't carry a noindex directive, which the noindex tag check explains.
- Use real reviews. Only mark up ratings that come from genuine users, never ones you wrote yourself.
- Avoid duplicate schema. Keep one source of truth and generate the markup from the same template data as the visible text, so it updates when the content does.
- Keep images reachable. Image URLs in the markup must be crawlable and indexable, so don't point them at blocked or login only files.
Common structured data markup mistakes and errors
Most failures come from a short list of slips. Several are invisible to our report, which only checks that markup is present, so read this list alongside your green tick.
Watch out: broken JSON still counts as present in our check. Invalid JSON-LD is easy to produce: a trailing comma, curly quotes pasted from a word processor or a missing bracket will pass the report and fail in Google's tools.
- Missing context, a missing required property or a misspelled type. Without @context set to https://schema.org, or with a type such as Organisation, the block labels nothing.
- The wrong type attribute. A value written as application/LD+JSON, or with extra parameters, is not matched by our check, so the report fails a page that looks correct to you.
- Hidden or made up content. Fake review stars and facts that visitors can't see can cost the page its rich result eligibility. Google says a structured data manual action does not change how the page ranks in web search.
- Duplicate schema. A theme plus a plugin often print the same entity twice with different values.
- Markup in the wrong places. Adding it only to the home page, or to a page marked noindex, leaves the rest of the site unlabeled.
How to Fix
The short version, the same steps you see when you click How to Fix in your report.
Why this fails: the page our report loaded has no JSON-LD script and no Microdata item, so search engines get no labeled description of the content. The check passes when the rendered page holds at least one script of type application/ld+json with text in it, or one element with an itemscope attribute. Common reasons for a fail are nothing added yet, a type value with different letter case, RDFa only, or markup injected after the load event.
How to fix it:
- Choose the type that fits the page: Organization for the home page, Article for a post, Product for a product.
- Paste a JSON-LD block into the head, using the example below with your own real values. Write the type exactly as application/ld+json in lowercase, with nothing after it.
- Keep every value identical to what visitors can see on the page, and use https URLs with straight quotes.
- Save, clear the page cache and publish.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Studio",
"url": "https://www.example.com/",
"logo": "https://www.example.com/images/logo.png",
"sameAs": ["https://www.linkedin.com/company/example-studio"]
}
</script>If a template already uses Microdata, this fallback also passes:
<div itemscope itemtype="https://schema.org/Organization"><span itemprop="name">Example Studio</span></div>- WordPress: an SEO plugin such as Yoast SEO or Rank Math adds Organization and Article markup.
- Shopify: check the theme product template for built in Product markup.
- Wix: edit the structured data defaults or add custom markup to the page in its SEO settings.
- Squarespace: add the JSON-LD block through code injection.
- Plain HTML: paste the script inside the head.
Re-test: in the browser console run document.querySelectorAll('script[type="application/ld+json"]').length and confirm it returns 1 or more. Then run the report again and look for the green tick. If it still fails, confirm the type value is lowercase and the script is not empty. For a syntax check, paste the page into the Schema Markup Validator.
Frequently Asked Questions
What is structured data markup in SEO?
Is structured data the same as schema markup?
Does structured data improve Google rankings?
Should I use JSON-LD, Microdata or RDFa?
How do I check structured data on my website?
Why does my SEO report say no structured data was found?
Do FAQ and HowTo structured data still give rich results?
Can wrong structured data hurt my site?
See how your site scores right now
Paste your address into the free report, then use the How to Fix button on anything that needs work.
Free to use. Results in under a minute for most sites.