SEO check

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.

Check my website

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.

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.

Test my page free

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.

FormatWhere it livesUpkeepOur report
JSON-LDA script block in the head or body, apart from the visible HTMLEasy to generate and edit, but it must be kept in step with the contentCounted
Microdataitemscope, itemtype and itemprop attributes on the visible elementsStays in sync with the text, but is harder to maintain in templatesCounted
RDFavocab, typeof and property attributes on the visible elementsSimilar to Microdata, and seen mostly in some CMS ecosystemsNot 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 typeStart withKey properties
Most sitesOrganization, WebSite, BreadcrumbListname, url, logo, sameAs
Publishers and blogsArticle schema or BlogPostingheadline, author, datePublished, image
ShopsProduct schema with an Offerprice, currency, availability
Local businessesLocalBusiness schemaaddress, phone, opening hours
EventsEvent schemaname, startDate, location
RecipesRecipe schemaname, image, with ingredients and cook time recommended
JobsJobPosting schematitle, 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.

  1. Run the free report. Open the Structured Data item and read the JSON-LD and Microdata counts.
  2. 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.
  3. Ask the console. Open the browser console and run the two lines below. Each returns a count.
  4. 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.
  5. 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.
JavaScript
document.querySelectorAll('script[type="application/ld+json"]').length
document.querySelectorAll('[itemscope]').length

A 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.

  1. Pick the type. Choose the type that matches the main subject of the page and open its property list on schema.org.
  2. Write the JSON-LD. Use the example below as a template and replace every value with your own real details.
  3. Place the script. Put it in the head, though the body also works. Use straight quotes, no trailing commas and absolute https URLs.
  4. Match the page. Every value must agree with what visitors can see. Run the block through a JSON validator before publishing.
  5. Publish and re-test. Clear the page cache, load the live URL and run the report again.
HTML
<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.

PlatformWhat it doesWhat to check
WordPressSEO plugins such as Yoast SEO and Rank Math print Organization, WebSite and Article markupMake sure the theme isn't printing a second copy
ShopifyMost themes print Product markupInspect the product template before adding another block
Wix and SquarespaceBoth generate markup for common types such as products and blog postsWix 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 ManagerA custom HTML tag can output JSON-LDGoogle reads the rendered page, but warns that dynamic Product markup can be crawled less reliably
Static HTMLYou control the templatePaste 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:

  1. Choose the type that fits the page: Organization for the home page, Article for a post, Product for a product.
  2. 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.
  3. Keep every value identical to what visitors can see on the page, and use https URLs with straight quotes.
  4. Save, clear the page cache and publish.
HTML
<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:

HTML
<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.

Re-test my website

Frequently Asked Questions

What is structured data markup in SEO?
Structured data markup is a set of labels added to the page code that tell search engines what the content is, using the schema.org vocabulary. For example, it can mark a number as a rating value on a product. It is not the database term, and it lives in JSON-LD, Microdata or RDFa inside the page.
Is structured data the same as schema markup?
In practice the two terms are used almost interchangeably. Structured data is the general idea of labeling content for machines, while schema.org is the shared vocabulary that most markup uses. JSON-LD and Microdata are the syntaxes you write it in, so schema markup is simply structured data written with that vocabulary.
Does structured data improve Google rankings?
Not directly. Google says structured data helps it understand a page and makes the page eligible for rich results, but it does not promise a ranking boost, and it does not promise a rich result even when the markup is valid. A rich result can still lift click through rate, because a fuller listing often earns more attention than a plain one. Treat it as eligibility.
Should I use JSON-LD, Microdata or RDFa?
Use JSON-LD in most cases. Google supports all three formats and recommends JSON-LD, which sits in one script block apart from the visible HTML and is easier to maintain. Choose Microdata only when a template already prints it correctly. Our SEO report counts JSON-LD and Microdata, but it does not count RDFa.
How do I check structured data on my website?
There are three quick routes. Run the free SEO report to see the JSON-LD and Microdata counts, search the page source or rendered DOM for application/ld+json and itemscope, and test the URL in Google Rich Results Test or the Schema Markup Validator. For a property level check, use the schema markup validator tool on this site, which reads the page and reports missing fields.
Why does my SEO report say no structured data was found?
The usual causes are these. The page truly has none, the script type is not exactly application/ld+json in lowercase, the script has no content at all, the markup is RDFa, the script is added after the page load event, or a bot challenge page was tested instead of your real page. Add one JSON-LD block that matches the visible content, then run the report again.
Do FAQ and HowTo structured data still give rich results?
No, you should not expect them. Google has stopped showing the FAQ rich result, and the HowTo type is not in the current Search gallery, which you can confirm in Google's structured data guide. The markup can still describe visible content for other engines and AI readers, as long as it matches what the page actually shows.
Can wrong structured data hurt my site?
It can. Wrong or misleading markup can cost the page its rich result eligibility, and Google can apply a structured data manual action for it. Google states that this action does not change how the page ranks in web search. Hidden content, fake reviews and mismatched facts are the usual causes, so mark up only what visitors can see on the page.

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.