How to generate schema markup
- Pick the type that matches the page. One page usually has one main subject: your business on the home or contact page, a post on an article page, an item on a product page. The box under the types says what Google does with each one today.
- Fill in what the page actually shows. Fields marked Required are the ones Google needs before it can show that rich result; Recommended ones add detail. Leave a field empty rather than invent a value: empty fields are left out of the code.
- Read the checks. Errors are things that stop a rich result, such as a missing address or a price with a dollar sign in it. Warnings are optional properties worth adding. Tips are notes about how Google uses the type.
- Copy the code into that page. Paste the whole script tag into the page's HTML, then test the published page with Google's Rich Results Test. Rich results can take days or weeks to appear after Google recrawls the page, and Google never promises them.
The generator writes JSON-LD, the format Google recommends for structured data because it sits in one script block instead of being woven through your HTML. People search for a schema generator, a schema markup generator or a JSON-LD generator; all three mean this kind of tool. It is not a JSON Schema generator, which is a developer tool for describing API data.
Which schema type each page needs
Most small business sites need three or four types, each on the pages where it belongs. Marking every page as the same LocalBusiness, or putting product markup on a category page, is the most common mistake we see.
| Page | Type | What Google can do with it |
|---|---|---|
| Home page of a company or brand | Organization and WebSite | Logo and details for the knowledge panel; the site name shown above your results |
| Home or contact page of a business with premises or a service area | LocalBusiness, or a more specific type such as Dentist or Plumber | Address, hours and phone for local results, alongside your Google Business Profile |
| Blog post or news story | Article, BlogPosting or NewsArticle | The right headline, image, author and dates in results, Top stories and Discover |
| A single product you sell | Product with an Offer | Price, availability and ratings under the result, and shopping listings |
| A concert, class, webinar or open day | Event | Date, place and tickets in event results |
| Any page deeper than the home page | BreadcrumbList | A breadcrumb trail in place of the plain URL line |
| An author or team member's page | Person | No rich result of its own; links the person to the articles they write |
| A page of questions and answers you wrote | FAQPage | Rich results only for well-known government and health sites |
Where Google offers a more specific type, use it. A dental practice is better described as Dentist than as a plain LocalBusiness, and a blog post as BlogPosting. The specific type inherits every property of the general one, so nothing is lost.
What Google shows today, and what it stopped showing
Many schema generators still offer types that no longer change anything in Google, and some guides still promise FAQ dropdowns. The rules changed several times since 2023:
- FAQ rich results are limited to well-known, authoritative government and health websites since August 2023. Other sites can keep FAQPage markup, and it does no harm, but the questions will not expand under the result.
- HowTo rich results were removed from Google Search in 2023, first on mobile and then on desktop. This generator does not offer HowTo, and the checker says so if it finds it.
- The sitelinks search box, the search field that used to appear under some brand results, was retired by Google in November 2024. A
SearchActionin WebSite markup no longer has any effect in Google, so the generator leaves it out. - Less used features, such as Course info, Claim review, Estimated salary, Learning video, Special announcement and Vehicle listing, were phased out in 2025 as part of a simplification of the results page.
What still works: product snippets with prices and review stars, merchant listings, events, articles, breadcrumbs, local business details, organization logos and site names, along with types this page does not cover, such as recipes, job postings and videos. Google keeps the full list in its search gallery, and that page is the one to trust when this list goes out of date.
Required, recommended, and the rules that matter more
Google splits each type's properties in two. Required properties must be there for the rich result to be possible at all: a LocalBusiness needs a name and an address, an Event needs a name, a start date and a location, a Product needs a name and at least one of an offer, a review or a rating. Recommended properties make the result richer and more likely to be chosen. The checks on this page follow those lists for each type.
Keep four levels apart. Valid JSON means the code parses. Valid Schema.org means the types and properties exist in the vocabulary. A Google-supported type is one listed in Google's search gallery with a rich result of its own; Person, for example, has none, and FAQPage is limited to well-known government and health sites. Eligibility means the page also meets Google's policies, and even then Google chooses whether to show the result. Valid structured data never guarantees a rich result.
Valid markup is still not enough. Google's structured data policies add rules that no validator can check for you:
- Describe what is on the page. Every price, date, question and rating in the markup must be visible to visitors on that same page. Markup about content people cannot see breaks the guidelines.
- No reviews of yourself. Star ratings that a business collects about itself and places on its own site are not eligible for review rich results on LocalBusiness and Organization markup. Ratings belong on products and on things you review, and they must come from real customers.
- Keep it current. A sold-out product marked InStock, or last year's event date, is misleading. Update the markup when the page changes, or generate it from the same data as the page.
Breaking these rules can lead to a manual action in Search Console, which removes rich results from the whole site until it is fixed.
Where to paste the JSON-LD code
The script tag can go anywhere in the page's HTML. The head is the convention; just before the closing body tag works the same. Each block goes only on the page it describes.
- WordPress. Yoast, Rank Math and similar plugins already output Organization, WebSite, Article and breadcrumb markup. Check what they produce first, then add only what is missing, through the plugin's custom schema option or a plugin that inserts code into the header of chosen pages.
- Shopify. Most themes mark up products already. Add other types to the theme template for that kind of page, or to a custom Liquid section, and check the theme's output with the checker here so you do not end up with two Product blocks for one item.
- Squarespace, Wix and Webflow. Each has a code injection or custom code setting per page. Use the page level setting, not the site-wide one, unless the markup really applies to every page.
- Google Tag Manager. Google reads JSON-LD that is added with JavaScript, including through a Custom HTML tag, as long as it is in the rendered page. It is slower to be picked up than markup in the HTML, so use it when you cannot edit the site.
JSON-LD is one of three formats. Microdata and RDFa put the same information in attributes on your HTML elements. Google reads all three, but recommends JSON-LD because it is easier to write and to maintain, and you can mix formats on one page if a plugin uses another.
How to check schema markup
There are three different checks, and they answer different questions:
| Check | What it tells you | When to use it |
|---|---|---|
| The checker on this page | Broken JSON with the line, the types found, and missing required or recommended properties for the 9 types above | While you write or edit code, before it goes live |
| Google Rich Results Test | Which rich results Google can show for a URL or a code snippet, and Google's own errors and warnings | After publishing, and whenever a rich result disappears |
| Schema Markup Validator | Whether the markup is valid schema.org, for every type, whether or not Google uses it | For types Google has no rich result for, such as Person |
Once the pages are live, the Enhancements reports in Google Search Console list errors across the whole site for the rich result types it found, which is how you catch a theme update that broke the markup on every product page. Search for a schema validator and you will find many tools; only Google's test reflects what Google itself will show.
Methodology and limits
- Generating
- Each type writes JSON-LD with
"@context": "https://schema.org"and the type you choose. Empty fields are left out, and objects left empty (an address with no lines, for example) are removed. Dates and times are written in ISO 8601 with the UTC offset you pick, which defaults to your device's time zone. Characters that could close the script tag early are escaped. - Required and recommended
- The Required and Recommended labels and the checks follow Google Search Central's documentation for each feature: Organization, Local business, Article, Product snippets and Merchant listings, Event, FAQ, Breadcrumb and Site names. Person has no Google rich result of its own, so its checks only cover what makes it useful elsewhere: a name, a URL and profiles.
- Value checks
- URLs must be absolute and start with http or https. Dates must be ISO 8601. Prices must be plain numbers with a dot for decimals, currencies three-letter ISO 4217 codes, GTINs 8, 12, 13 or 14 digits with a valid check digit, and ratings inside the best and worst rating (5 and 1 by default). Phone numbers without a country code and example.com addresses left from the sample are flagged.
- Checking pasted code
- Script tags of type application/ld+json are taken from what you paste; if there are none, the whole text is read as JSON. Syntax errors are reported with the line and column from your browser's JSON parser, with hints for the usual causes: trailing commas, curly quotes, single quotes and comments. Top-level items, arrays and
@graphlists are checked one by one; nested items are checked as part of their parent. - Limits
- This is not Google's validator and cannot see your live page, so it cannot tell whether the markup matches the visible content, whether Google will choose to show a rich result, or whether a type outside these 9 is valid. Microdata and RDFa are not read.
Sources
Show all 8 sources
- Introduction to structured data markup in Google Search, Google Search Central, on formats and why JSON-LD is recommended
- General structured data guidelines, Google Search Central, on visible content, relevance and manual actions
- Structured data markup that Google Search supports, Google Search Central, the current list of rich result types
- Google Search Central feature guides used for the checks: Organization, Local business, Article, Product snippet, Merchant listing, Event, FAQ, Breadcrumb, Site names and Review snippet (self-serving reviews)
- Changes to HowTo and FAQ rich results, Google Search Central Blog, August 2023
- Generate structured data with JavaScript, Google Search Central, on JSON-LD added by scripts and Tag Manager
- Full schema.org hierarchy and the type pages, such as LocalBusiness, Event and Offer, Schema.org
- JSON-LD 1.1, W3C Recommendation, the format itself


