The Bulletin Schema

No. 038

Service schema: how to mark up each service

LocalBusiness schema describes who you are. Service schema describes what you actually sell, page by page, and most sites that bother with schema at all skip this part.

LocalBusiness schema tells a machine who you are. It doesn't tell it what you actually sell, page by page. That's what Service schema is for, and it's the piece most sites skip even when they've already added the basics.

How Service relates to LocalBusiness

Schema.org treats these as two different jobs working together rather than one replacing the other. LocalBusiness describes the business itself: your name, address, hours. Service describes a specific offering, like water heater installation or a pest control maintenance plan, and it names your business as its provider. In practice, your LocalBusiness entry becomes the provider value inside each Service block. See LocalBusiness schema for contractors if you haven't set up the business-level markup yet.

The properties worth using

A basic example

A plumber's water heater page might carry something close to this:

`` { "@context": "https://schema.org", "@type": "Service", "name": "Water Heater Installation", "serviceType": "Water heater installation and replacement", "provider": { "@type": "Plumber", "name": "Business name", "telephone": "+1-000-000-0000" }, "areaServed": { "@type": "City", "name": "Your service area" } } ``

This sits on the specific service page it describes, alongside the site-wide LocalBusiness block that usually lives on the homepage.

One block per page, matched to what's actually on it

The same rule that governs all structured data applies here directly: what the schema claims has to match what's visibly on the page. A Service block for water heater installation belongs on the water heater installation page, not copied wholesale onto every service page with the name swapped and the rest left generic. If a service page doesn't say much distinct on its own, that's a sign the page itself needs more real content before the schema will do much good either.

Why this is worth the extra effort beyond LocalBusiness alone

A site with only business-level schema tells a search engine or AI assistant that a business named "X" exists at a given address. A site with Service schema on each service page tells the same systems, precisely, that this business offers water heater installation, separately from drain cleaning, separately from repiping, each with its own page a machine can point to directly. See how to get your business recommended by AI assistants for why that specificity increasingly matters beyond traditional search.

A mistake worth avoiding: one generic block copied everywhere

The most common shortcut, and the one that undermines the whole point, is writing one Service block and pasting it across every service page with only the name field changed. That technically produces valid-looking schema on every page, but it tells a search engine or AI assistant almost nothing distinct about each one, since the surrounding description, area served and offer details are identical everywhere. The value of Service schema comes specifically from each page describing something real and particular. A templated block defeats that before it starts.

Questions

Do I need Service schema on every page, even minor ones?

Prioritize your main revenue services first. A thin, rarely-offered service doesn't need the same investment as your core offerings.

Can one Service block cover multiple related offerings?

It's cleaner to keep them separate if the offerings are genuinely distinct purchases (repair versus installation, for instance), since that matches how a customer actually searches and decides.

How do I check this is working correctly?

Use Google's Rich Results Test on the individual page, and check Search Console's structured data reports over time. See how to test your schema with the Rich Results Test.

Sources

Want a site that launches with answers already written?

Start a project