NEW CASE
Antana

We create digital solutions that work for businesses


Give us a call +38 (066) 35-14-529

Let's take the first step towards your website — write to us

Close
Tools

Schema Validator

JSON-LD syntax, required properties per type and logical errors.

Free audit

Structured data is just one of dozens of things Google checks

A tool checks one thing. We’ll go through your whole site for free and send a report: what’s holding you back in Google and what to fix first.

  • Indexing and technical errors
  • Speed and Core Web Vitals
  • Meta tags, structured data, duplicates
  • A fix plan, by priority

Report in 1–2 business days. No strings attached — if everything’s fine, we’ll say so.

By clicking the button you agree to the privacy policy

What the validator checks

Broken markup fails silently: the rich result simply never appears, and working out why without a check is hard.

JSON syntax A trailing comma, single quotes instead of double, comments — any one of these makes the whole block unreadable.
@context і @type Without a context the block is not tied to the schema.org vocabulary. Without a type there is no telling what you are describing.
Required properties Each type has its own set. A LocalBusiness without an address or a Product without a name is pointless.
Recommended properties Markup works without them but the result is thinner. We list them separately so the difference is clear.
Logical errors A rating of 7 out of 5, a price in words, a date as 15/01/2026, a relative URL — formally valid, functionally broken.
Nested entities Markup often nests entities: an Offer inside a Product, a Question inside a FAQPage. We check each one separately.

One caveat: valid markup does not guarantee a rich result in Google. That decision is always the search engine’s, and no third-party validator can predict it.

Common types and what they need

Organization Only name is required. But without logo, url and sameAs there is little benefit — those tie the site to the company profiles.
LocalBusiness Requires name and address. For local results add telephone, openingHours and geo coordinates.
Article headline is required. Author, publication date and an image are what give a full appearance in results.
Product The name is required; offers with a price, an image and a rating are what actually appear in results.
FAQPage Needs mainEntity with a list of Question items, each with an acceptedAnswer. The answers must exist on the page itself.
BreadcrumbList An itemListElement list with positions. It replaces a long URL in the result with a readable path.

Why Google removes a rich result

Data does not match the page The markup says 500, the page says 900. That counts as deception, and the penalty removes rich results across the whole site, not just that page.
A rating with no reviews AggregateRating on a page with no reviews at all. The most common trigger for a manual action over markup.
FAQ with no answers on the page The questions exist only in the markup and not in the page text. Google checks this and discards the markup.
Marking up content that is not there Describing a product that is not on the page, or someone else’s reviews. Formally valid but against the rules.

How to work through markup

1 Syntax first If the JSON is invalid nothing else matters: the block is unreadable and affects nothing.
2 Then required properties Without them the type is incomplete. Add the recommended ones only once the required are in place.
3 Check against the page Every value in the markup must be visible to a person on the page. That is the core rule, and breaking it is what gets penalised.
4 Verify with Google Our validator catches code errors, but only the search engine’s own tool can give a final answer about rich results.

Common markup errors and how to fix them

Nine things the validator catches most often. For each one, the broken code and the corrected version. Google silently skips most of these: the markup simply does not work, and nobody tells you.

1. Trailing comma

JSON is stricter than JavaScript: a stray comma before } or ] breaks the whole block. The browser does not complain; Google does not read the markup.

// before
{ "@type": "Organization", "name": "BB STUDIO", }

// after
{ "@type": "Organization", "name": "BB STUDIO" }

2. Single quotes

JSON allows only double quotes. Code with single quotes looks fine but does not parse.

// before
{ '@type': 'Article', 'headline': 'Title' }

// after
{ "@type": "Article", "headline": "Title" }

3. Missing @context

Without "@context": "https://schema.org" the parser does not know that Product is a Schema.org type rather than an arbitrary word. The whole block is ignored.

// before
{ "@type": "Product", "name": "Laptop" }

// after
{ "@context": "https://schema.org", "@type": "Product", "name": "Laptop" }

4. Comments inside JSON

A developer left // TODO or /* ... */, and it is no longer JSON. Comments must be removed entirely.

5. A required field is missing

For Article it is headline; for Product, name; for Event, name, startDate and location. Without them Google will not show a rich result even if everything else is perfect. The full table is below.

6. A rating with no reviews on the page

The most dangerous error: aggregateRating on a page where no review is visible. Google calls this self-serving reviews, and it is the most common reason for manual actions, which remove every rich snippet on the site, not just this one.

// before — on every page of the site
{ "@type": "Organization", "name": "...",
  "aggregateRating": { "ratingValue": "5", "reviewCount": "9" } }

// after — only on the page where reviews appear as text
{ "@type": "Organization", "name": "..." }

7. Price as a string with currency

"price": "9 900 UAH" is not a number. It should be "price": "9900" with a separate "priceCurrency": "UAH".

// before
"offers": { "@type": "Offer", "price": "from 9 900 UAH" }

// after
"offers": { "@type": "Offer", "price": "9900", "priceCurrency": "UAH" }

8. Date not in ISO 8601

The parser will not understand "datePublished": "12.09.2026". Correct is "2026-09-12", or with time and zone: "2026-09-12T10:00:00+03:00".

9. Markup that does not match the page

The code says 9,900; the page says 12,900. The code has five FAQ questions; the page shows three. Google compares markup with visible content, and a mismatch is penalised the same way as hidden text. Markup describes the page; it does not decorate it.

Required and recommended fields by type

The same rules the validator applies. Without required fields there is no rich result; recommended fields raise the odds of getting one.

TypeRequiredRecommended
Organizationnameurl, logo, sameAs, contactPoint
LocalBusinessname, addresstelephone, openingHours, geo, url, image, priceRange
Article / BlogPostingheadlineauthor, datePublished, dateModified, image, publisher
Productnameimage, offers, description, brand, sku, aggregateRating
Offerprice, priceCurrencyavailability, url, priceValidUntil
FAQPagemainEntity (Question with name and acceptedAnswer)—
BreadcrumbListitemListElement—
Eventname, startDate, locationendDate, description, offers, image
Servicenameprovider, areaServed, description
WebSitename, urlpotentialAction (site search)
VideoObjectname, thumbnailUrl, uploadDatedescription, duration, contentUrl

Note for Product: aggregateRating is recommended, but only when the page genuinely shows reviews. Otherwise, see error 6.

After the check

"No errors" from the validator means the code is correct, not that Google will show stars or an FAQ in results. Rich results are Google's decision, and it decides differently for different sites and queries. What is up to you: the right type for the page's content, the required fields, markup that matches the text, and none of what is described in point 6.

For which markup types actually produce rich snippets in 2026, what gets them removed, and why LocalBusiness without an address is worse than no markup at all, read Schema.org structured data: what it gives and what loses it. Our markup generator builds correct JSON-LD for the typical cases — Organization, Article, FAQ, Product — so you do not have to write it by hand.

FAQ

Does valid markup guarantee a rich result?
No. Error-free markup is necessary but not sufficient. Google decides based on page quality, site trust and query type. No third-party validator can predict that, and promises otherwise deserve scepticism.
What earns a manual action over markup?
Most often a rating on a page with no reviews, or data that contradicts the page — one price in the markup, another on screen. The penalty removes rich results site-wide, not just on that page, so the risk far outweighs the gain.
JSON-LD or microdata in attributes?
Google recommends JSON-LD: it sits in its own block, separate from the markup, so it is easier to edit and harder to break during a redesign. Microdata works too, but this validator covers JSON-LD.
How many markup blocks may one page have?
There is no limit, and several blocks are normal: Organization, BreadcrumbList and Article coexist happily. But describe only what is actually on the page — extra entities add no benefit and increase the chance of error.
Why flag an error when Google accepts the markup?
We separate required from recommended properties. Google may accept a block without the recommended ones, but the result is thinner: without an image and date an article looks plainer in results. We only call something an error when the type is incomplete per the specification.
Why does the validator not say whether a rich result will appear?
Because nobody knows that except Google. The validator checks what can be checked: syntax, required fields, common mistakes. Whether to show stars or an FAQ in results is something Google decides separately for every site and query, and it can change its mind. Correct markup is a necessary condition, not a sufficient one.
Can I check markup for a page that is not published yet?
Yes, via the "Paste code" tab. Copy the contents of the script type="application/ld+json" tag and paste it into the field. The check is identical to the URL check, just without fetching the page. Handy for templates tested locally and for generator output before it goes live.
What markup should a service page have?
Service with provider pointing to the site Organization, plus areaServed. A price can go in offers with priceSpecification, but without availability: InStock is inventory semantics for goods, and on a service it makes Google read the page as a product listing. If the page has a questions block, add a separate FAQPage. aggregateRating only if reviews are visible on that same page.
Telegram Viber Call us