Shwetank Ojha
Schema & Structured Data

Schema Markup Generator

Paste a URL. The analyser reads the page end to end — meta tags, existing structured data, headings, images, footer, prices, Q&A — then builds a connected JSON-LD @graph and audits it against Google's documented requirements.

Includes the JSON-LD validator and FAQ builder that used to be separate tools.

Analyse a page

Paste a URL above. The analyser reads the full page — meta tags, existing structured data, headings, images, footer, prices and Q&A — then builds a connected @graph and audits it against Google's requirements.

Generated from page analysis
Analyse a page to generate schema…

Paste inside your <head>, then verify with Google

What makes this different

Every claim below came out of measuring real pages, not guessing. The numbers are from the test runs behind this tool's rebuild.

Reads the whole page, not the first 200 KB

Modern frameworks emit JSON-LD after the hydration payload — nike.com at byte 332,285, stripe.com at 592,285. Tools that cap early report 'no structured data' on pages full of it. This one reads up to 5 MB.

Builds a connected @graph, not a flat blob

WebSite → WebPage → BreadcrumbList → your entity → Person and Organization, each with a distinct @id fragment so nodes reference rather than duplicate each other.

Audits against Google's actual requirements

Required versus recommended properties per rich-result feature, @id collision detection, dangling reference checks, and a content-backing test that catches invented values before Google does.

Works regardless of stack or blockers

Static HTML, Next.js, Nuxt, WordPress, Shopify, Astro. Bot-protected sites get a TLS-impersonated retry, and the paste-HTML path always works because your own browser is never blocked.

Schema markup questions

29 questions, from “what is schema markup” through to @id strategy across a site. Click any question to expand it.

Beginner(8)

What is schema markup?

Schema markup is a standardised vocabulary — defined at schema.org — that you add to a web page to describe what the page is about in a way machines can parse reliably. Instead of making a search engine infer that '£49.99' is a price and '4.8 stars' is a rating, you state it explicitly. Search engines and AI answer engines use that structured description to understand the page, and in some cases to display richer results.

What is JSON-LD, and why does this tool only output that format?

JSON-LD (JavaScript Object Notation for Linked Data) is a way of expressing schema markup as a standalone block of JSON inside a <script> tag. The two alternatives — Microdata and RDFa — require you to weave attributes through your existing HTML, so they break whenever the markup changes. JSON-LD sits in one self-contained block, which makes it far easier to maintain. Google explicitly recommends JSON-LD, so this tool outputs only that.

Where do I paste the code this tool gives me?

Anywhere inside the <head> of the page it describes. It also works inside <body>, but <head> is conventional and makes it easier to find later. Paste the entire block, including the surrounding <script type="application/ld+json"> tags. One page can carry several JSON-LD blocks, though this tool produces a single connected @graph instead, which is cleaner.

Do I need to know how to code to use this?

No. Paste a URL, and the tool reads the page and builds the markup for you. You only need to be able to paste the resulting block into your page's HTML — every CMS has somewhere to do this, whether that's a theme header file, a 'custom code' field, or a plugin.

Will schema markup make my site rank higher?

Not directly. Schema markup is not a ranking factor. What it does is make you eligible for rich results and help search engines and AI systems understand your content with less ambiguity. The practical effect is usually a higher click-through rate from the same position, rather than a higher position. Anyone promising rankings from schema alone is overselling it.

Is this tool actually free?

Yes — no signup, no account, no usage limit. The page analysis runs on our server and the schema generation runs in your browser. Nothing you analyse is stored.

What schema type should I choose?

The tool detects one for you and shows its confidence along with the evidence behind the guess — existing markup on the page, og:type, URL patterns, whether a price was found, and so on. You can override it at any time. As a rule: use Article for editorial content, Product for anything with a price, LocalBusiness for a physical location, and Organization for a homepage or about page.

How do I check my markup actually worked?

Deploy the page, then run it through Google's Rich Results Test and the Schema Markup Validator. After a few days, Search Console's 'Enhancements' reports will show whether Google has picked up the markup across your site. The audit score in this tool catches problems before you deploy, but only Google can confirm eligibility.

Intermediate(11)

What is an @graph, and why does this tool build one instead of a single object?

An @graph is a single JSON-LD block containing multiple connected nodes rather than one flat object. A typical page is not one thing — it is a WebPage, which is part of a WebSite, published by an Organization, containing an Article, written by a Person, with a primary ImageObject. In a flat object those entities get inlined and duplicated. In an @graph each gets a stable @id and the others reference it. That is the difference between describing a page and describing the entities on it, and it is what separates properly engineered markup from what a language model produces from a prompt.

What is @id and why does it matter so much?

@id is the unique identifier for a node — the thing that lets other nodes point at it instead of copying it. The critical rule is that an @id must never be the bare page URL. If your Article node uses @id: 'https://example.com/post' and the page's WebPage node uses the same string, both claim the same identity and consumers will merge or silently drop one. Always use a distinct fragment: '#article', '#webpage', '#organization'. This tool enforces that and flags any bare-URL @id in the audit.

What does the 'content backing' check in the audit do?

It compares every text value in the generated schema against the text actually present on the page. Google's structured data guidelines require markup to represent visible content — inventing a rating, a price or a description that appears nowhere on the page is a spam signal and can attract a manual action. This is the characteristic failure mode of AI-written schema, because a language model will happily produce a plausible-sounding value it has no evidence for. Since the tool has already read your page, this check costs nothing and is on by default.

Do FAQ rich results still exist?

No. Google stopped showing FAQ rich results on 7 May 2026 and removed the FAQPage documentation entirely on 15 June 2026. The Search Console report and Rich Results Test support were withdrawn in June, and API data in August 2026. FAQPage remains valid schema.org and AI answer engines still parse it, so this tool still generates it — but it is labelled clearly, because anyone adding it expecting a Google rich result is going to be disappointed.

What about HowTo markup?

HowTo rich results were retired from mobile in August 2023 and desktop in September 2023. There is no Google surface for them today. As with FAQPage, the markup is still valid and still useful for AI answer engines, so the tool supports it with a clear label rather than pretending otherwise.

The tool couldn't fetch my page. What now?

Switch to the 'Paste HTML' tab. Open your page in a browser, view source, select all, and paste. The analyser runs identically on pasted HTML — same extraction, same @graph, same audit — because it operates on a parsed DOM rather than on a network response. Your own browser is never blocked, so this path always works. This is the honest fix: some sites (Cloudflare and Akamai Enterprise in particular) fingerprint at the TLS layer and refuse any server-side request regardless of headers.

Why did it read my page but find almost nothing?

Your page is probably a JavaScript shell — the HTML contains a mostly empty container and the content is rendered client-side. The tool flags this explicitly as a warning rather than quietly returning thin data. It also mines embedded hydration state (__NEXT_DATA__, __NUXT__, Apollo caches) to recover fields like price and SKU that never reach the static HTML. If the warning appears, use the paste-HTML path with the rendered DOM from your browser's inspector rather than View Source.

Can one page have more than one schema type?

Yes, and most pages should. A blog post is legitimately a WebPage, a BlogPosting, and a BreadcrumbList at once. The mistake is emitting them as separate disconnected blocks that repeat the same publisher and image data. The @graph this tool builds expresses all of them as one connected structure, which is both smaller and less ambiguous.

What's the difference between required and recommended properties?

Required properties are the minimum Google needs for your page to be eligible for a given rich result — omit one and you get nothing. Recommended properties are not gating, but they materially improve how the result is displayed and how confidently the content is understood. The audit separates the two: missing required properties are errors that cost significant points, missing recommended ones are informational suggestions.

Does schema markup help with AI search and LLM citations?

It helps, though less deterministically than with traditional rich results. AI answer engines parse JSON-LD when it is present because it is unambiguous — an explicit author, date and organization is far easier to attribute than prose. It does not guarantee citation; content quality and authority still dominate. See our glossary entry on Generative Engine Optimization for how this fits into a broader strategy.

How often should I update my structured data?

Whenever the underlying facts change. Prices, availability and dateModified are the ones that go stale fastest, and stale structured data is worse than none — Google may distrust markup that repeatedly contradicts the page. If your data changes frequently, generate the JSON-LD from your CMS programmatically rather than pasting a static block.

Advanced(10)

How should I structure @id fragments across a whole site?

Use origin-level fragments for site-wide entities and page-level fragments for page-specific ones. The Organization and WebSite nodes are the same entity on every page, so they should be 'https://example.com/#organization' and 'https://example.com/#website' — identical strings sitewide, so consumers can consolidate them. Page-specific nodes hang off the canonical URL: 'https://example.com/post#webpage', '#article', '#primaryimage'. Consistency across pages is what lets a search engine build a coherent picture of your site rather than treating each page as unrelated.

Should I use the canonical URL or the requested URL as the base for @id?

Always the canonical. If a page is reachable at several URLs — tracking parameters, trailing slashes, pagination variants — basing @id on the requested URL generates a different identity for every variant, fragmenting the entity. This tool resolves the canonical first and uses it as the base for every @id and for the WebPage url property.

Why does my markup validate but produce no rich result?

Validity and eligibility are different things. Valid markup with all required properties makes you eligible; it does not entitle you to a rich result. Google also weighs page quality, site-level trust, whether the markup matches visible content, and whether the feature still exists at all — the FAQ deprecation caught a lot of people whose markup was perfectly valid. Check Search Console's Enhancements report: it distinguishes 'valid' from 'valid with warnings' and shows actual impressions.

Can structured data trigger a manual action?

Yes. Google issues 'Spammy structured markup' manual actions for markup that describes content not visible on the page, marks up irrelevant or misleading content, or fabricates reviews and ratings. Self-serving review markup — a business marking up reviews of itself — is specifically disallowed for several types. This is precisely why the content-backing audit exists: it catches the most common trigger before you deploy.

How do I handle structured data on JavaScript-rendered pages?

Google renders JavaScript, so client-injected JSON-LD can work, but it adds a dependency on the render queue and gives you a slower, less predictable feedback loop. Server-render your JSON-LD wherever you can. If you must inject it client-side, use standard DOM APIs rather than a framework abstraction, and verify with the URL Inspection tool's rendered HTML view — not View Source, which shows the pre-render state. Note that AI crawlers are generally much weaker at JS rendering than Googlebot, so client-side-only markup is often invisible to them entirely.

What's the right way to model a product with variants?

Use ProductGroup as the parent with hasVariant pointing at individual Product nodes, each carrying its own sku, offers and variant-defining properties (size, colour). The older pattern — one Product with an AggregateOffer spanning a price range — still validates but communicates far less, and Google's merchant listing documentation now prefers the explicit ProductGroup structure. This tool normalises a detected ProductGroup onto Product for single-item output; model the full variant tree in your CMS.

How do sameAs, Organization and entity consolidation actually work?

sameAs links your entity to authoritative external profiles — Wikipedia, Wikidata, LinkedIn, Crunchbase, verified social accounts. The purpose is disambiguation: it tells a search engine that your 'Apex Digital' is the same entity as the one described elsewhere, which is how you get associated with a Knowledge Graph entry rather than being treated as an unknown string. Wikidata and Wikipedia carry disproportionate weight because they are already Knowledge Graph sources. This tool harvests sameAs candidates from your page's footer and header links automatically, since that is where they almost always live.

Should structured data be identical across paginated or filtered pages?

No. Each paginated URL should describe itself — its own canonical, its own @id fragments, its own ItemList contents. Copying page one's markup onto every page creates duplicate identities across URLs, which is exactly the ambiguity structured data is supposed to eliminate. Sitewide entities (Organization, WebSite) should stay identical; page-scoped entities must not.

Why does this tool fetch up to 5 MB when most tools stop at a few hundred KB?

Because modern frameworks emit JSON-LD late in the document, after the hydration payload. We measured the byte offset of the first JSON-LD block on real pages: nike.com at byte 332,285 and stripe.com at 592,285. Any tool capping at 200 KB silently discards the exact data it exists to read, and reports 'no structured data found' on pages that are full of it. Raising the ceiling was the single highest-value fix in this rebuild.

Is there an official API for the Rich Results Test?

No. Google has never exposed a public API for the Rich Results Test, and schema.org publishes no official validator endpoint either. Any tool claiming real-time Google validation is running its own rules. This one is explicit about that: the audit encodes Google's documented required and recommended properties per feature as a hand-maintained table, checked against Search Central. Treat the score as a strong pre-flight check, and confirm with Google's own tools before you rely on it.

The complete guide to structured data

History, formats, the entity graph, common failure modes, and where this is heading. Click to read.

Why structured data exists at all

HTML describes how a document should look, not what it means. A <span> holding “£49.99” is, to a machine, indistinguishable from a <span> holding a phone number. For most of the web's history search engines closed that gap by inference — pattern-matching prices, dates and addresses out of prose, and getting it wrong often enough to matter. Schema.org, launched in 2011 as a joint project between Google, Bing, Yahoo and Yandex, replaced inference with declaration. You state what things are, and the ambiguity disappears.

Three formats, one recommendation

Structured data can be expressed as Microdata, RDFa or JSON-LD. Microdata and RDFa are inline: they decorate your existing HTML with itemprop and property attributes. That sounds elegant and works badly in practice, because the markup and the presentation become coupled — restyle a component and you silently break its structured data. JSON-LD keeps everything in one self-contained block that no template change can disturb. Google recommends it, and this tool emits nothing else.

From documents to entities

The more consequential shift is conceptual. Early structured data described pages: this page is an article, that page is a product. Modern structured data describes entities and the relationships between them: this organization published this article, written by this person, who also wrote those other articles, and is the same person as this LinkedIn profile. That is what an @graph expresses and a flat object cannot.

The mechanism is @id. Give every node a stable identifier and other nodes can point at it instead of copying it. Keep those identifiers consistent across your whole site — the same #organization string on every page — and a search engine can consolidate hundreds of pages into one coherent picture of who you are. Get it wrong, most commonly by setting @id to the bare page URL, and your entity node collides with the page's own WebPage node. Both claim the same identity and one gets silently discarded. That single mistake is responsible for a remarkable share of markup that validates perfectly and achieves nothing.

How structured data actually fails

In roughly descending order of frequency: markup that describes content not visible on the page; identity collisions from bare-URL @id values; stale values, especially prices and availability, that contradict the rendered page; missing required properties that silently disqualify the page from a rich result; and markup for features that no longer exist. That last category grew sharply in 2026 — FAQ rich results ended on 7 May and the documentation was deleted on 15 June, joining HowTo, which Google retired back in 2023. Plenty of sites are still carrying markup for results that cannot appear.

The first failure is the dangerous one, because it is the only one that can earn a manual action. Google's guidelines are explicit: structured data must represent content visible to users. Invented ratings, prices with no on-page source, and self-serving review markup are all specifically called out. This is also the failure mode that AI-generated schema walks into most readily, because a language model asked to produce markup will confidently emit a plausibleaggregateRating it has no evidence for. The content-backing audit in this tool exists for exactly that reason — it compares every text value against the page it came from and tells you which ones are unsupported.

What structured data does and does not do

It is not a ranking factor and never has been. What it does is establish eligibility for rich results and reduce the interpretive work a machine has to do. The realistic outcome is better click-through from the position you already hold, plus a cleaner signal to the systems building entity graphs. Treat any claim that schema markup lifts rankings directly with suspicion.

The audience has changed, though. For a decade the only consumer that mattered was Googlebot. Today ChatGPT, Perplexity, Claude and Gemini all parse pages to build answers, and explicit JSON-LD is dramatically easier for them to attribute than prose — a declared author, date and publisher survives summarisation in a way that a byline in a <div> does not. It is also why the deprecated types are still worth emitting: Google stopped rendering FAQ rich results, but the answer engines never stopped reading them. See Answer Engine Optimization for how this fits together, and AI Overviews for what Google's own AI layer draws on.

A workable process

Start from the page rather than from a template: analyse what is actually there, let the type be inferred from evidence, and override only where you know better. Generate the full @graph rather than a single node, because the surrounding entities are where the durable value sits. Audit before deploying — required properties, identity collisions, content backing. Then verify with Google's Rich Results Test and Schema Markup Validator, because no third-party tool, including this one, can confirm eligibility on Google's behalf. There has never been a public API for the Rich Results Test, so anything advertising live Google validation is running its own rules and calling them Google's.

Finally, if your data changes — prices, stock, publication dates — generate the JSON-LD from your CMS rather than pasting a static block. Stale structured data is worse than none, because markup that repeatedly contradicts the page teaches a search engine to distrust all of it. Structured data is only one layer of technical eligibility — it sits alongside crawling, indexing and author authority, and none of them substitutes for the others. The rest of the free SEO toolkit handles the neighbouring problems.