SEO

Schema Markup for Service Businesses: A Practical Guide

8 min read
Difficulty
Moderate
You need
Template or CMS access, Search Console
Format
JSON-LD
On this page
  1. What schema markup does for a service business
  2. Which schema types fit which pages
  3. An example LocalBusiness block
  4. Steps
  5. Mistakes that cost you rich results
  6. Troubleshooting
  7. Common questions

Schema markup is code that describes your business and pages in a vocabulary search engines share, so they can read your name, address, hours and services without guessing. For most service businesses, that means Organization or LocalBusiness markup for the company, Service markup for each service page, and breadcrumbs on every page, all written in JSON-LD and matched to what visitors can see. This guide is part of our technical SEO guide.

You'll need access to your page templates or CMS, and a verified Search Console property. If you work with a developer, this guide gives you the list to hand over.

What schema markup does for a service business

Structured data helps Google understand a page and can make it eligible for rich results, such as business details in a knowledge panel or breadcrumbs above a result. Google is clear that eligibility isn't a promise. Its guidelines say correct markup enables a feature, not that the feature will appear, because results are tailored to each search.

Google also doesn't describe markup as a ranking boost. Think of it as a precise label: it removes doubt about who you are, where you are and what each page offers. It never replaces the visible content. If a fact isn't on the page, it doesn't belong in the markup.

Which schema types fit which pages

Google recommends using the most specific type that truly describes a page, and putting markup on the page it describes. For a typical service business site, that maps out like this.

Schema types for the main pages of a service business site
PageMain typeNotes
Home or about pageOrganization or LocalBusinessName, logo, URL, contact details, sameAs
Location or contact pageLocalBusiness subtypeOne block per real, visitable location
Service pageServiceName the provider; no Google rich result
Guide or blog postArticleAuthor, dates, headline
Every page with breadcrumbsBreadcrumbListMust match the breadcrumb trail shown

Service is part of the schema.org vocabulary, but Google's list of supported search features doesn't include a Service rich result. It still helps describe the page accurately; just don't expect a new search appearance from it.

An example LocalBusiness block

Here is a trimmed LocalBusiness block for a fictional roofing company with one office. It sits in a script tag of type application/ld+json in the page's HTML. Google requires name and address for local business markup; the rest are recommended.

json
{
  "@context": "https://schema.org",
  "@type": "RoofingContractor",
  "@id": "https://www.example.com/#business",
  "name": "Example Roofing Co.",
  "url": "https://www.example.com/",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "100 Example Street",
    "addressLocality": "Anytown",
    "addressRegion": "ST",
    "postalCode": "00000",
    "addressCountry": "US"
  }
}

Add telephone and openingHoursSpecification the same way, using the exact phone number and hours shown on the page. The @id gives the business a stable identifier, so a Service block on another page can name it as the provider instead of repeating every detail.

Steps

  1. List your page types.

    Write down each template on your site: home, about, contact, location pages, service pages, guides. Note what each one is mainly about. Google says to include the main type that reflects a page's main focus, so each template needs one clear answer before you write any code.

  2. Describe the business once.

    Put Organization markup, or LocalBusiness if customers visit you, on the home or about page. Google says Organization has no required properties, so add the ones that apply: name, URL, logo, contact details and sameAs links to your official profiles. Give the block an @id you can reuse elsewhere.

  3. Choose the most specific business type.

    LocalBusiness has many subtypes, such as Plumber, Electrician or RoofingContractor. Use the closest match. If you offer several, Google accepts an array of types. Define each real location as its own LocalBusiness with its own address and the URL of that location's page.

  4. Describe each service on its own page.

    On each service page, add a Service block with the service name, a short description that matches the page, and a provider that points to your business @id. Add areaServed only if the page states where you work. One service page, one Service block.

  5. Add breadcrumbs and articles where they fit.

    If a page shows a breadcrumb trail, add BreadcrumbList with the same steps in the same order. Mark up guides and posts as Article with the author and dates. This hub follows the same rule: every guide carries Article and BreadcrumbList markup, generated from the page itself.

  6. Match every value to the visible page.

    Google's guidelines say not to mark up content that readers can't see, and that markup must truly represent the page. Check names, hours, phone numbers and prices against the visible text. If your hours change, update the page and the markup together, ideally from one source in your CMS.

  7. Leave out self-serving review markup.

    Google says pages where a business controls reviews about itself are ineligible for review stars with LocalBusiness or Organization markup, even through an embedded widget. Show real reviews as content if you like, but don't add aggregateRating about your own business.

  8. Validate, release and monitor.

    Test each template in the Rich Results Test and the Schema Markup Validator, and fix critical errors. Release on a few pages first, then run URL Inspection to see how Google reads them. After a full release, check Search Console for structured data issues, as part of each technical SEO audit.

Wondering what FAQ markup still does? Our guide to FAQ schema and rich results covers the changes.

For markup in AI-generated answers, see our guide to structured data for AI search.

If you'd rather have structured data planned and added for you, our in-house SEO team handles technical SEO, including site structure, metadata and structured data.

Mistakes that cost you rich results

Most structured data problems aren't syntax errors. They're mismatches between the markup and the page, and validators can't always catch them.

  • Marking up hidden content. Hours, prices or reviews that appear only in the code break Google's guidelines.
  • Using a vague type. Plain LocalBusiness when a specific subtype exists tells Google less.
  • One address for every location. Each location needs its own block, on its own page, with its own details.
  • Blocking the page. Google can't use markup on pages blocked by robots.txt or noindex.
  • Letting markup go stale. Old hours or a former phone number in the code mislead people and search engines alike.

Troubleshooting

The Rich Results Test finds no structured data

Cause: the markup isn't in the HTML the tool receives. Common reasons are a script that only runs after a user action, a tag manager rule that never fires on that template, a plugin that's switched off, or a test run against a staging URL that blocks crawlers.

Fix: view the page source and search for application/ld+json. If it's missing, the markup isn't being output on that template. If it's present in the source but the test still finds nothing, check that the JSON is complete and closed, with no stray commas. If you add markup with JavaScript, Google can read it, but test the live URL rather than pasted code, so you see what Google's renderer sees. Then check that the page isn't blocked by robots.txt, noindex or a login.

The markup is valid, but nothing changes in search

Cause: valid markup makes a page eligible, nothing more. Google says it tailors results to each search, and may decide that a plain result is best. Some types, such as Service, don't produce any rich result in Google at all. And Google has to recrawl the page before it can use new markup.

Fix: confirm the type you added has a supported feature in Google's search gallery. Check that the page is indexed in URL Inspection and that Google has crawled it since the change. Make sure the markup matches the visible page, because Google may ignore misleading or incomplete markup. If everything checks out, wait for recrawling and judge the result over weeks. Don't add more types just to try to force a rich result.

Search Console reports a structured data issue

Cause: an enhancement report found errors or missing required properties on some pages, or, more seriously, a manual action was applied for markup that breaks Google's guidelines, such as marking up content users can't see or self-serving reviews.

Fix: open the report and look at example URLs, which usually share one template. Fix the template, test one URL in the Rich Results Test, then use Validate fix in Search Console. For a manual action, remove or correct every instance of the problem markup across the site, not just the examples, then request a review in the Manual Actions report. Google says a structured data manual action removes rich result eligibility but doesn't affect how the page ranks in web search.

Common questions

Does schema markup improve rankings?

Google doesn't describe structured data as a ranking boost. It says structured data helps it understand a page and can make the page eligible for rich results, which may still never appear. Even a structured data manual action only removes rich result eligibility; Google says it doesn't affect how the page ranks in web search. Treat markup as a way to describe your business clearly.

Should a service business use Organization or LocalBusiness?

Use LocalBusiness, in its most specific subtype, if customers can visit a real address. Google asks you to define each location as its own LocalBusiness, and LocalBusiness is a subtype of Organization, so it can carry the same company details. A business with no visitable address can describe itself with Organization on the home page and list its services separately.

Can I mark up my Google reviews on my own website?

Not for star ratings. Google says that if a business controls the reviews about itself, its pages using LocalBusiness or Organization markup are ineligible for the review star feature. That includes reviews pulled in through an embedded widget. You can still show genuine reviews to visitors as page content. Just don't add rating markup about your own business.

← Back to SEO

Rankings that compound

In-house keyword research, technical SEO and content, custom-quoted. Quote within 24 hours.

5.0-star Google rating (24 reviews) · BBB Accredited, A rating