Date modified is recommended — rich results are more likely with it.
Publisher name is recommended — rich results are more likely with it.
Description is recommended — rich results are more likely with it.
Page URL is recommended — rich results are more likely with it.
These checks read the markup only. Structured data must also describe content that is visible on the page — markup for content a visitor cannot see is against Google’s guidelines, and no generator can verify that for you.
schema.org · Article
Built in your browser — nothing is uploaded.
The markup is built in your browser from what you type. Nothing is uploaded to our server, never stored, and never sent to any analytics endpoint.
What is schema markup?
Schema markup is structured data added to a page so that machines can read what it is about. Instead of leaving a search engine to infer from your prose that a page describes a product with a price and a stock level, you state it explicitly, in a vocabulary everyone has agreed on.
That vocabulary is schema.org — a shared list of types and properties maintained collaboratively by Google, Microsoft, Yahoo and Yandex. It is much larger than any one search engine actually supports, which is worth knowing: a property existing in schema.org does not mean anything reads it.
What it buys you is eligibility. Correct markup can make a page a candidate for an enhanced search listing — review stars, an FAQ dropdown, event dates, a breadcrumb trail in place of a raw URL. It also helps a search engine understand a page correctly, which matters more the further your content sits from the ordinary.
What is JSON-LD?
JSON-LD — JSON for Linking Data — writes structured data as one block of JSON inside a script tag. It is what this generator produces, and what Google recommends.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How structured data changes what search engines can show",
"image": "https://example.com/images/structured-data.jpg",
"datePublished": "2026-08-17",
"dateModified": "2026-08-20",
"author": {
"@type": "Person",
"name": "Priya Nair"
},
"publisher": {
"@type": "Organization",
"name": "Example Publishing"
},
"description": "A practical guide to marking up articles so search engines can read the byline, the date and the headline without guessing.",
"mainEntityOfPage": "https://example.com/blog/structured-data"
}
</script>
The advantage over the alternatives is that it is self-contained. Microdata and RDFa express the same vocabulary as attributes woven through your HTML, so the markup and the content are interleaved and either one breaks when the other is edited. A JSON-LD block sits in one place, can be generated independently, and can be removed without touching a line of your markup.
Two keys are structural rather than descriptive. @context says the property names come from schema.org — without it they have no defined meaning at all. @type says which type the object is, and choosing the most specific type that fits is always better than a general one.
How to add it to a page
Pick the type and fill the fields. Required fields are labelled; the output updates as you type.
Copy the script tag.Paste it into the page’s HTML. The head is conventional and keeps it clear of your content — the body works too.
Check it describes what is on the page. The markup must match content a visitor can actually see. This is a rule, not a nicety, and it is the one that gets sites penalised.
Test the live page.Google’s Rich Results Test for eligibility, the schema.org validator for the vocabulary.
Watch Search Console. Once the page is indexed it reports structured data issues across the whole site, which is where problems you introduced months ago surface.
Which type to use
The general rule: pick the most specific type that genuinely fits. A more specific type carries everything the general one does and tells a search engine more.
Every schema type this generator supports, with what each is for.
Type
Use it for
Article
Use for news and general editorial. For a blog post, BlogPosting is the more specific type and inherits everything Article has.
BlogPosting
Identical fields to Article. Prefer it for blog content — a more specific type is never worse, and search engines treat it as an Article anyway.
Product
Only mark up a product the page is actually about. Marking a category listing as a single Product is a common cause of a manual action.
LocalBusiness
For a business customers can visit. The address must match what is on the page and in your business listings, or it works against you.
Organization
Usually belongs once, on the home page or in a site-wide block — not repeated on every page. Duplicated Organization nodes across a site are a common source of conflicting signals.
Person
Useful on an about or author page. Pair it with an Article's author field to connect the two.
Event
startDate must carry a time zone offset, or attendees in other regions see the wrong time. Keep it updated — a stale event is worse than none.
FAQPage
Every question and answer must be visible on the page. Marking up FAQs a visitor cannot see is against Google's guidelines and is the fastest way to lose rich results.
BreadcrumbList
Should match the breadcrumb a visitor can see. Order matters — the list runs from the root to the current page, and positions are numbered for you.
WebSite
Belongs on the home page. The search target only produces a sitelinks search box if your site genuinely has a search results URL of that shape.
WebPage
A general fallback. A more specific type — Article, Product, FAQPage — is almost always better where one fits.
WebApplication
For a tool or app used in the browser. Use SoftwareApplication instead for something installed.
SoftwareApplication
For desktop or mobile software. WebApplication is the more specific type for something used in a browser.
Service
For a service rather than a physical product. Pair with LocalBusiness where the service has a location.
Nested types, and why they matter
This is the single most common defect in hand-written structured data. Many schema.org properties do not take a string — they take another typed object.
author is a Person or an Organization. address is a PostalAddresswith its own five properties. A product’s price lives inside an Offer, not on the product. Writing "author": "Jane" produces something that parses as JSON and fails as schema, and the failure is quiet — the property is simply not understood.
The generator builds these as objects for you. An address typed into five separate boxes comes out as one PostalAddress; a price and a currency come out as an Offer.
FAQ markup
FAQPage holds a list of Question entries, each with an acceptedAnswer:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Is the tool free to use?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. There is no account, no trial and no paid tier."
}
},
{
"@type": "Question",
"name": "Do you store what I enter?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Everything is processed in your browser and nothing is uploaded."
}
},
{
"@type": "Question",
"name": "Can I use the output commercially?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. The markup you generate is yours to use however you like."
}
}
]
}
One constraint dominates everything else: every question and answer must be visible on the page, in the same words. FAQ markup describing content a visitor cannot see is against Google’s guidelines and is the fastest route to losing the enhancement entirely.
Worth knowing too that eligibility for the FAQ rich result was narrowed considerably — it is now limited to certain kinds of authoritative site. The markup remains useful for understanding; the dropdown is no longer a given.
Breadcrumb markup
BreadcrumbList is an ordered list running from the site root to the current page:
position starts at 1 and must be contiguous. The generator numbers them for you and renumbers when you reorder or delete a step, because keeping that in step by hand is a bug waiting to happen.
The final crumb is the current page and may omit its URL — it is where the reader already is. And the trail should match the breadcrumb a visitor can see; a structured trail that contradicts the visible one is worse than neither.
Common mistakes
Marking up content that is not on the page. The most serious of them. Invented FAQs, ratings nobody left, prices that differ from the visible ones — all grounds for a manual action.
Relative URLs. A JSON-LD block has no base to resolve against, so /images/photo.jpg means nothing. Every URL must be absolute.
A price with a currency symbol.price takes digits only, and needs a separate priceCurrency. A price with no currency is rejected outright.
Flattening nested types. An author as a string, an address as five loose properties. Valid JSON, invalid schema, silently ignored.
Duplicate, conflicting Organization blocks. One per site, on the home page. Several with different names is worse than none.
Empty properties."description": ""is not “no description”, it is a claim that the description is empty. This generator omits blank fields entirely.
Dates that do not exist. Most date handling accepts 2026-02-30 and quietly turns it into 2 March. This generator rejects it.
Letting it go stale. An event that finished last year, a price that changed, an availability that did not. Stale markup is actively misleading.
How to test it
Three tools, answering three different questions.
Rich Results Test.Google’s own. Tells you whether a page is eligible for a specific enhancement — the narrowest and most practical question.
Schema Markup Validator at validator.schema.org. Checks the markup against the vocabulary itself, including types and properties Google does not use.
Search Console. Reports issues across your whole site once pages are indexed. The only one that finds the problem you introduced on a template three months ago.
The validation in this tool checks the fields it generates — required properties, URL form, number form, impossible dates. It reads the markup and never sees your page, so it cannot confirm the markup matches your content. Test the live page.
Once the markup is right, the JSON formatter is useful for inspecting what a page already ships, and the sitemap generator for making sure those pages get found at all.
What structured data will not do
It is not a ranking factor. Adding schema does not move a page up. What it can change is how the listing looks and therefore how many people click it.
Eligibility is not an enhancement. Valid markup makes a page a candidate. Whether anything is shown is decided per query and per device, and plenty of correctly marked-up pages never see a rich result.
It does not fix thin content. Structured data describes a page; it does not improve it. Marking up a page nobody wants makes it a well-described page nobody wants.
It cannot make a claim true. Markup that contradicts the page is a liability rather than an asset.
Frequently asked questions
What is schema markup?
Schema markup is structured data added to a page so machines can read what it is about. Rather than inferring from the text that a page describes a product with a price, you state it explicitly using the shared vocabulary at schema.org. Search engines use it to understand pages and to decide which are eligible for enhanced result formats.
What is JSON-LD?
JSON-LD — JSON for Linking Data — is a way of writing structured data as a block of JSON inside a script tag. It is the format Google recommends, and the one this tool generates, because it sits in one place in the head rather than being woven through the HTML as attributes the way Microdata and RDFa are.
How do I add JSON-LD to my website?
Copy the generated script tag and paste it into the page's HTML, usually in the head. It can go in the body and still be read, but the head keeps it out of the way of your content. If your site is built with a framework or CMS, most have a way to inject a script tag per page or per template.
Which schema types does this generator support?
Fourteen: Article, BlogPosting, Product, LocalBusiness, Organization, Person, Event, FAQPage, BreadcrumbList, WebSite, WebPage, WebApplication, SoftwareApplication and Service. Each has its own field set based on what Google's structured data documentation asks for.
Which fields are required?
It depends on the type, and every field here is labelled. schema.org itself marks almost nothing as required — it is a vocabulary, not a validator — so the requirement levels shown follow Google's documentation instead, since that is what determines rich result eligibility.
What is the difference between Article and BlogPosting?
BlogPosting is a more specific kind of Article and takes exactly the same fields. Use BlogPosting for blog content and Article for news or general editorial. A more specific type is never worse, and search engines treat BlogPosting as an Article wherever they need to.
Does schema markup improve SEO?
Not directly. Structured data is not a ranking factor. What it does is make a page eligible for enhanced result formats — review stars, FAQ dropdowns, event details, breadcrumb trails — which can affect how many people click. It also helps search engines understand a page correctly, which matters more the more unusual your content is.
Will schema markup guarantee rich results?
No. Valid markup makes a page eligible; whether an enhancement is shown is Google's decision, and it varies by query, device and its own assessment of the page. Plenty of correctly marked-up pages never show a rich result, and that is normal rather than a sign the markup is broken.
Does the markup have to match what is on the page?
Yes, and this is the rule most often broken. Google's guidelines require structured data to describe content that is visible to a visitor. Marking up FAQs that are not on the page, or a rating nobody left, is grounds for a manual action. No generator can check this for you — it reads the markup, not your page.
How do I test my structured data?
Google's Rich Results Test checks whether a page is eligible for specific enhancements, and the Schema Markup Validator at validator.schema.org checks the markup against the vocabulary more broadly. Search Console then reports issues across your whole site once the page is indexed. This tool validates the fields it generates; it is not a substitute for testing the live page.
Can I use more than one schema type on a page?
Yes, and it is common — an article page often carries Article, BreadcrumbList and Organization together. Add each as its own script tag, or combine them in one using an @graph array. What to avoid is contradicting yourself: two different Organization blocks with different names on the same page is worse than neither.
What is the difference between JSON-LD, Microdata and RDFa?
Three syntaxes for the same vocabulary. Microdata and RDFa use attributes scattered through your HTML, so the markup and the content are interleaved and both break when either changes. JSON-LD is a single self-contained block. Google supports all three and recommends JSON-LD, which is why this tool generates it.
Where should the script tag go?
The head is conventional and keeps it separate from your content. The body works too — Google reads it either way, including JSON-LD injected by JavaScript, though server-rendered markup is read more reliably and sooner.
What is an @graph?
A way to put several related entities in one JSON-LD block, as an array under an @graph key. It is useful when entities reference each other — an Article whose publisher is an Organization defined in the same block — because you can link by @id rather than repeating the whole object.
Do I need Organization schema on every page?
No. Organization usually belongs once, on the home page or in a site-wide block. Repeating it on every page adds nothing, and repeating it inconsistently — different names, different logos — sends conflicting signals about what the entity actually is.
How do I mark up FAQs?
Use FAQPage with one Question per entry, each carrying an acceptedAnswer. The critical constraint is that every question and answer must be visible on the page in the same words. FAQ markup for hidden content is against Google's guidelines, and eligibility for the FAQ enhancement is limited to certain kinds of site.
How do breadcrumbs work in structured data?
BreadcrumbList holds an ordered list of ListItem entries, each with a position, a name and usually a URL. Positions start at 1 and must be contiguous — this generator numbers them for you. The final crumb is the current page and may omit its URL. The trail should match the breadcrumb a visitor can see.
Why does my price need a currency?
Because a bare number is ambiguous — 3499 could be rupees, yen or dollars, and each is a very different offer. Google rejects an Offer with a price and no priceCurrency. Use the three-letter ISO 4217 code, and write the price as digits only, with no symbol and no thousands separator.
Can I use relative URLs in JSON-LD?
No. A JSON-LD block has no base to resolve a relative path against, so /images/photo.jpg means nothing inside it. Every URL must be absolute and begin with https:// — this generator flags relative URLs as errors for that reason.
Does this tool send my data anywhere?
No. The markup is generated in your browser from what you type. Nothing is transmitted to our server, stored, or sent to any analytics endpoint. You can disconnect from the network after the page loads and the generator keeps working, which is the simplest way to check the claim yourself.
Is the schema markup generator free?
Yes. Every schema type, the validation, the examples, copying and downloading are free, with no account, no sign-up and no cap on how much markup you generate.
Can I download the generated schema?
Yes. Download gives you the script tag as an HTML fragment, or the raw JSON-LD as a .json file, depending on which output you have selected. Both are created from a blob in your browser rather than fetched from a server.
Keep going
Tools that pair with this one
Same privacy model — everything below runs in your browser too.