Schema Markup Generator
Build valid JSON-LD structured data for Article, Product, FAQPage, LocalBusiness, Organization, and BreadcrumbList - then copy the ready-to-paste script tag.
- Free, no account
- No watermark
- No usage limit
About the Schema Markup Generator
Every schema generator can produce JSON-LD. The real question is whether the block you paste passes Google's Rich Results Test on the first try, and a lot of them don't, because the same short list of mistakes slips through every single time. A bare "InStock" where Google wants a full schema.org URL, empty fields left dangling in the output, the Offer sitting next to the Product instead of nested inside it, a single image where Google expected an array. This Schema Markup Generator designs those out. Price is the one that breaks the most blocks, so it gets split into two fields, the bare number in one and the currency in the other. Pick a type, fill in the fields, copy the block into your page's <head>. The shape of the output is valid by construction, and anything you leave blank just vanishes instead of shipping as an empty value that fails the validator. What no generator can build for you is a value you never typed, so when Google's documentation asks for something the form has not been given, the page says so under the fields rather than handing you a block that quietly falls short.
It covers the six types a normal site actually needs, Article, Product, FAQPage, LocalBusiness, Organization, and BreadcrumbList. Five of those still earn something in Google. FAQPage is the exception and the page says so on the type itself, because the result it used to produce was withdrawn in May 2026. Everything runs in your browser as you type. No account, nothing uploaded, and the panel on the right rebuilds the code on every keystroke so you always see exactly what will ship.
How to use
- Pick your schema type. Click a type across the top. Article for a blog post, Product for something you sell, FAQPage for a Q&A block, and so on. Each type shows only its own fields, and above them sits one line naming the Google page its requirements came from, with the date that page was read. A red asterisk means Google's documentation lists that property as required. A quieter "recommended" tag means Google names it as recommended. Nothing is starred on Article or Organization, because Google documents no required property for either, and that is worth knowing before you spend an afternoon filling boxes you were never obliged to fill.
- Fill in the fields. Type your values and watch the JSON-LD rebuild on the right. Blank fields don't appear in the output at all, so you never ship an empty property by accident.
- Add rows for lists. FAQPage and BreadcrumbList use the "Add question" and "Add crumb" buttons to grow the list. A question only counts once it has both a question and an answer, and each breadcrumb gets its position number assigned for you.
- Copy the block. Hit Copy JSON-LD and you get the full
<script>tag, indented and ready to paste. - Drop it into your page. Put it inside the
<head>, though the<body>works too since Google reads it either way. One page can hold several blocks, just add a separate script for each type. - Validate before you rely on it. Run the code through Google's Rich Results Test and the Schema Markup Validator. Both are free, and if they're happy you're done.
The mistakes it won't let you make
This is where a generator genuinely beats hand-coding. Most of the classic validation errors are designed out completely, and the rest the field layout steers you clear of.
Start with the price, because it breaks more schema than anything else. In JSON-LD the price is just the number. 129.99, not $129.99, and not 1,299.00 with a thousands comma. Put a symbol or a comma inside that value and the whole block fails. So the tool splits price and currency into two separate fields. The price field is for the bare figure, with a "number only, no currency symbol" hint sitting right under it, so a dollar sign never feels like it belongs there. Hand it a clean number and it ships as a real numeric value, not a quoted string. The currency goes in its own field as a three-letter ISO code like USD or EUR, exactly where Google reads it.
Availability is the next one. In schema.org the value is an enumeration member, which is a URL, https://schema.org/InStock, and that full form is what Google's own examples use. Google's parser does understand the bare word, so InStock on its own is not the error people often call it, but the validators are happiest with the canonical form and it costs nothing. You type the shorthand InStock here and the tool writes the full URL for you.
Then there's the clutter. Leave a field blank and it disappears from the output. No empty strings, no null, no half-filled property for a validator to choke on. Plenty of generators dump every field into the block whether you touched it or not, this one only emits what you actually gave it.
And the nesting, which is the thing hand-coders lose sleep over. Your price is not a direct property of the Product, it belongs to an Offer that sits inside it, and get that wrong and Google simply can't find your price. Fill in a price here and the whole Offer object gets built in the right place. Images work the same way. Google prefers them as an array even when there's only one file, so a single image is wrapped for you, which saves a rewrite the day you add a second photo.
Which types are worth setting up
You don't need all six. You need the ones that match what your page actually is. If you sell things, start with Product and Organization. Run a physical shop, go with LocalBusiness and Organization, and pair it with a verified Google Business Profile so the knowledge panel has something to draw on. If you publish, Article and BreadcrumbList are your two. Organization belongs on your homepage regardless, it's what feeds your logo, name, and social links into the knowledge graph.
One honest heads-up on FAQPage. Google narrowed FAQ rich results to a short list of government and health sites in August 2023, then withdrew the result for everyone on 7 May 2026, with the Rich Results Test and the Search Console report dropping it the following month. There is no site left where the expandable questions appear. The markup still isn't wasted, search engines and AI overviews read it to make sense of your content, but nothing you do to a FAQPage block brings that snippet back.
Test it before you trust it
Never ship schema you haven't checked, and use both free tools because they answer different questions. The Rich Results Test tells you whether Google can build a rich result from your markup, so it's strict about Google's own requirements. The Schema Markup Validator tells you whether the markup is valid Schema.org at all, regardless of what Google chooses to do with it. If the Rich Results Test comes back "valid" but "no rich results," your syntax is fine. You're just missing a property Google wants for that snippet, or the type doesn't earn one anymore.
Frequently asked questions
Can one page carry more than one schema block?
Yes, and it's normal. A single product page often runs a Product block, a BreadcrumbList, and an Organization block together. Generate each one here and paste them one after another, each in its own <script type="application/ld+json"> tag. You can also fold several types into one block with an @graph, but separate scripts are easier to read and edit, and Google treats them the same.
Can I edit the output by hand afterward?
Absolutely. The block is a clean starting point, tweak it all you want. If you need a property this tool doesn't expose, or you want to wire the markup into a build step, copy the output and hand-edit from there. Just re-run it through a validator after you touch it, since hand-editing is exactly where stray commas and smart quotes sneak in.
What's the difference between Offer and AggregateOffer?
Use plain Offer when the product has one price, which is what this tool builds. Reach for AggregateOffer only when the same page sells an item across a real price range, several sellers or variants at different prices, and you want a "from $X to $Y" listing. There's a catch worth knowing, AggregateOffer only exposes lowPrice and highPrice, not each individual price, so Google Merchant Center sometimes can't match a specific listing price and rejects the product ad. For one fixed price, plain Offer is the exact, safe choice.
My code validates but no rich result shows up. Why?
A few ordinary reasons. Eligibility is not a promise, Google decides page by page whether to actually show a snippet. Some result types are simply gone, FAQ since May 2026, so valid markup can produce nothing visible. And it takes time, Google has to recrawl and reprocess the page, which can run days or weeks. Valid code gets you in the door, it doesn't guarantee the snippet and it isn't instant.
Does adding schema lift my rankings?
Not directly, and anyone promising otherwise is selling something. Google has said outright that structured data is not a ranking factor. What it does is make you eligible for the richer listings, and those take up more room in the results and pull a higher click-through rate. More clicks at the same position is a real win, and better click behavior can help you indirectly down the line.
Do I need `http://` or `https://` in the @context?
Use https://. Both technically resolve, but Google's own examples use the secure version and so does this tool, so your block matches theirs and there's nothing for a reviewer to second-guess. You never type it here anyway, the tool sets @context and @type for you on every block.