induwara.lk
induwara.lkDeveloper · SEO

Schema Markup Generator (JSON-LD Structured Data)

Fill a short form and get a Google-valid JSON-LD block for the eight rich-result types people actually use — LocalBusiness, Organization, Article, Product, FAQPage, BreadcrumbList, Event and Person. Copy, paste into your <head>, done. Free, no signup, and it never leaves your browser.

By Induwara AshinsanaUpdated Jul 9, 2026
JSON-LD structured data
Valid JSON verified
Schema type

Shops, restaurants, clinics — show hours, address and phone in Google.

Address
Opening hours

No hours added. Add a row and pick the days it applies to.

Google property checklist

Required fields missing
namerequired
address (street + city)recommended
telephonerecommended
openingHoursSpecificationrecommended
imagerecommended

Generated JSON-LD· 0 properties

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness"
}
</script>
Paste this inside the <head> of your page.Test in Google Rich ResultsSchema Markup Validator
Everything runs in your browser — nothing is uploaded.

How it works

Structured data is a small, machine-readable summary of what a page is about. Search engines read it to understand your content and to decide whether the page qualifies for a rich result — the star ratings, FAQ drop-downs, business panels and breadcrumb trails you see in Google. This generator produces that summary in JSON-LD, the format Google names as its recommended syntax in the Introduction to structured data guide.

It is a serializer, not a numeric calculator. For the type you select it maps each form field to the correct schema.org property and builds a JSON object, then pretty-prints it with JSON.stringify. Because the JSON is assembled from real objects rather than glued together as text, every quote, backslash and newline in your input is escaped correctly — it is not possible to produce a broken block by typing an awkward character. The four rules it follows:

  1. Envelope. Every block opens with "@context": "https://schema.org" and the chosen @type, exactly as schema.org requires.
  2. Correct nesting. Compound values become their own typed objects — an address is a PostalAddress, opening hours are OpeningHoursSpecification entries, and an author is a nested Person. Day names and availability become full schema.org URLs.
  3. Omission. Any field you leave blank is dropped entirely — the output never contains an empty string, a null, or a half-filled object. This keeps the block minimal and avoids validator warnings.
  4. Auto-numbering. BreadcrumbList positions are assigned 1, 2, 3… from the order of your rows, so you never hand-number them.

The live checklist below the form compares the block it just built against Google's documented required and recommended properties for that type — green when satisfied, amber for a missing recommended field, red for a missing required one. As a final cross-check the tool round-trips the output through JSON.parse and confirms the @context, showing a “Valid JSON verified” badge only when the block parses cleanly. Structural validity is guaranteed here; whether Google then awards a rich result depends on your content and its own policies.

Worked examples

LocalBusiness — a Colombo bakery

name + address + one grouped opening-hours block

"@type": "LocalBusiness",
"name": "Sena Bakery",
"telephone": "+94112345678",
"address": { "@type": "PostalAddress",
  "streetAddress": "42 Galle Road",
  "addressLocality": "Colombo", "addressCountry": "LK" },
"openingHoursSpecification": [{ "@type": "OpeningHoursSpecification",
  "dayOfWeek": [".../Monday", ".../Tuesday", ".../Friday"],
  "opens": "06:30", "closes": "19:00" }]

Checklist: name ✓ required; address, telephone and hours ✓ recommended. Validates as a LocalBusiness.

FAQPage — the omission rule in action

two filled Q&As, a third row left blank

"@type": "FAQPage",
"mainEntity": [
  { "@type": "Question", "name": "Is the tool free?",
    "acceptedAnswer": { "@type": "Answer",
      "text": "Yes, completely free with no signup." } },
  { "@type": "Question", "name": "Where do I paste it?",
    "acceptedAnswer": { "@type": "Answer",
      "text": "In the <head> of your page." } }
]

The empty third row is dropped, so mainEntity has 2 questions, not 3 — the required check passes because at least one has an answer.

BreadcrumbList — auto-numbered positions

three crumbs, positions assigned automatically

"@type": "BreadcrumbList",
"itemListElement": [
  { "@type": "ListItem", "position": 1, "name": "Home",
    "item": "https://induwara.lk" },
  { "@type": "ListItem", "position": 2, "name": "Tools",
    "item": "https://induwara.lk/tools" },
  { "@type": "ListItem", "position": 3, "name": "Schema Generator",
    "item": "https://induwara.lk/tools/schema-markup-generator" }
]

Positions run 1 → 3 from row order. Delete the middle crumb and the remaining two renumber to 1 and 2.

Supported types

Version 1 covers the eight types that map to documented Google rich results. Niche types (Recipe, JobPosting, Course, Video) are planned for a later version.

  • LocalBusinessShops, restaurants, clinics — show hours, address and phone in Google.
  • OrganizationA company or brand — logo, site and social profiles for the Knowledge panel.
  • ArticleBlog posts and news — headline, author and dates for article rich results.
  • ProductA product with price, availability and rating for merchant listings.
  • FAQPageQuestion-and-answer pairs eligible for the FAQ rich result.
  • BreadcrumbListThe trail of links Google shows above your page title in results.
  • EventConcerts, workshops, webinars — name, dates and location for event results.
  • PersonAn author or public figure — job title, site and social profiles.

Frequently asked questions

Sources & references

Related tools

Rate this tool
Be the first to rate

Comments & feedback

Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.

Found a bug, edge case, or want another schema type supported?

Email me at [email protected] — most fixes ship within 24 hours.