Flat 30% off for Singapore 🇸🇬

Schema markup (JSON-LD) generator

Build valid JSON-LD for ten schema types with a form, not a blank page. Live validation flags missing required and recommended properties from Google's documentation, and the output is ready to paste or test.

  • Free, no signup
  • Runs in your browser
  • Nothing is uploaded

Schema type

Type

A business with a physical location: address, hours, coordinates and price range. Feeds local results and maps.

Basics

Business type

A photo of the place or your logo

With country code

Address

Required by Google. Include as many parts as you can.

Two-letter ISO code

Coordinates

At least five decimal places.

Profiles (sameAs)

  • https://www.linkedin.com/company/northwind-studio
  • https://www.instagram.com/northwindstudio

Press Enter or comma to add.

Opening hours

One row per set of days with the same hours. Use 00:00–23:59 for 24 hours.

Validation

Checked against Google’s required and recommended properties.

Valid and complete
3/3 required0 recommended to add
  • namepasses
  • address.streetAddresspasses
  • address.addressLocalitypasses
  • address.postalCodepasses
  • address.addressCountrypasses
  • telephonepasses
  • urlpasses
  • geopasses
  • openingHoursSpecificationpasses
  • priceRangepasses
  • imagepasses
  • geo has 5+ decimal placespasses
  • priceRange under 100 characterspasses
  • telephone has a country codepasses
  • Opening hours are valid timespasses
  • url and image are absolutepasses

JSON-LD

Paste anywhere in the page’s HTML — the <head> is conventional.

LocalBusiness · script tag
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Northwind Studio",
  "image": "https://northwind.example/images/studio.jpg",
  "url": "https://northwind.example/leeds",
  "telephone": "+44 113 496 0000",
  "priceRange": "£££",
  "description": "Design and development studio in Leeds. Websites, web apps and brand identities for startups.",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "4 Mill Yard, Wharf Street",
    "addressLocality": "Leeds",
    "addressRegion": "West Yorkshire",
    "postalCode": "LS2 7EQ",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 53.79648,
    "longitude": -1.54785
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday"
      ],
      "opens": "09:00",
      "closes": "17:30"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": [
        "Saturday"
      ],
      "opens": "10:00",
      "closes": "13:00"
    }
  ],
  "sameAs": [
    "https://www.linkedin.com/company/northwind-studio",
    "https://www.instagram.com/northwindstudio"
  ]
}
</script>

How it works

How to use the schema markup generator

  1. 01

    Choose a schema type

    Pick from ten types, including Organization, LocalBusiness, Product, Article, Event and BreadcrumbList. Each starts with a worked example.

  2. 02

    Fill in your details

    Replace the example values with yours. Switch optional blocks such as offers, ratings or a contact point on or off, and add FAQ items, breadcrumbs or opening hours.

  3. 03

    Fix what the checks flag

    Validation updates as you type, listing missing required and recommended properties from Google's documentation plus format problems like relative URLs.

  4. 04

    Copy and test

    Copy the JSON-LD as a script tag, raw JSON or a Next.js snippet, paste it into your page, then confirm it in Google's Rich Results Test.

What schema markup does

Schema markup is structured data that tells search engines what a page is about in a vocabulary they agree on, schema.org. Instead of inferring from layout that "£18.00" is a price and "4.7" is a rating, a crawler reads it as fact. The recommended way to add it is JSON-LD: a self-contained block of JSON in a script tag, separate from your visible HTML.

That understanding pays off in three places. It makes pages eligible for rich results, such as prices, stock and stars under a product or dates and venues for events. It feeds Google's picture of your business, including your site name, logo and knowledge panel. And it gives AI assistants clean facts to quote instead of guesses.

What each type earns in Google today

Google has trimmed its rich results a lot since 2023, so it is worth knowing what still shows:

TypeWhat Google does with it
ProductProduct snippets with price, availability and review stars
LocalBusinessSupports business details in local results and maps; name and address are required
EventEvent listings, for events at a physical location only
SoftwareApplicationApp rich results with rating and price
Article / BlogPostingBetter title, image and date selection; no special result type of its own
BreadcrumbListBreadcrumb trail in place of the URL, on desktop only since January 2025
Organization, WebSiteLogo, site name and knowledge panel signals; the sitelinks search box was retired in November 2024
FAQPageNo longer shown: restricted in August 2023, removed for all sites from May 2026
PersonNo rich result itself; ties authors and founders to their work and profiles

HowTo rich results were deprecated in 2023 too. Unsupported markup is not penalised: Google says unused structured data causes no problems, and other engines and AI tools still read it. Keep valid markup, just do not build your SEO plan around a feature that no longer appears.

Required vs recommended properties

Google's documentation splits properties into two groups. Required properties must be present for a page to be eligible at all. For a product snippet that is name plus at least one of offers, review or aggregateRating; for a local business it is name and address; for an event, name, startDate and a location with an address. Recommended properties are optional, but each one you add gives Google more to show. The validation panel follows both lists, and flags formatting problems such as currency symbols in prices, relative URLs and coordinates with too few decimal places.

Rules that get markup ignored

  • Marking up what is not on the page. Every question, price and review in the JSON-LD must be visible to visitors on that same page.
  • Self-serving reviews.Google does not show review stars for a business's reviews of itself in Organization or LocalBusiness markup. Stars are for products, apps and third-party reviews.
  • Stale data. Past events, expired prices and out-of-stock items marked in stock erode trust in your markup. Generate it from the same data as the page wherever you can.
  • Inconsistent details. The name, address and phone number should match your Google Business Profile and the rest of your site character for character.

Adding it to your site

Paste the script tag into the page's HTML; in WordPress use a header-code plugin or your SEO plugin's custom schema field, and in Framer or Webflow add it to the page's custom head code. In Next.js, render it from the page component, which the Next.js tab does for you, escaping < so the JSON cannot break out of the script tag. Then run the Rich Results Test and the Schema Markup Validator.

Structured data is one half of being readable by machines; an llms.txt file is the other cheap win for AI assistants, and the SERP snippet preview covers the text people see. If you want all of it built in, schema for search and AI comes with every website I ship. More on the fundamentals in my SEO glossary entry.

Common questions

Schema markup generator: FAQ

JSON-LD is a way of writing schema.org structured data as a block of JSON inside a <script type="application/ld+json"> tag. It sits apart from your HTML, so it is easy to add, generate and maintain, and it is the format Google recommends over Microdata and RDFa.

Need it done for you?

Structured data for search and AI assistants is built into every site I ship.

More free tools

All tools →