Schema markup for small business sites: the JSON-LD that is worth adding, with copy-paste examples
By the Growli teamUpdated 6 min read
Short answer
Schema markup is structured data, usually a JSON-LD script in your page's HTML, that describes facts like your business name, address, products and prices in a vocabulary machines understand. Google uses it to make pages eligible for rich results. It must match visible content, and Google says no special schema is needed for its AI features.
Step by step
Step 1: Pick the right type
Organization for every business. LocalBusiness if customers visit you. Product for items you sell online.
Step 2: Copy the JSON-LD example from this guide
Replace the name, website address, logo and social profile links with your own. Only describe things that are visible on the page.
Step 3: Add it to your page
Paste it inside a script tag with type="application/ld+json" in the page's head, or use the schema settings in your SEO plugin or website builder.
Step 4: Test it in Google's Rich Results Test
Enter your page address and fix any errors it reports.
Open Rich Results TestStep 5: Double-check in the Schema Markup Validator
It checks every schema.org type, including ones Google does not show as rich results.
Open the validator
What is schema markup, and what does it actually do?
Schema markup is code that labels the facts on a page. Instead of a search engine guessing that "Mon to Fri 8:00 to 17:00" is your opening hours, you state it in a standard format. The vocabulary comes from schema.org, a shared project founded by Google, Microsoft, Yahoo and Yandex.
Google documents two main effects. Structured data helps Google understand the content of a page, and it makes the page eligible for rich results: product snippets with price and stock, breadcrumb trails, article details, business information and more. Eligible is the important word. Google's structured data guidelines say it does not guarantee that rich results will appear.
What about AI assistants? Google's guide to optimizing for generative AI features is direct: structured data is not required for its generative AI search, and there is no special schema.org markup you need to add. It still recommends structured data as part of normal SEO because of rich results. Other AI companies have not published documentation on how, or whether, schema affects which sources their assistants cite, so be wary of anyone who promises that it does.
The honest case for schema is this: it states facts about your business in an unambiguous, machine readable way, it can earn richer search listings, and it costs little to add correctly.
Which schema types should a small business add?
Most small sites need only a handful of types. Google supports JSON-LD, Microdata and RDFa, and recommends JSON-LD because it sits in one script block and does not tangle with your HTML.
- Type
- Organization
- Put it on
- Home page or About page
- What Google can use it for
- Logo, name and details in knowledge panels
- Type
- LocalBusiness (or a subtype)
- Put it on
- Home page or each location page
- What Google can use it for
- Address, hours and contact details for local results
- Type
- Product with Offer
- Put it on
- Each product page
- What Google can use it for
- Product snippets and merchant listings with price and availability
- Type
- Article or BlogPosting
- Put it on
- Blog posts and news articles
- What Google can use it for
- Headline, image, dates and author
- Type
- BreadcrumbList
- Put it on
- Any page with a breadcrumb trail
- What Google can use it for
- Breadcrumb path in the search result
| Type | Put it on | What Google can use it for |
|---|---|---|
| Organization | Home page or About page | Logo, name and details in knowledge panels |
| LocalBusiness (or a subtype) | Home page or each location page | Address, hours and contact details for local results |
| Product with Offer | Each product page | Product snippets and merchant listings with price and availability |
| Article or BlogPosting | Blog posts and news articles | Headline, image, dates and author |
| BreadcrumbList | Any page with a breadcrumb trail | Breadcrumb path in the search result |
Many platforms already output some of this. WordPress SEO plugins, Shopify themes and Wix all add structured data by default, so check what your pages already contain before adding more. Two plugins each printing their own Organization block is a common source of conflicting data.
Organization and LocalBusiness: tell machines who you are
Organization markup describes the business itself. Google says it has no required properties and recommends adding every one that applies. The most useful are name, url, logo (at least 112 by 112 pixels and crawlable), sameAs (links to your official profiles elsewhere) and contactPoint.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Northside Plumbing Ltd",
"url": "https://www.northsideplumbing.example/",
"logo": "https://www.northsideplumbing.example/images/logo.png",
"sameAs": [
"https://www.facebook.com/northsideplumbing.example",
"https://www.linkedin.com/company/northsideplumbing-example"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+44-113-496-0000",
"email": "hello@northsideplumbing.example",
"contactType": "customer service"
}
}
</script>If customers visit you or you serve a local area, use LocalBusiness, or better, the most specific subtype that fits, such as Plumber, Dentist or Restaurant. Google requires name and address for local business rich results, and recommends telephone, url, opening hours and geo coordinates.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Northside Plumbing",
"url": "https://www.northsideplumbing.example/",
"telephone": "+44-113-496-0000",
"image": "https://www.northsideplumbing.example/images/van.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Example Road",
"addressLocality": "Leeds",
"postalCode": "LS1 1AA",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.7997,
"longitude": -1.5492
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}]
}
</script>Use the same name, address and phone number here as on your Google Business Profile and your contact page. Consistent facts across sources are easier for any system to trust.
Product with Offer: prices and stock for online shops
On a product page, Product markup with a nested Offer describes what you sell, the price, the currency and whether it is in stock. Google uses it for product snippets and, on pages where people can buy, for merchant listings. Google's product structured data documentation lists the full set of properties for each.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Thermostatic Shower Valve TX-200",
"image": "https://shop.example/images/tx200.jpg",
"description": "Brass thermostatic shower valve with anti-scald cut-out.",
"sku": "TX-200",
"brand": { "@type": "Brand", "name": "Example Brand" },
"offers": {
"@type": "Offer",
"url": "https://shop.example/products/tx-200",
"price": "149.00",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
</script>Only add aggregateRating or review if the page really shows those reviews. Shop platforms usually generate this markup from your product data, which keeps prices in sync automatically. Hand-written markup goes stale the first time a price changes.
Article and BreadcrumbList: content pages and site structure
Article (or the more specific BlogPosting or NewsArticle) helps Google show the right headline, image and dates. There are no required properties, but headline, image, datePublished, dateModified and author are the useful ones.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to bleed a radiator in five minutes",
"image": ["https://www.northsideplumbing.example/images/radiator.jpg"],
"datePublished": "2026-10-01T09:00:00+01:00",
"dateModified": "2026-10-20T14:30:00+01:00",
"author": {
"@type": "Person",
"name": "Sam Example",
"url": "https://www.northsideplumbing.example/about/sam"
}
}
</script>BreadcrumbList shows where a page sits in your site. Each item needs a position and a name, and every item except the last needs the URL in item.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Blog", "item": "https://www.northsideplumbing.example/blog" },
{ "@type": "ListItem", "position": 2, "name": "Heating", "item": "https://www.northsideplumbing.example/blog/heating" },
{ "@type": "ListItem", "position": 3, "name": "How to bleed a radiator" }
]
}
</script>What happened to FAQ schema?
FAQPage markup used to produce expandable questions under a search result, which made it hugely popular. In 2023 Google limited FAQ rich results to well-known, authoritative government and health websites. In May 2026 Google deprecated the feature entirely: FAQ rich results no longer appear in Google Search from 7 May 2026, and Google removed the documentation in June 2026.
FAQPage is still a valid schema.org type, and leaving existing markup in place does no harm. Just do not add it expecting a richer Google listing. A visible FAQ section that answers real questions is still worth having for readers, whether or not it is marked up.
How to test schema markup, and the mistakes to avoid
Use two free tools. Google's Rich Results Test shows which Google rich result features a page is eligible for and flags errors in properties Google uses. The Schema Markup Validator checks your markup against the full schema.org vocabulary, including types Google does not use. After publishing, the enhancement reports in Google Search Console track errors across the whole site.
The most important rule from Google is that markup must be a true representation of the page. Do not mark up content readers cannot see. Beyond that, these mistakes come up again and again:
- Mismatched facts: the markup says 149.00 and the page says 129.00, or the hours differ from the contact page.
- Self-serving reviews: Google does not show review stars for LocalBusiness or Organization markup when the business publishes reviews about itself.
- Duplicate blocks: a theme and a plugin each output Organization or Product data with different values.
- Broken JSON: a missing comma or a stray quote makes the whole block unreadable. The validators catch this.
- Wrong type: marking a service page as Product, or every page as Article.
- Markup added only by JavaScript that some crawlers never run. Google can process it, but server HTML is safer. See JavaScript SEO for AI crawlers.
Test a real URL, not a pasted code snippet, so you see what crawlers actually receive after your theme, plugins and cache have done their work.
Structured data is one of the checks in a free Growli audit, alongside canonicals, titles, JavaScript-only content and llms.txt (see our llms.txt guide). Each issue is rated High, Medium or Low with fix steps for WordPress, Shopify, Wix and other platforms.
Frequently asked questions
Does schema markup improve rankings?
Google has not described structured data as a general ranking factor. Its documented benefits are helping Google understand a page and making it eligible for rich results, which can make your listing more useful to searchers.
Will schema markup make ChatGPT or other AI assistants cite my site?
There is no official documentation saying so. Google says no special schema is needed for its AI features, and OpenAI, Anthropic and Perplexity have not published guidance tying schema to citations. Accurate markup is still a clear, machine readable statement of your facts.
Should I use JSON-LD or Microdata?
Google supports both, plus RDFa, and recommends JSON-LD. It lives in a single script block, so it is easier to add, read and maintain without touching your page layout.
Where do I put the JSON-LD script?
It can go in the head or the body of the page. Put Organization markup on your home page or About page, and type-specific markup such as Product or BlogPosting on the page it describes.
How long until rich results show up?
Google has to recrawl and reprocess the page first, which can take days or weeks. Even with valid markup, Google decides whether to show a rich result, so a passing test is no guarantee.