Schema markup explained: structured data for small business websites

Ajay K. Published 10 Aug 2026 Updated 24 Oct 2026 19 min read SEO Reviewed by Liam P., SEO Lead · Oct 2026 Share
Schema markup explained. Line drawing of a seedling tray with a blank plant marker in every cell, one of them teal.

Schema markup adds a machine readable description of your business, pages and content. Start with accurate identity details and the right type for each page. Then check Schema.org validity and Google's current feature rules. Correct markup supports understanding and eligibility, with no promise of rankings, special search listings or AI citations.

Understand the four concepts

Schema markup sounds technical, but the idea is simple:

Four terms get mixed up a lot:

Concept

Plain explanation

Schema.org

A shared vocabulary of types and properties

Structured data

An organised description using that vocabulary

JSON-LD

One way to write it, in a script block

Google search features

Specific displays governed by Google's own rules

Google recommends JSON-LD and also supports Microdata and RDFa, two older ways to write the same thing. Google says it uses structured data it finds to understand page content. Search engines can read ordinary text too. Markup adds an explicit description. It can't turn an unsupported business claim into evidence.

So keep three layers apart. The visible content is what people read. The markup describes it. Google decides what, if anything, to display.

You'll see the word entity a lot. An entity is any real thing you describe, such as the business, a person or a service.

Know what markup can support

Markup has three realistic jobs. None of them guarantees an outcome.

Split.
What can this implementation support?
IdentityDescribe the real business and connected content
Feature eligibilityMeet applicable supported feature requirements
MaintenanceKeep structured facts consistent as things change

Rich results are enhanced search listings, such as product details or review stars. Clearer entities and eligibility for supported features are the realistic gains. Rankings, Maps placement and review stars aren't guaranteed. Knowledge panels, the information boxes Google sometimes shows for a business, aren't either. Nor are AI citations.

Anyone promising a set ranking uplift or payback period from schema is guessing. Google's guidelines say structured data must truly represent visible page content. Even then, a feature isn't guaranteed.

Choose types by page and feature

Schema.org's vocabulary is much bigger than Google's list of search features. So choose types by what each page is actually about. Then check whether Google offers a feature for it.

Page or purpose

Types to consider

Important boundary

Business identity

Organization or LocalBusiness

Use the real entity

Service description

Service with provider and scope

No Service rich result listed

Article or guide

Article with the real author

Reflect the actual content

Product page

Product and offers

Follow Google's product rules

Site navigation

BreadcrumbList and WebSite

Not the retired search box

Event or video

Event or VideoObject

Match the page's purpose

Google's search gallery listed 25 features when we checked in October 2026. FAQ, HowTo, the sitelinks search box and Service weren't among them. Some markup supports identity rather than a visible card. That's fine.

Don't treat the table as a checklist for every page. A page should describe its main subject and the entities related to it. More types, properties or scripts don't add value on their own.

Two features you may still see recommended have gone:

Timeline.
Retired Google features
Oct 2024Search box removal announced
Nov 2024Search box no longer available
May 2026FAQ rich results stop appearing
Jun 2026FAQ documentation removed

Google's documentation updates say FAQ rich results stopped appearing from 7 May 2026. Google removed the documentation on 15 June 2026. The sitelinks search box went earlier. Google said farewell to it in October 2024. By 29 November 2024, the updates page listed it as no longer available.

Useful FAQs on the page itself are still worth keeping. A common mistake is still adding SearchAction markup, the code behind that box. It's wasted effort now.

Describe the business and its locations

Organization describes the business as a whole. LocalBusiness is a more specific model for a business with a physical presence. In Schema.org's LocalBusiness type, LocalBusiness sits under both Organization and Place. So a single business can use one stable identity with a suitable subtype. Create separate entities only when they really are separate.

Google's Organization guidance has no required properties. It suggests placing the markup on your home page or a page about the business. For Google's local business feature, the LocalBusiness rules require a name and a physical address. Use the most specific accurate subtype and your real published details.

Markup can't verify or edit a Business Profile. For the profile itself, see our Google Business Profile guide.

Decide what can be public

Everything in your JSON-LD sits in the page source. Nobody needs to see it on screen for it to be public.

Decision tree.
Before publishing an address
CHECK 1Is this an accurate address intended to be public?
YES
Check feature rulesUse only applicable truthful details
NO
Protect private dataDon't invent a public storefront

Never publish a private home address just to meet a feature requirement. Don't fake one with a service area. An Organization and Service description can still be useful without chasing the local business feature.

For several genuine locations, give each its own identity and matching page. Connect them to the parent business where that's real. Each location's hours, contact route and address need separate upkeep. A shared brand name doesn't make them duplicates.

Give each entity a stable identifier

An identifier, written as @id, names one thing so other parts of the markup can point to it. Each described thing is a node. The connected set of nodes is the graph.

An identifier is separate from the page URL. A fragment such as #business identifies a thing in the graph. The #business fragment isn't a verification code. Nor is it a reason to create a new page. It isn't a canonical tag either, the tag naming a page's preferred URL.

Record one entity identity

Real entity: [business, location, person or service]

Stable identifier: [absolute identifier]

Public page: [appropriate current URL]

Related entities: [verified relationships]

Data and output owner: [responsible systems]

Change trigger: [when references need review]

When domains, templates or business identities change, review identifiers and references together. Keep established identifiers where sensible. Change them deliberately when needed. An @id won't prevent migration losses or force Google to merge entities.

Describe services truthfully

Service describes what you do, so put the real scope in the visible page first. Explain the audience, limits and how to get a quote or book.

Split.
Which model fits the content?
BusinessOrganization or a suitable LocalBusiness subtype
ServiceService with a real provider and area
ProductProduct, then Google's product rules

Schema.org's Service type has properties such as provider, serviceType and areaServed. Offers can add useful detail. It's descriptive vocabulary, not a ranking technique. A business, a service and the page explaining it can each have an identifier, linked to each other. A service page shouldn't pretend each service has its own address or company.

Product isn't automatically wrong on a service page. Schema.org defines Product as any offered product or service. Google's product features are a separate question, with their own rules. So pick the model that truthfully fits, then check the feature rules. Calling a service a product won't make business reviews eligible for stars.

Priorities differ by business type:

Business

What to get right

Tradies

Truthful service areas

Professional practices

Accurate people and roles

Restaurants and cafes

Maintained venue facts

Retailers

Reliable products and offers

For industry detail, see SEO for trade businesses and local SEO for restaurants. Practices can see our professional services and healthcare SEO pages. Online stores should start with ecommerce SEO.

For health businesses, MedicalSpecialty is an enumeration, a fixed list of values. It describes a clinic's or practitioner's specialty. It isn't the clinic's identity or a Google feature. Schema can't certify credentials, so real registration details belong in supported relationships.

Keep review and authorship claims precise

Review stars and author markup attract the most wishful thinking. Both have clear rules.

Apply review rules correctly

Reviews a business controls about itself aren't eligible for review stars on LocalBusiness or Organization markup. That includes embedded third party widgets. Showing truthful testimonials on your site is still fine. It just won't earn stars.

Check what is being reviewed
Before

Put business testimonials into Product markup to chase stars

After

Identify the actual reviewed entity and apply its current feature rules

Genuine product reviews on a product page can still qualify under Google's product rules. Not every review a shop displays qualifies automatically, though. And never copy made up ratings or reviewer names into live code. Before asking clients for reviews, read up on getting Google reviews legally.

Connect authors and qualify AI claims

Article markup should name the real author and publisher, with truthful dates. Google's Article guidance describes the author URL as a page that uniquely identifies the author. It needn't be a new page on your site.

Don't add a profile page just to tick a checklist, or invent credentials. Name any expert reviewer separately from the writer and publisher. Only do that if the role is real.

A modified date should reflect a real update. Strong authorship rests on real evidence. See experience and trust through E-E-A-T.

For Google's AI features, normal Search principles apply and no special AI schema is needed. That doesn't mean every other AI system reads markup the same way. For the wider topic, see generative engine optimisation explained.

Read a connected JSON-LD example

Here's a complete example for a fictional mobile service business and one service page. The example.com domain, name and service are teaching placeholders, so don't paste it unchanged into a live site.

Service page example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#business",
"name": "Example Mobile Services",
"url": "https://example.com/"
},
{
"@type": "Service",
"@id": "https://example.com/tap-repairs/#service",
"name": "Tap repairs",
"serviceType": "Tap repair service",
"provider": {"@id": "https://example.com/#business"},
"areaServed": {"@type": "City", "name": "Melbourne"},
"url": "https://example.com/tap-repairs/"
},
{
"@type": "WebPage",
"@id": "https://example.com/tap-repairs/#webpage",
"url": "https://example.com/tap-repairs/",
"name": "Tap repairs in Melbourne",
"mainEntity": {
"@id": "https://example.com/tap-repairs/#service"
}
}
]
}
</script>

It uses Organization, Service and WebPage. It deliberately leaves out a street address, reviews, prices and credentials. It's a minimal relationship example, not a complete specification or a Google approved implementation.

Element

What it means here

@context

Uses the Schema.org vocabulary

@graph

Holds the three described nodes

@type

States what kind of thing a node is

@id

Names a node so others can reference it

url

The public page for that entity

provider

Links the service to the business

mainEntity

Links the page to the service it describes

Trace the two references. The WebPage's mainEntity matches the Service's @id. The Service's provider matches the Organization's @id. In JSON-LD, reusing an identifier points to the same node. Matching display names alone don't create that link.

We checked on our own machine that this JSON parses and both references resolve. That isn't a live Google test.

Swap in your own facts, URLs and identifiers only after inspecting your existing output. If a plugin already defines your business, reuse its identifier instead of adding a second identity. JSON needs straight double quotes, with no trailing commas or comments. Values from your content management system (CMS) need safe encoding, especially quotes, line breaks and empty fields.

The script can sit in the body or the head, the hidden top section of the page code. Google can also read JSON-LD injected after the page loads. Check what actually publishes.

Find conflicting schema output

Many sites have more than one source of structured data. List every possible producer:

  • the theme, page builder and custom code

  • SEO, local business and review plugins or apps

  • the ecommerce platform and tag manager

Record which page types and entities each one actually produces. A plugin's settings screen may not describe everything on the rendered page.

Decision tree.
Before disabling schema output
CHECK 1Do the outputs contradict or duplicate an identity?
YES
Trace the producersResolve ownership and preserve good data
NO
Review relationshipsMultiple scripts can be compatible

Several scripts can add compatible data. A page can also describe several legitimate entities. Counting script tags tells you little.

The real problems are repeated identities with conflicting names or addresses. Wrong main subjects and stale references count too. A common mistake is switching off a plugin to fix duplicates and losing valid product data with it.

Before switching off a producer, check which useful properties it supplies. A review widget may produce visible content and unwanted markup together. Don't delete customer facing information just to change schema. Record a rollback before you change anything.

Keep one controlled source for each fact. The same business can be referenced from many page types. One service or product shouldn't be repeated blindly on unrelated pages, though. After plugin, theme or cache changes, check the final page again for leftover or reintroduced output. When you change supplier or plugin, keep established identifiers where sensible.

Add markup through the existing platform

The goal is a maintainable setup using your real content and current systems. Check what you already have before buying anything new.

Platform

Where to start

WordPress

Check theme and plugin output, then extend one owner

Shopify

Use the structured_data filter on products and articles

Webflow

Use the page settings field and bind CMS fields

On WordPress, configure the plugin that owns your schema. Or have a developer extend its graph through supported integration points. On Shopify, the structured_data filter converts product and article objects into Schema.org data. Use the right template and inspect the result before adding another block. Leave variant and merchant detail to your ecommerce setup.

Webflow's schema field sits in page settings, including on Collection pages. It needs a paid Site plan or Workspace. Its output appears in the head when you publish. Bind CMS fields so each item gets its own data, and test several items. Existing custom code schema keeps working, so don't add a second copy in the new field.

Assign an output owner

Page type and subject: [scope]

Current producers: [theme, plugins, apps and custom code]

Chosen owner by entity: [responsible source]

Safe integration: [supported implementation route]

Pilot pages and rollback: [controlled release plan]

Public verification: [test record and date]

Our schema markup generator can help you prepare code. It isn't a source of business truth. It won't publish or validate anything for you either.

AI generated schema needs the same checks as anything handwritten. Look for unsupported types, made up fields and ratings that don't belong. A platform's claims about AI visibility aren't evidence of a citation.

Never drop one service page's script into a sitewide template without checking its scope. Keep staging URLs, private information and dummy values out of production. Match the published domain and canonical setup.

Test syntax, meaning and the live page

Testing has four layers. No tool replaces a human check of the facts.

Flow.
From approved facts to a checked release
01DefineMatch the page subject and existing identities
ISSUEReview truth, privacy and feature requirements
02GenerateProduce valid JSON with the owning system
03TestCheck code and a representative pilot
04PublishRelease and inspect public rendered output
05MonitorReview available reports and change triggers

Check

Useful evidence

Limit

Schema Markup Validator

Extracts and checks Schema.org markup

Not Google eligibility or truth

Rich Results Test

Finds supported Google features

Covers listed features only

URL Inspection

Indexed data and a live test

Live tests don't prove indexing

Search Console reports

Feature reports where available

Not every type has one

The Schema Markup Validator extracts JSON-LD, RDFa and Microdata, and flags syntax mistakes. The Rich Results Test shows which supported Google features it found. It tests a listed set of feature types. And Google doesn't guarantee a page will appear as its preview shows.

Check what reached the website
Before

Validate a pasted example and assume the site is fixed

After

Inspect published markup and distinguish live from indexed data

Different results mean different things:

Split.
What kind of issue is this?
Unsupported featureDescriptive vocabulary has no matching Google feature
Technical errorRequired syntax or feature properties need correction
Policy problemValid code describes inaccurate or ineligible content
Non critical issueReview a recommended property without inventing facts

No eligible items for a Service example can be the expected result. So first decide which feature you expected, then judge the result. A missing required property can block the related feature. A missing recommended one may not matter, so don't invent data to clear a warning. Valid code can still describe something inaccurate or ineligible.

Test representative templates and edge cases, such as:

  • a normal page

  • a page with optional fields empty

  • a different location

  • a page with quoted text

Check the live page after clearing caches. A saved editor field doesn't prove the script reached the page.

In URL Inspection, compare the indexed snapshot with the live test. A live test proves access. It can't prove indexing or predict Google's chosen canonical. Request recrawling where it helps, without expecting instant indexing or display.

Not sure your schema is doing anything?

Our free audit checks your structured data against what Google supports, then tells you what to fix first.

Measure what actually changed

Note the starting figures before release. Then log each change for an honest review later.

Record a structured data change

URLs and templates: [defined scope]

Release and observation dates: [dates]

Expected feature: [current supported use or descriptive only]

Validation evidence: [tools and published output]

Performance source: [available report and metric]

Other changes and limits: [context for interpretation]

Where Search Console has a report for the feature, monitor its validity and search appearance data. Keep implementation success separate from changes in clicks or enquiries. Rich results come and go with rankings, seasonality and Google's own presentation changes.

A before and after movement doesn't prove schema caused it. Nobody can promise a click lift. Our SEO audit checklist puts schema in the context of a broader review.

Keep structured data current

Review your markup when the business or site changes. Common triggers:

  • new hours, services, prices or staff

  • a new or closed location

  • template, plugin or domain changes

After a schema producer is updated or removed, check the generated output. Name a business owner for the facts and an implementation owner for the code. Keep the previous setup ready to roll back. Remove false or sensitive information straight away, even if a valid feature count falls.

Run a short first pass audit

A 15 minute check is a first pass, not a certification. Review your homepage, a priority service page and one article. Use both the vocabulary validator and the feature test, then record each issue with an owner. The Rich Results Test alone won't inventory Service or every business relationship.

Plan the first 30 days

Treat the first month as a controlled pilot.

Timeline.
A practical schema implementation plan
Week 1Inventory output and set responsible owners
Week 2Agree entities, identifiers and truthful facts
Week 3Test and release a representative pilot
Week 4Review reports and document maintenance triggers

These are example work windows, not a Google timeline. They don't promise recrawling or display. Our website implementation help is there if your platform or rebuild needs a hand.

Chasing retired features

Check the current feature gallery

Publishing private data

Decide what's public before marking up

Confusing a business with a page

Give each its own identifier

Disabling output blindly

Check what each producer supplies

Marking up unsupported claims

Describe only what the page shows

Treating a green test as display

Expect eligibility, not a guarantee

What we recommend at Elev8d

Start with one important page and its real subject. Find which system owns its output, fix the facts and test what publishes. Then extend the same connected model across your other templates.

Frequently asked questions

Is JSON-LD the only supported format?

No. Google recommends JSON-LD and also supports Microdata and RDFa. Use whatever your platform maintains reliably.

Does every page need the same markup?

No. Describe each page's real main subject. Your business identity can be referenced across pages. A specific service shouldn't appear on unrelated ones.

Can a service area business keep its home address private?

Yes. Don't publish a private address in markup, because the page source is public. You can still describe the business and its services truthfully.

What if no rich result items are detected?

That can be expected. Service markup, for example, has no matching Google feature. Check which feature you expected before treating it as a problem.

Should old FAQ or search box markup be removed urgently?

Not usually. Google said unsupported search box markup won't cause issues. For accurate, visible FAQ markup, removal is low priority. Fix misleading or broken markup first.

How often should the implementation be checked?

Whenever the business or the site changes, such as new hours, services or plugins. Add a regular review on top, such as each quarter.

Next steps

Pick one page

Choose an important page and name its real subject.

Find the output owner

Work out which theme, plugin or code produces its schema.

Test what publishes

Check the live page with both tools. The generator mentioned above can help prepare a revision.

Ajay K.
Written by Ajay K.Co-founder, Elev8d

Ajay is the co-founder of Elev8d and writes most of what you will read here. Psychology grad turned marketer, which is a fancy way of saying he cares about why people click, not just where things rank. Every guide is written in plain English for Australian businesses, tested on real campaigns before it earns a spot on this site.

The next step

Ready for a Website That Actually Converts?

If the article raised more questions than it answered, that is what the free audit is for: a straight, no obligation read on your site, your rankings and what a transfer would actually involve.

Prefer to text? Message us on 0494 740 873 and we will reply the same day.