Local SEO · June 19, 2026 · 13 min read

Schema markup for local business: what it is, why you need it, and how to add it

Schema markup sounds complicated, but it's just structured facts about your business Google can read instantly. Here's what LocalBusiness schema does, why it matters for rankings, and the exact JSON-LD code you need.

Schema markup for local business: what it is, why you need it, and how to add it

The invisible code that tells Google who you are

Your website says you're a plumber in Sarasota. Your homepage says it. Your contact page says it. Your footer says it.

But when Google crawls your site, it doesn't read like a human. It scans HTML. It looks for patterns. It tries to extract facts: business name, address, phone number, hours, services, service area.

Sometimes it gets it right. Sometimes it pulls your address from the footer but misses your phone number. Sometimes it thinks your tagline is your business name. Sometimes it can't tell if you're open on Sundays.

Schema markup is how you tell Google exactly what everything is - in a format it can read instantly, with zero ambiguity.

It's not a ranking factor in the direct sense (Google has said this). But it helps Google understand your business faster and more accurately. And when Google understands you better, you show up more often in the right searches - especially "near me" queries and map results.

Most Bradenton and Sarasota service businesses don't have schema markup on their site. Which means if you add it, you're already ahead of 70% of your local competitors.

What schema markup actually is

Schema is a standardized vocabulary for labeling information on web pages. It was created by Google, Microsoft, Yahoo, and Yandex in 2011 so websites could "speak" to search engines in a common language.

Think of it like this:

Without schema: Your contact page says "Call us at (941) 555-0199." Google sees text. It guesses that's a phone number based on the format.

With schema: Your contact page has a hidden block of code that says "telephone": "(941) 555-0199". Google knows that's your business phone number. No guessing.

Schema markup is written in JSON-LD format (JavaScript Object Notation for Linked Data). It's just a block of structured text that sits in the <head> or <body> of your HTML and tells search engines:

  • This is the business name
  • This is the address
  • This is the phone number
  • These are the business hours
  • This is the service area
  • These are the services offered
  • This is a link to the Google Business Profile

Google reads it, files it away, and uses it when deciding whether to show your business for relevant searches.

Why local businesses need LocalBusiness schema

There are hundreds of schema types (Article, Product, Event, Recipe, etc.). For service businesses, the one that matters is LocalBusiness (or one of its subtypes: Plumber, Electrician, HVAC, HomeAndConstructionBusiness, etc.).

LocalBusiness schema does four things:

1. It helps Google connect your website to your Google Business Profile

Google wants to know your website and your GBP are the same entity. If your website says "Mike's HVAC" and your GBP says "Mike's HVAC Services, LLC," schema markup is how you clarify they're the same business.

2. It makes your business eligible for rich results

Rich results are the enhanced search listings that show star ratings, hours, price range, and other details directly in search results. Schema doesn't guarantee rich results, but without schema, you're not even in the running.

3. It reinforces NAP consistency

If your schema markup matches your Google Business Profile and your footer, Google has three consistent signals. If your schema says one phone number and your footer says another, Google notices the inconsistency and discounts both. Schema is one more place to get your NAP data exactly right.

4. It feeds Google's Knowledge Graph

Google builds a "knowledge graph" of entities (businesses, people, places). Schema markup is how you feed accurate data into that graph. The more confident Google is in your data, the more often it shows you.

What to include in your LocalBusiness schema

Here's the core data every local business schema block should have:

  • @type: LocalBusiness (or subtype like Plumber, Electrician, etc.)
  • name: Your business name, exactly as it appears on your GBP
  • image: URL to your logo or primary business photo
  • telephone: Your main business phone number (local, not toll-free)
  • email: Your primary business email (optional but helpful)
  • address: Full street address, city, state, ZIP
  • url: Your homepage URL
  • priceRange: e.g., "$$" or "$50-$200" (helps set expectations)
  • openingHoursSpecification: Your hours for each day of the week
  • geo: Latitude and longitude of your business location
  • areaServed: Cities or regions you serve (Sarasota, Bradenton, etc.)
  • sameAs: Links to your GBP, Facebook, Yelp, other profiles

You can add more (founder, founding date, service descriptions), but the above list is the baseline. If you have that, you're 95% of the way there.

The actual JSON-LD code (copy this template)

Here's what LocalBusiness schema looks like for a fictional Sarasota HVAC company. Copy this, replace the placeholder data with your actual info, and drop it into your site's <head> section:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HVACBusiness",
  "name": "Coastal Air Solutions",
  "image": "https://www.coastalairsolutions.com/images/logo.jpg",
  "telephone": "(941) 555-0199",
  "email": "info@coastalairsolutions.com",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 Tamiami Trail",
    "addressLocality": "Sarasota",
    "addressRegion": "FL",
    "postalCode": "34236",
    "addressCountry": "US"
  },
  "url": "https://www.coastalairsolutions.com",
  "priceRange": "$$",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "27.3364",
    "longitude": "-82.5307"
  },
  "areaServed": [
    {
      "@type": "City",
      "name": "Sarasota"
    },
    {
      "@type": "City",
      "name": "Bradenton"
    },
    {
      "@type": "City",
      "name": "Lakewood Ranch"
    },
    {
      "@type": "City",
      "name": "Venice"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/coastalairsolutions",
    "https://g.page/coastalairsolutions",
    "https://www.yelp.com/biz/coastal-air-solutions-sarasota"
  ]
}
</script>

What to customize:

  • @type: Change HVACBusiness to the subtype that matches your business. Options: Electrician, Plumber, GeneralContractor, Locksmith, MovingCompany, RoofingContractor, HomeAndConstructionBusiness (generic). Full list at schema.org/LocalBusiness.
  • name: Your exact business name (match your GBP).
  • image: URL to your logo (must be a full URL, not a relative path).
  • telephone: Your main line, formatted consistently.
  • email: Your primary contact email.
  • address: Your full street address. Match your GBP exactly.
  • url: Your homepage.
  • priceRange: Use $ (budget), $$ (moderate), $$$ (higher-end), or a specific range like $100-$500.
  • openingHoursSpecification: Your actual hours. Use 24-hour format (08:00, not 8am). List each day or group days that share the same hours.
  • geo: Your latitude and longitude. Get this from Google Maps: search your address, right-click the red pin, click the coordinates at the top to copy them.
  • areaServed: Cities you serve. You can list up to 10-15 if you serve a wide area.
  • sameAs: Links to your GBP, Facebook, Yelp, LinkedIn, Instagram - wherever you have an official presence. Use full URLs.

Save this as a snippet and paste it into the <head> section of every page on your site (or at least your homepage and contact page). If you're on WordPress, there are plugins (Rank Math, Yoast, Schema Pro) that let you fill in a form and they generate the JSON-LD for you. If you're on a custom-built site, your developer can hard-code this into your template.

How to test your schema markup

Before you publish, test it. Google offers a free tool called the Rich Results Test:

https://search.google.com/test/rich-results

Paste your full page URL (or paste the raw JSON-LD code). Hit "Test." Google will tell you:

  • Whether the schema is valid
  • What properties it found (name, address, phone, etc.)
  • Any errors or warnings

Common errors:

  • Missing required field: You forgot name, address, or telephone. Add them.
  • Invalid URL format: Your image or url field isn't a full URL. Fix it to https://....
  • Incorrect date/time format: Hours must be in 24-hour format (08:00, not 8:00am).

If the test says "Valid," you're good. Google can read your schema.

If it says "Invalid" or shows warnings, fix the issues and re-test. Don't publish broken schema - it's worse than no schema because it sends mixed signals.

Where to put the schema code on your site

Three options:

Option 1: In the <head> of your homepage

This is the simplest. Paste the JSON-LD block right before the closing </head> tag on your homepage. Google will crawl it and associate the data with your site.

If you only put schema on one page, make it your homepage.

Option 2: On every page (recommended)

Better: add the schema to your site template so it appears on every page. That way Google sees consistent business data no matter which page it crawls first.

If you're on WordPress, your theme probably has a "Header Scripts" field in the theme settings or customizer. Paste the JSON-LD block there and it'll appear site-wide.

Option 3: On your contact page

If you can't do site-wide, at least put it on your contact page. That's where Google expects to find business info, so schema there reinforces everything else on the page.

What about schema plugins and tools?

If you're on WordPress, the easiest route is a plugin:

Rank Math (free) has a LocalBusiness schema builder built in. You fill out a form with your business name, address, hours, etc., and it generates the JSON-LD automatically.

Yoast SEO (free) has basic schema support. The premium version has more control.

Schema Pro (paid, ~$79/year) gives you granular control over every schema type.

If you're on Wix, Squarespace, or Shopify, you'll have to add the JSON-LD manually via a code injection field (usually in site settings under "Advanced" or "SEO"). These platforms don't have great schema tools built in, which is one reason why custom-built websites often perform better in local search.

If you're on a custom PHP site (like the ones we build), your developer can hard-code the schema into your template and pull data dynamically from your site settings. That way if your phone number changes, you update it once and the schema updates everywhere.

Common mistakes Sarasota and Bradenton businesses make with schema

Mistake 1: Adding schema but not matching the GBP

Your schema says "Mike's Plumbing." Your GBP says "Mike's Plumbing Service." Google sees two different names and doesn't connect them.

Fix: Make your schema name field match your GBP exactly, character for character.

Mistake 2: Listing a P.O. Box in the address field

Schema requires a physical street address. If you work from home and use a P.O. Box for mail, either use your home address (and hide it on GBP if needed), or use a coworking/mailbox service address that's actually a street address.

Fix: Schema streetAddress must be a real street. Save the P.O. Box for your invoice footer.

Mistake 3: Not updating hours when they change

You update your GBP hours for the holidays. You forget to update your schema. Now Google sees conflicting info.

Fix: Treat schema like your GBP - update it whenever your hours, phone, or address change.

Mistake 4: Using toll-free numbers or tracking numbers

Your schema says (800) 555-1234 but your GBP says (941) 555-0199. Google sees two businesses.

Fix: Use your local main line in schema. If you use call tracking on your website, that's fine for visible phone numbers, but schema should have your real local number.

Mistake 5: Adding schema but never testing it

You paste the code, publish the page, assume it's working. Two months later you check the Rich Results Test and realize there's a syntax error - a missing comma, a typo in a field name - and Google's been ignoring your schema the whole time.

Fix: Test before you publish. Test again 2 weeks after launch to make sure it's still valid. Google's schema requirements occasionally change.

Does schema guarantee rich results in search?

No. Google decides whether to show rich results (the enhanced listings with stars, hours, etc.) based on a bunch of factors: relevance, search intent, competition for that query.

Schema makes you eligible for rich results. It doesn't guarantee them. Think of it like submitting an application - schema is the application, rich results are getting accepted.

But even if you never see rich results, schema still helps. Google uses it to understand your business, connect your site to your GBP, and build confidence in your NAP data. That's worth doing even without the visual payoff in search results.

How long before you see an impact?

Google has to recrawl your site and process the schema. That usually takes 2-6 weeks.

You'll know it's working when:

  • The Rich Results Test shows "Valid" with all your properties detected
  • Google Search Console (under Enhancements > Unparsed structured data) stops showing errors for your site
  • You start seeing your business show up for slightly broader local searches (not just your exact business name, but "[service] in [city]" queries)

Schema isn't a magic ranking boost. It's infrastructure. It makes everything else (your GBP, your on-page content, your backlinks) work a little better because Google understands your business more clearly.

If you're doing everything else right - good website, active GBP, consistent NAP, strong local content - and you add schema, you might jump 1-3 spots in map results over the next 8 weeks. If you're not doing the basics, schema won't save you.

Other schema types worth knowing about

LocalBusiness is the big one, but there are a few other schema types that can help:

Service schema

If you offer multiple distinct services (AC repair, AC installation, duct cleaning), you can add Service schema for each one. It looks like this:

{
  "@type": "Service",
  "serviceType": "Air Conditioning Repair",
  "provider": {
    "@type": "HVACBusiness",
    "name": "Coastal Air Solutions"
  },
  "areaServed": {
    "@type": "City",
    "name": "Sarasota"
  }
}

This is overkill for most small businesses, but if you have detailed service pages and want to help Google understand what each page is about, Service schema can help.

BreadcrumbList schema

If your site has a breadcrumb navigation (Home > Services > HVAC Repair), you can mark that up with BreadcrumbList schema. It helps Google understand your site structure and sometimes shows breadcrumbs in search results instead of your full URL.

Not critical, but nice to have if your developer is already adding schema.

Review / AggregateRating schema

If you display Google reviews or testimonials on your website, you can mark those up with Review or AggregateRating schema. This is what makes star ratings appear in search results under your business name.

Important: You can only use this if the reviews are real and verifiable. Don't fake reviews or pull star ratings from thin air. Google will penalize you. If you display your actual Google reviews on your site (via an embed or API), marking them up with schema is fine.

What to do next

If you don't have schema markup on your site, add it this week. It takes 20 minutes:

  1. Copy the JSON-LD template above
  2. Fill in your business name, address, phone, hours, service area
  3. Paste it into the <head> of your homepage (or site-wide if you can)
  4. Test it at https://search.google.com/test/rich-results
  5. Fix any errors, re-test, publish

If you're not sure how to access your site's <head> section, check your website platform's documentation. Most have a field for "custom code" or "header scripts."

If you're on a platform that makes this hard (or impossible), that's a sign your platform is limiting your SEO potential. We see this a lot with Wix, Weebly, and older drag-and-drop builders. It's one reason we build all our sites in custom PHP - full control over every tag, every script, every piece of structured data.

And if you'd rather just have someone handle this for you, we include schema markup setup in every website we build. It's part of the foundation, not an add-on. You can see what a full build includes on our pricing page, or just book a 15-minute call and we'll talk through your specific site and what makes sense.

Schema isn't glamorous. It won't change your website's design or wow your customers. But it's the kind of invisible infrastructure that separates businesses that show up in local search from businesses that don't. If you're competing in Sarasota, Bradenton, Venice, or Lakewood Ranch, you need every small advantage you can get. Schema is one of the easiest.

Call Get My Free Audit