Free tool · Structured data
To add schema markup, pick the one type that describes your page, fill in only the properties that are true, and paste the JSON-LD into a script tag in your head. Build it below across ten types, with every field explained and anything you leave blank omitted rather than published as an empty value.
Free. Building and validating markup needs no account; the conflict report against your live page needs a free sign-in.
A blog post, news story or guide. The type most often worth adding, and the one most often filled in wrongly.
Paste this inside a script tag with type "application/ld+json" in your page head.
{
"@context": "https://schema.org",
"@type": "Article"
}Missing something essential
These are our own essential and recommended groupings, not Google's rich-result requirements. Those differ per feature and change without notice, so check the finished markup in Google's Rich Results Test before relying on it.
AEO depth layer
The existing markup conflict report is computed from your own page and costs nothing to run. We ask for a free account because the expensive tools on this shelf stay free, and because it lets us tell you when your result changes. No card, no trial clock.
Signing in saves the details you entered above so we can follow up about your results. See our privacy policy for what we keep and why. The Schema Markup Generator result you already have stays free either way. Privacy policy.
Essential means the markup is meaningless without it, so an Article with no headline describes nothing. Recommended means consumers read it when present and nothing breaks when it is absent. Both groupings are ours, not Google's. Rich-result requirements differ per feature and change without notice, so encoding them here and calling a field "required by Google" would be a claim we could not keep true.
| Type | Essential | Recommended | Use it for |
|---|---|---|---|
| Article | headline | author, datePublished, dateModified, image, description | A blog post, news story or guide. The type most often worth adding, and the one most often filled in wrongly. |
| FAQ page | faqs | none | A page of questions and answers. Each answer should stand alone, because that is the unit an answer engine lifts. |
| How-to | name, steps | totalTime | An ordered procedure. Steps are numbered for you, in the order you enter them. |
| Product | name | description, price, priceCurrency, brand, image | A thing you sell. Price and currency travel together in an Offer; one without the other says nothing. |
| Local business | name | streetAddress, addressLocality, addressRegion, postalCode, telephone, url | A business with a physical address. The address is the point of the type, so a partial one is worse than none. |
| Organization | name | url, logo, sameAs | The company itself. Belongs once, on your home or about page, not repeated on every URL. |
| Person | name | jobTitle, url, sameAs | An author or team member. Pair it with sameAs links or it asserts an identity nothing can verify. |
| Event | name, startDate | endDate, locationName, url | Something happening at a time. A start date is the whole point of the type. |
| Breadcrumb list | crumbs | none | The path to this page. Positions are numbered for you, in the order you enter them. |
| Software application | name, applicationCategory | operatingSystem, price, priceCurrency, url | An app or SaaS product. The type most likely to be read when someone asks an assistant for a tool recommendation. |
Where the usual generators are equal, the table says so.
| Capability | This tool | Typical free generator |
|---|---|---|
| Common types with a form per type | Yes | Yes |
| Copy and download the JSON-LD | Yes | Yes |
| A plain-English hint on every field | Yes | Bare labels |
| Blank fields omitted, not emitted as empty strings | Yes | Often emitted |
| Price emitted as a number, and never without a currency | Yes | String, currency optional |
| Relative URLs dropped rather than published | Yes | Published anyway |
| Bare author or brand upgraded to a node | Yes | Left as a string |
| Script-tag close sequences escaped | Yes | No |
| Says whose requirements the groupings represent | Yes, ours | Implies Google's |
| Conflict report against your live markup | Yes, with a free account | No |
Generating correct markup is the easy half. The half that goes wrong is what the page already publishes, because structured data is usually added once by someone who has since left, and nothing on the page tells you it is there.
Once the markup is right, the AI crawlability checker confirms the engines are allowed to read it, the robots.txt generator fixes it if they are not, and the AI visibility checker answers the question all of this only makes possible: do they recommend you.
Step 1
One page, one primary type. Article for a guide, Product for a thing you sell, FAQPage for questions and answers. Adding several types to one page rarely helps and often contradicts itself.
Step 2
Every field explains what it is for and what a consumer does with it. The sameAs field on Organization and Person is the most under-used property on this list and the one that turns a name into a verifiable identity.
Step 3
A blank field is omitted from the output, which is the correct outcome. Inventing a dateModified or a rating to fill a box is worse than leaving it out.
Step 4
The conflict report reads the markup already published on your URL so you do not duplicate or contradict it. Then paste the result into Google's Rich Results Test, which is the only authority on current per-feature requirements.
When you outgrow this tool
The generator is free and complete on its own. Linkeddit is what you use when correct markup stops being the question and you need to know whether the engines actually cite the page, and whether a fix you shipped changed anything.
FAQ
What structured data does, what it does not do, and where our judgement ends and Google's rules begin.
Schema markup is structured data in JSON-LD that states, in a machine-readable way, what a page is about: that this is an article, that this is its author, that this is the price. It is not a ranking factor in itself. What it does is make a page eligible for rich results and easier for an answer engine to read accurately, which is a different and often more valuable thing than a position change.
The one that describes the page's main content, and usually only that one. A blog post is an Article. A product page is a Product. A page of questions and answers is a FAQPage. Where people go wrong is adding four types to one URL in the hope that more markup is better; that leaves a consumer deciding which of your claims is the real subject of the page, and it can contradict itself.
It helps an engine read your page correctly, which is a precondition for citing it accurately, but it is not a lever that makes you cited. The properties that matter most here are the attribution ones: author with a real name, dateModified when the content genuinely changed, and sameAs links that connect your entity to profiles elsewhere. Markup cannot make a weak page authoritative, and schema that describes content not visible on the page is a guideline violation rather than a shortcut.
Inside a script tag with type application/ld+json, in the head or the body; both work. JSON-LD is preferred over microdata precisely because it sits in one block rather than being woven through your markup, so it can be added and changed without touching the page's HTML structure.
No. Fill in what is true and leave the rest blank. This tool omits an empty field from the output rather than publishing an empty string, because a property present with no value asserts that the value is empty, which is a different claim from saying nothing at all. A short, accurate block beats a long one padded with guesses.
The conflict report: it reads the JSON-LD already published on your URL and tells you what would clash with the block you just built. A type you are about to declare twice, a headline in your existing markup that disagrees with the one you just wrote, and any block on the page that fails to parse so nothing is reading it. It costs nothing to run and no model is involved. One caveat worth knowing: we read the HTML your server returns and do not execute JavaScript, so markup injected by a tag manager will not appear.
Three things. It explains every field instead of showing a bare label, so you can tell whether a property is worth filling. It refuses to emit what a consumer would ignore, including empty strings, relative URLs and a price with no currency, rather than including them to look complete. And it says plainly that its essential and recommended groupings are ours rather than Google's, because rich-result requirements differ per feature and change without notice, so it points you at the Rich Results Test instead of pretending to be it.
Every tool on the shelf is free, with no card and no trial. Most need no account at all. See all free tools.
Reads your og:image file and reports its real dimensions, rather than trusting the width you declared in a meta tag.
Build a valid robots.txt from a preset or your own rules, then see the file read back through a real parser before you ship it.
Build the JSON-LD properties that make a page attributable rather than eligible for a rich result, with the reason each one matters.
Score a page on whether an assistant could actually answer with it, across four pillars worth a hundred points.