Local Schema Markup for Service Providers | Sicc Media

Local Schema Markup for Service Providers

September 11, 20265 min read

Local Schema Markup for Service Providers

Schema is a note to machines telling them exactly what your business is. Most sites never leave one.

TL;DR Paste one block of JSON-LD into your site head. It tells Google and AI tools your name, address, phone, hours, and service area in a format they cannot misread. Copy the template below, change the values, validate, done.

What JSON-LD actually is

A block of structured text in your page’s <head>. Invisible to visitors. Read by machines.

Without it, a crawler guesses your hours from a paragraph. With it, you hand over the answer.

Three things to know

  • JSON-LD is the format Google recommends. Ignore microdata and RDFa advice from 2016.
  • It goes in the head, on every page, or at minimum the homepage and contact page.
  • It must match your visible content. Marking up hours you do not display is a violation.

The template

Change every value in caps. Delete what does not apply.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "YOUR EXACT BUSINESS NAME",
  "image": "https://YOURSITE.com/logo.png",
  "@id": "https://YOURSITE.com/#business",
  "url": "https://YOURSITE.com",
  "telephone": "+15085551234",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "160 EXAMPLE ST",
    "addressLocality": "Fall River",
    "addressRegion": "MA",
    "postalCode": "02720",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 41.7015,
    "longitude": -71.1550
  },
  "areaServed": [
    { "@type": "City", "name": "Fall River" },
    { "@type": "City", "name": "Somerset" },
    { "@type": "City", "name": "Swansea" }
  ],
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:00",
    "closes": "17:00"
  }],
  "sameAs": [
    "https://www.facebook.com/YOURPAGE",
    "https://www.instagram.com/YOURPAGE"
  ]
}
</script>

Pick the right @type

LocalBusiness works. A specific type works better, because it carries more meaning.

Trade Use
Plumbing Plumber
Electrical Electrician
HVAC HVACBusiness
Roofing, general contracting HomeAndConstructionBusiness
Salon, barber HairSalon
Cleaning HousePainter or LocalBusiness
Anything without a match LocalBusiness

Schema.org lists them all. Use the most specific one that fits.

Service-area businesses: drop the address

If customers do not come to you, do not publish a street address. Use areaServed and omit address, or Google may treat a home address as a storefront.

GeoCoordinates note. Latitude and longitude help disambiguate you from similarly named businesses. Get them by right-clicking your location in Google Maps and copying the numbers.

Where to put it

Platform How
WordPress A schema plugin, or paste into header.php before </head>
Shopify Edit theme.liquid, paste before </head>
Webflow Project Settings, Custom Code, Head
GoHighLevel Funnel or site settings, Tracking Code, Head
Squarespace Settings, Advanced, Code Injection, Header
Hand-coded Directly in <head>

Validate before you walk away

Two free tools. Use both.

  1. Google’s Rich Results Test. Paste your URL. It tells you what Google can read.
  2. Schema.org Validator. Stricter. Catches syntax errors the Google tool tolerates.

The error you will hit: a stray comma. JSON does not allow a trailing comma before a closing brace. If the validator throws a parse error, look for that first.

What schema does and does not do

Does: clarify your entity to search engines and AI tools. Improve eligibility for rich results. Make your hours, phone, and service area machine-readable and unambiguous.

Does not: rank you by itself. Schema is a clarity tool, not a ranking hack. It removes doubt. Doubt is what gets you left out of AI answers.

Paste the template, change the values, run the validator. Twenty minutes, once, and your business stops being a guess.

Not a tech-savvy pro? That is exactly what we are here for. [CALL NOW]

Common mistakes that make schema worthless

Marking up content that is not on the page. Search engines treat this as spam. If the schema says you are open until 8pm, the page must say so too.

Multiple conflicting LocalBusiness blocks. One per page, matching that page’s subject. A service page marked up as the whole business confuses the entity.

Fake or aggregated review markup. Self-serving review snippets from your own site are widely discounted, and inventing an aggregate rating is a manual-action risk. Mark up reviews only where they genuinely exist on the page and were genuinely left by customers.

Copying a competitor’s block without changing the NAP. It happens more than you would expect, and it points your schema at somebody else’s business.

Leaving the markup static while the business changes. Hours, phone number and service area drift. Schema that contradicts your Google Business Profile is worse than none, because inconsistency is the exact signal you were trying to fix.

Validating it

Two tools, both free, both run in under a minute.

  • Google’s Rich Results Test tells you which rich result types the page is eligible for. This is the one that matters for search appearance.
  • Schema.org’s own validator checks the markup is structurally valid, regardless of what Google does with it.

Run both. A page can be valid schema and still ineligible for a rich result, and vice versa. The two tools answer different questions.

Then check Search Console. The Enhancements reports show errors detected on live pages across the whole site, which is where you will catch a template change that broke markup on two hundred pages at once.

Where to put it

JSON-LD in the head or body, not microdata in the markup.

Microdata and RDFa still work, and they entangle your structured data with your HTML so that a design change breaks your markup. JSON-LD sits in a single script block, is easy to generate from a template, and is straightforward to audit.

One block per page, generated from your CMS fields rather than hand-written per page. Hand-written schema goes stale the moment somebody changes a phone number.

Tiff Pacheco
Tiff Pacheco is a creative strategist and digital design professional who lives in Massachusetts with her hubby and fat kitty cat.
Back to Blog