Websites & tools
Service Schema for Local Businesses — Mark Up Your Services, Prices and Areas With Structured Data
How local businesses can use Schema.org Service, Offer and OfferCatalog with LocalBusiness markup to describe services, price ranges and areas served — JSON-LD examples for home services, clinics and salons, what Google does and doesn't do with it, testing, and common mistakes.
By Chamko Research Team Updated 5 min read
Quick answer
Service structured data (Schema.org `Service`, usually connected to your `LocalBusiness` through `makesOffer` or `hasOfferCatalog`) describes what services you offer, where, and at what price range. Google doesn't currently show a dedicated rich result for local services, so the benefit is clearer understanding of your business rather than visual stars or snippets. Add it on service pages with accurate names, descriptions, areas served and prices that match the visible page, validate it, and keep it consistent with your Google Business Profile services.
Quick answer: Service structured data (Schema.org
Service, usually connected to yourLocalBusinessthroughmakesOfferorhasOfferCatalog) describes what services you offer, where, and at what price range. Google doesn't currently show a dedicated rich result for local services, so the benefit is clearer understanding of your business rather than visual stars or snippets. Add it on service pages with accurate names, descriptions, areas served and prices that match the visible page, validate it, and keep it consistent with your Google Business Profile services.
LocalBusiness schema tells search engines who you are and where. Service schema adds what you do. Together they form a clear, machine-readable summary of your business.
When it's worth adding
- You have dedicated service pages (service page template).
- You can keep prices and details accurate.
- You want to reinforce relevance for specific services and areas.
It complements, not replaces, good content, a complete Business Profile and reviews (where to add keywords).
Basic structure
{
"@context": "https://schema.org",
"@type": "Electrician",
"name": "Sharma Electricals",
"url": "https://sharmaelectricals.in",
"telephone": "+91-98XXXXXX45",
"address": {
"@type": "PostalAddress",
"streetAddress": "Shop 4, Gokul Complex",
"addressLocality": "Ahmedabad",
"postalCode": "380015",
"addressCountry": "IN"
},
"areaServed": ["Satellite", "Bodakdev", "Vastrapur"],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Electrical services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "House wiring",
"description": "Concealed and surface wiring for flats and bungalows"
},
"priceCurrency": "INR",
"price": "15000"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "MCB and DB installation"
}
}
]
}
}
Use the most specific LocalBusiness subtype (Electrician, Dentist, BeautySalon, Restaurant…) and only include prices you actually show on the page.
Single-service page version
On a dedicated service page, you can mark up the service itself:
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "AC gas refill",
"provider": { "@type": "LocalBusiness", "name": "CoolTech AC Services" },
"areaServed": { "@type": "City", "name": "Ahmedabad" },
"offers": { "@type": "Offer", "priceCurrency": "INR", "price": "2500" }
}
What Google does with it
- Uses structured data to better understand page content.
- No guaranteed rich results for services.
- Requires markup to match visible content; misleading markup can be ignored or penalised.
Testing
- Schema Markup Validator (schema.org) for syntax.
- Google's Rich Results Test for any eligible features.
- Search Console for structured data issues (Search Console).
Common mistakes
- Prices in markup that differ from the page.
- Listing services you don't offer.
- Marking up every area in India as "areaServed".
- Adding self-serving review stars (review schema rules).
- Duplicating conflicting LocalBusiness blocks from multiple plugins.
Using generators
Start with the local business schema generator and extend with services manually or via your SEO plugin (schema guide, WordPress setup).
Example: a salon in Indore
A salon added BeautySalon schema with an OfferCatalog of 12 services and price ranges matching its price list page, validated it, and removed a plugin's duplicate schema. No visual change appeared in search, but its service pages were cleaner technically, and AI assistants began describing its services accurately when tested.
Key takeaways
- Service schema clarifies what you offer, where and at what price.
- Expect understanding benefits, not rich-result visuals.
- Keep markup accurate, specific and consistent with the page and profile.
Sources and further reading
- Schema.org — Service, Offer, OfferCatalog, LocalBusiness: schema.org
- Google Search Central — structured data general guidelines: developers.google.com/search
Matching schema with your Google Business Profile
Your profile's Services list and your website's Service schema should tell the same story. Use the same service names, similar descriptions and consistent prices. Inconsistency — "AC repair" on Google, "HVAC maintenance" on the website, different prices on each — confuses customers and weakens the clarity you're trying to create (products & services).
A simple workflow:
- Write a master service list in a sheet: name, description, price range, areas.
- Copy it into your Google profile's Services.
- Use the same list for website service pages and schema.
- Update all three together when anything changes.
Areas served: be realistic
areaServed can list cities, neighbourhoods or regions. List places you genuinely serve and can reach — the same areas as your Google service areas (service-area guide). Listing the whole country rarely helps and can look spammy.
Schema for different business types
| Business | LocalBusiness subtype | Typical services to mark up |
|---|---|---|
| Electrician | Electrician | Wiring, MCB/DB, inverter installation |
| Plumber | Plumber | Leak repair, bathroom fittings, tank cleaning |
| Dentist | Dentist | Root canal, implants, braces |
| Salon | BeautySalon / HairSalon | Haircut, keratin, bridal makeup |
| Restaurant | Restaurant | Use Menu markup instead of Service |
| Gym | ExerciseGym | Memberships, personal training |
| Lawyer | Attorney / LegalService | Practice areas (keep factual) |
Keeping markup maintainable
Hard-coding JSON-LD on every page becomes messy. Use your CMS or SEO plugin to generate schema from structured fields, or a single template that reads service details from your page content. That way, updating a price on the page updates the markup automatically.
Frequently asked questions
Is Service schema required?
No, it's optional but helpful for clarity.
Should prices be exact?
Use prices you show; ranges can be described on the page.
Can I use multiple LocalBusiness types?
Choose the most accurate primary type; avoid conflicting blocks.
Does schema help Google Maps ranking?
Not directly; it supports your website's clarity.
How often should I update it?
Whenever services or prices change.
Can AI tools read schema?
Many systems parse structured data; it can help them describe your business accurately.
Should restaurants use Service schema?
Restaurants are better served by Menu and Restaurant markup.
Can I add schema without a developer?
Yes — generators and SEO plugins help; validate before publishing.
Should every service have its own Offer?
List your main services; you don't need every minor variation.
Does schema show in Google Maps?
No — Maps uses your Business Profile data.