Schema markup is structured data, written in the Schema.org vocabulary, that labels the facts on a page (who you are, what you sell, the price, the address) in a format machines can read without guessing. For SEO and AI search, it helps systems understand your pages, and it can make pages eligible for rich results. It does not guarantee rich results, rankings or citations in AI answers.

This guide gives you copy-ready JSON-LD for five common types, explains the 2023 FAQ and HowTo change, and shows how to test markup and avoid the mistakes that get it ignored.

What structured data does

A search engine can read "₹1,499" on a page, but it has to infer whether that is a price, a discount or a shipping fee. Structured data states it directly: this is an Offer, the price is 1499, the priceCurrency is INR.

That clarity has three practical uses:

  1. Rich results: Google uses some types (Product, LocalBusiness, Breadcrumb and others) to show extra details such as price or breadcrumbs in search results, when it chooses to.
  2. Entity understanding: Organization markup connects your name, logo, website and social profiles, which helps search engines treat them as one entity.
  3. Machine-readable facts for other systems: any crawler that parses JSON-LD, including AI search tools, gets clean facts instead of scraped text.

Be honest about the third point. No AI search provider has published a rule that markup earns citations. Treat schema as one part of a clear, accurate page, not a shortcut.

JSON-LD: the format to use

Google supports JSON-LD, Microdata and RDFa. JSON-LD is the simplest: one <script> block in the page <head> or <body>, separate from your visible HTML. Every example below goes inside a block like this:

<script type="application/ld+json">
{ ...your JSON-LD here... }
</script>

You can write it by hand or start with the Schema Markup Generator, which builds a JSON-LD snippet for Article, Product, LocalBusiness and FAQPage types. Its Product output sets the currency to USD, so change priceCurrency to INR or GBP if you sell in rupees or pounds.

JSON-LD examples for five common types

Organization

Put this on your home page or about page.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Sharma Interiors",
  "url": "https://www.sharmainteriors.in/",
  "logo": "https://www.sharmainteriors.in/logo.png",
  "sameAs": [
    "https://www.instagram.com/sharmainteriors",
    "https://www.linkedin.com/company/sharmainteriors"
  ]
}

Product with Offer

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Handloom Cotton Saree, Indigo",
  "image": "https://shop.example.in/img/indigo-saree.jpg",
  "description": "Hand-woven cotton saree with block-printed border.",
  "sku": "SAR-IND-01",
  "brand": { "@type": "Brand", "name": "Example Looms" },
  "offers": {
    "@type": "Offer",
    "url": "https://shop.example.in/indigo-saree",
    "price": "1499.00",
    "priceCurrency": "INR",
    "availability": "https://schema.org/InStock"
  }
}

For a US or UK store, change priceCurrency to USD or GBP. The price must match what the visible page shows. Google's Product documentation lists the required and recommended properties for each Product feature; check it before you rely on a rich result.

LocalBusiness

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Green Leaf Dental Clinic",
  "url": "https://www.greenleafdental.co.uk/",
  "telephone": "+44 20 7946 0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 High Street",
    "addressLocality": "London",
    "postalCode": "N1 9AA",
    "addressCountry": "GB"
  },
  "openingHours": "Mo-Fr 09:00-18:00"
}

Use the most specific subtype that fits (for example Dentist, Restaurant or Store). The name, address and phone should match your Google Business Profile and the page text.

BlogPosting

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How to Choose a Sofa for a Small Flat",
  "image": "https://www.example.com/img/sofa-guide.jpg",
  "datePublished": "2026-10-20T09:00:00+05:30",
  "dateModified": "2026-10-24T11:30:00+05:30",
  "author": { "@type": "Person", "name": "Priya Mehta", "url": "https://www.example.com/authors/priya" },
  "publisher": { "@type": "Organization", "name": "Example Home" }
}

Use real author names and real dates. Update dateModified only when you change the content meaningfully.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com/" },
    { "@type": "ListItem", "position": 2, "name": "Sofas", "item": "https://www.example.com/sofas/" },
    { "@type": "ListItem", "position": 3, "name": "Two-Seater Sofas" }
  ]
}

The last item can omit item because it is the current page. Your visible breadcrumb trail should show the same path.

The FAQ and HowTo change (August 2023)

In August 2023 Google limited FAQ rich results to well-known, authoritative government and health websites, and removed HowTo rich results. FAQPage markup is still valid Schema.org, and it does no harm when the questions are visible on the page, but for most business sites it will not produce the expandable questions in search results.

What this means in practice:

  • Do not add FAQ markup expecting extra space in results.
  • Keep a visible FAQ section if it answers real customer questions. It helps readers either way.
  • If you generate questions with the AI FAQ Generator, edit the answers for accuracy before publishing, and only mark up questions that appear on the page.

How to validate your markup

  1. Run the URL or code through Google's Rich Results Test. It shows which Google rich result types the page is eligible for, plus errors and warnings.
  2. Run it through the Schema.org validator (validator.schema.org). It checks general syntax and vocabulary, including types Google does not use for rich results.
  3. After publishing, check the enhancement reports in Google Search Console (such as Product snippets or Breadcrumbs) for errors across your site.
  4. Confirm the page itself is consistent. The Meta Tags Analyzer shows your title and description so you can compare them with your name and headline, and the Canonical and Index Checker confirms the page is indexable and that its canonical matches the url in your markup.

Markup on a page that is blocked or set to noindex does nothing in search. If you have restricted crawlers, review your rules with our robots.txt examples.

Common mistakes

Mistake Why it matters Fix
Marking up content not visible on the page Against Google's structured data guidelines; can lead to a manual action Only mark up what users can see
Fake or self-written reviews and ratings Treated as spammy structured data Use genuine reviews collected on your site, or leave ratings out
Price or stock that differs from the page Misleading; markup may be ignored Generate markup from the same data as the page
Wrong type (Product markup on a category page) Confuses what the page is Use the type that matches the main content
Copying one block across every page Every page claims the same product or article Generate markup per page
Syntax errors (trailing commas, smart quotes) The whole block fails to parse Validate after every edit

Next steps

  1. Add Organization markup to your home page.
  2. Add Product, LocalBusiness or BlogPosting markup to the matching page templates, with values taken from the visible page.
  3. Add BreadcrumbList where you show breadcrumbs.
  4. Validate with the Rich Results Test and the Schema.org validator.
  5. Check the Search Console enhancement reports monthly and fix new errors.