§Free schema markup checker & validator
Your schema is a second copy.
Structured data is your page written a second time, for search engines and AI answer engines. Second copies drift. Paste a URL: we compare the two and show every place they disagree.
01Schema drift
Why the second copy drifts.
Structured data is a block of JSON-LD in a page's code that describes the page to machines: who wrote it, when, what it sells, which questions it answers. Search engines use it for rich results, and AI answer engines read it alongside the text. Nobody sees it in a browser, so nobody notices when it stops matching the page.
It drifts in ordinary ways. An SEO plugin credits every post to the account that installed it. A template stamps dateModified on every build. Someone edits the FAQ on the page and not the one in the markup. A theme ships with a sample price that never gets removed. None of this breaks the page, so none of it gets fixed.
It matters because Google's structured data guidelines ask that markup describe what readers can see on the page. Markup that doesn't can cost a page its rich results and, in serious cases, earn a manual action. And anything that reads both copies, a crawler or an answer engine, gets two versions of the facts and no way to tell which one is right.
02How it works
Four steps, no guessing.
01
Fetch
We request the page once, the way a crawler does: public addresses only, ten seconds and five megabytes at most.
02
Separate
We split the HTML into what a reader sees and what only machines read. Scripts, styles and hidden elements don't count as visible.
03
Compare
Every fact in the JSON-LD is checked against the visible text, and every type and property against the schema.org vocabulary. Case, accents, punctuation and number formats are forgiven: 1299.00 matches €1.299,00, and 2026-05-03 matches 3 Μαΐου 2026.
04
Report
Each mismatch comes with what the markup says, what the page shows, and the fix. Same page, same result, every time.
03What it checks
Facts, line by line.
- ✓Everything it found: every structured data item on the page, with its properties and nested items, and the issues in each.
- ✓Authors: a real name, shown on the page, not “admin”.
- ✓Headlines: the markup's headline matches the page's heading or title.
- ✓Dates: valid ISO 8601, modified after published, the publish date shown on the page, and no dateModified stamped on every build.
- ✓FAQ: every marked-up question and answer is on the page.
- ✓Prices and ratings: the numbers in the markup appear on the page, in any local format.
- ✓Required properties for products, events, recipes, jobs, courses, videos, local businesses and reviews.
- ✓Vocabulary: every type and property exists in schema.org, sits on a type that has it, and holds the kind of value it expects; retired terms come with their replacement.
- ✓References: every @id the page points to is defined.
- ✓Syntax: every JSON-LD block parses.
04What it can't see
Where code stops.
- —Content a script adds after the page loads. We read the HTML the server sends, which is what most crawlers read first.
- —Microdata and RDFa. We check JSON-LD, the format Google recommends.
- —Meaning. We compare facts, not whether a description is fair. A claim in the markup that the page doesn't back up still needs a human eye.
- —Values in a different language from the page. We tell you when that happens, but can't compare them.
- —Every rule Google sets for each rich result. We check the required properties for the common ones; for full eligibility, also run Google's Rich Results Test.
05Questions
About Second Copy
- Is Second Copy free?
- Yes. There's no account and no email gate on the results. A captcha keeps automated traffic out, and each visitor can run up to ten checks every ten minutes.
- How is it different from Google's Rich Results Test or the Schema Markup Validator?
- The Schema Markup Validator checks your markup against the schema.org vocabulary, and Second Copy does that too. Google's Rich Results Test tells you which rich results the markup is eligible for. Neither compares the markup with the page, which is what Second Copy adds: run Second Copy to make sure your markup is valid and true, and the Rich Results Test for Google's full eligibility rules.
- Does it use AI?
- No. Every finding comes from code comparing text, dates and numbers, so the same page always gets the same result and every finding points at evidence you can check. The cost of that is meaning: code can't judge whether a description is fair.
- Do you store the pages I check?
- No. We fetch the page, check it and discard it. Results are held in memory for ten minutes so a recheck is instant. Our analytics record that a check ran and how many findings it had, never which URL.
- It says my rating isn't on the page, but I can see it. Why?
- Review widgets usually draw ratings with JavaScript after the page loads, so the number isn't in the HTML we read. That's why it shows as a note, not a problem. If the rating visitors see matches the markup, you're fine.
- Can it check a page behind a login, or one on my own machine?
- No. It only fetches public web addresses, and it refuses private and internal ones by design, so it can't be pointed at anyone's internal network.
- My page is in Greek and the markup is in English. What happens?
- Code can't compare text across languages, so we skip those values and tell you we did. The fix is usually to translate the markup with the page, so each language version describes itself.
- Does it check Microdata or RDFa?
- Not yet. It checks JSON-LD, the format Google recommends and the one most sites use today.
Fixing it for good
Patching fixes today. Keeping it fixed is a build decision.
On the sites we build, the page and its markup are rendered from the same record, so they can't disagree. leeveel.gr works that way, and we wrote up how in Your schema markup is a second copy of the page.