Structured data check

Enter a page address. We read its JSON-LD blocks, point at any syntax error, outline each item and compare it with the properties search engines ask for. Microdata and RDFa types get listed too.

Give the page itself, not only the domain: an article, a product or a recipe carries different data from the home page.

Or try yoast.com, www.bbcgoodfood.com/recipes/classic-lasagne

A second copy of the page, written for machines

Show a person a product page and they know right away which number is the price and which is the stock count. A program just sees text. Structured data spares it the guessing. Next to the visible page, you publish the same facts as labeled fields, using names from the shared vocabulary at schema.org. This thing is a Product, its name is this, its offers hold a price of 49.00 in USD.

There are three ways to write it. JSON-LD puts everything in one script tag, separate from the layout, and it’s the form Google recommends. Microdata and RDFa spread the labels over the HTML tags as attributes.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How tides work",
  "datePublished": "2026-03-14T09:30:00+00:00",
  "author": { "@type": "Person", "name": "Jane Doe" }
}
</script>

Search engines use these fields to draw richer results, with review stars, a price, a recipe photo or an event date. Those are called rich results.

What this check reads

Our server downloads the page once, up to 3 MB, and doesn’t run its scripts. Then it works in four steps.

  1. Syntax. Each JSON-LD block goes through a strict JSON reader. At the first fault it gives the line, the character and the likely cause: a comma before a closing brace, a quote inside a text that wasn’t escaped, curly quotes pasted from a word processor, an HTML comment, a raw line break. One fault is all it takes for a parser to drop the whole block.
  2. Items. @graph lists are opened up so that every item is shown separately, with its type and an outline of its properties. A property that points to another item with @id is followed when the target is on the page.
  3. Properties. For the types that feed a rich result, the item is compared with a list of required and recommended properties taken from Google’s documentation.
  4. Values. In every item, addresses have to be absolute, dates and durations have to follow ISO 8601, @context has to be schema.org, and each @id pointer has to lead somewhere.

Microdata (itemscope, itemtype) and RDFa (typeof) are counted and named by type. Their properties aren’t validated.

The types we compare, and what they need

TypeRequiredWorth knowing
Article, NewsArticle, BlogPostingNothingRecommended: headline, image, datePublished, dateModified, author as an item with name and url.
Productname, and one of offers, review, aggregateRatingAn offer needs price; a rating needs ratingValue and a count.
BreadcrumbListitemListElement with position, name, itemGoogle shows the trail on desktop results only since 2025.
FAQPagemainEntity: questions with an accepted answerSince August 2023, shown by Google only for well-known government and health sites.
HowToname, stepRetired: Google stopped showing this result in 2023.
LocalBusinessname, addressStars for reviews you publish about yourself aren’t shown.
Eventname, startDate, location with an address
Recipename, imageTimes are durations: PT45M.
VideoObjectname, thumbnailUrl, uploadDate
JobPostingtitle, description, datePosted, hiringOrganization, jobLocationA remote job replaces the location with jobLocationType and applicantLocationRequirements.
SoftwareApplication, WebApplicationname, offers with a price, a rating or a reviewA free program has a price of 0.
WebSitename, urlFeeds the site name. The search box action was retired in late 2024.
Organization, PersonNothingRecommended: name, url, logo, sameAs for an organization.

Other types are outlined and their values checked, without a list of required properties.

Repairing what the report shows

A syntax fault
Blocks edited by hand break on commas and quotes. Generate the block with a JSON encoder (json_encode in PHP, JSON.stringify in JavaScript) and that whole family of faults goes away. In a CMS, paste JSON-LD into a code field. Never use the visual editor for it, because it curls the quotes.
A required property is missing
Add it, with the value a visitor can see on the page. Search engines compare the two, and markup that describes something the page doesn’t show can earn you a manual action.
A relative address
Write https://www.example.com/img/cover.jpg in full, not /img/cover.jpg.
A date that is not ISO 8601
Year first, then T, then the time and the offset from UTC: 2026-03-14T09:30:00+00:00. A day alone, 2026-03-14, is valid too.
A pointer to nowhere
"author": {"@id": "…/#jane"} only works if an item with that exact @id is on the same page. Add the item, or write the author in place.

What this check can’t tell you

It reads the HTML as delivered. Structured data added afterwards by JavaScript or by a tag manager is invisible here, though Google may see it after rendering. Images aren’t downloaded, so a broken or undersized image goes unnoticed. The lists of properties cover the common result types. They don’t cover every type or every optional field.

This isn’t Google’s Rich Results Test, and a clean report doesn’t promise a rich result. Valid markup makes a page eligible. Whether stars or a price show up depends on the search engine, the query, the quality of the page and policies that keep changing. Confirm in Search Console once the page is indexed.

Questions people ask

What is the difference between JSON-LD, microdata and RDFa?

They carry the same schema.org vocabulary in three syntaxes. JSON-LD sits in one script tag, separate from the layout. Microdata and RDFa add attributes to the HTML tags around the visible text. Google reads all three and recommends JSON-LD because it’s the easiest to maintain.

Does structured data improve rankings?

Not directly. It helps a search engine understand the page and makes the page eligible for richer results, which can bring in more clicks. It won’t move a page up by itself.

Why does my FAQ markup not show in Google?

Since August 2023, Google shows FAQ rich results only for well-known, authoritative government and health sites. On other sites, valid FAQPage markup gets read and has no visible effect in the results. How-to results were removed entirely the same year.

How do I find a JSON-LD syntax error?

Run the page through this check. It gives the line and the character where a JSON parser stops, and the likely cause. The most frequent ones are a comma before a closing } or ], a double quote inside a text that should be written \", and curly quotes left by a text editor.

My structured data is valid. Why is there no rich result?

Valid markup gets you in the running and nothing more. The page has to be indexed, the markup has to match what visitors see, the site has to be trusted enough for that result type, and some types are limited to certain sites or have been retired. New markup can also take days or weeks to be picked up.

Where does the JSON-LD script go in the page?

Anywhere in the HTML, in the <head> or the <body>. A page can hold several blocks, or one block that lists several items under @graph.