Local SEO

Schema Markup for Local Business: The Complete Guide

Mar 24, 2026 · 11 min read

Schema Markup for Local Business: The Complete Guide

Schema markup is structured data that tells search engines exactly what your business is, where it’s located, what services you offer, and when you’re open. Without it, Google has to guess this information from your page content. With it, Google knows with certainty — and rewards that certainty with richer search results and stronger ranking signals.

For local businesses, schema markup is one of the highest-impact, lowest-effort SEO improvements you can make. Most competitors don’t implement it (or implement it incorrectly), which means doing it right gives you an immediate edge.

What Schema Markup Does for Local SEO

LocalBusiness Schema: The Foundation

Every local business website should have LocalBusiness schema on the homepage (at minimum) and on every location page.

Complete LocalBusiness Example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Smith HVAC Services",
  "image": "https://www.smithhvac.com/images/storefront.jpg",
  "url": "https://www.smithhvac.com",
  "telephone": "+1-555-123-4567",
  "email": "[email protected]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street, Suite 200",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.2672,
    "longitude": -97.7431
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "14:00"
    }
  ],
  "priceRange": "$$",
  "areaServed": [
    {
      "@type": "City",
      "name": "Austin"
    },
    {
      "@type": "City",
      "name": "Round Rock"
    },
    {
      "@type": "City",
      "name": "Cedar Park"
    }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "HVAC Services",
    "itemListElement": [
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "AC Installation",
          "description": "Full residential and commercial AC system installation"
        }
      },
      {
        "@type": "Offer",
        "itemOffered": {
          "@type": "Service",
          "name": "Heating Repair",
          "description": "Emergency and scheduled heating system repairs"
        }
      }
    ]
  },
  "sameAs": [
    "https://www.facebook.com/smithhvac",
    "https://www.yelp.com/biz/smith-hvac-austin",
    "https://www.linkedin.com/company/smith-hvac"
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "156"
  }
}
</script>

Breaking Down Each Property

Property Required? Purpose
@type Yes Use the most specific type: “Plumber”, “Attorney”, “Dentist”, “Restaurant”, etc.
name Yes Your exact business name (match GBP)
address Yes Full postal address (match GBP exactly)
telephone Yes Primary phone number in E.164 format (+1-555-123-4567)
geo Recommended Latitude/longitude coordinates (helps distance calculations)
openingHoursSpecification Recommended Business hours (match GBP exactly)
areaServed Recommended Cities/regions you serve (especially for SABs)
hasOfferCatalog Recommended Services you provide with descriptions
sameAs Recommended Links to your social profiles and directory listings
aggregateRating Optional Your overall review rating (only if you can keep it current)
image Recommended Photo of your business (storefront, team, etc.)
priceRange Optional Relative price range ($, $$, $$$, $$$$)

Choosing the Right @type

Don’t use generic “LocalBusiness” if a more specific type exists. Google provides better rich results for specific types:

The full list is at schema.org/LocalBusiness.

FAQPage Schema: Capture Featured Snippets

FAQPage schema lets your FAQ answers appear directly in Google search results as expandable dropdowns. This takes up significantly more SERP real estate and dramatically improves click-through rates.

Implementation

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does AC installation cost in Austin?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "AC installation in Austin typically costs between $3,500 and $7,500, depending on the system size, brand, and complexity of the installation. Central AC for a 2,000 sq ft home averages $5,200."
      }
    },
    {
      "@type": "Question",
      "name": "How long does AC installation take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "A standard residential AC installation takes 4-8 hours for a straightforward replacement. New installations requiring ductwork can take 2-3 days."
      }
    }
  ]
}
</script>

FAQ Schema Best Practices

Service Schema: Tell Google Exactly What You Do

Service schema is particularly valuable for service-area businesses and multi-service companies. It helps Google match your business with long-tail service queries.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Service",
  "serviceType": "Emergency Plumbing Repair",
  "provider": {
    "@type": "Plumber",
    "name": "Smith Plumbing",
    "telephone": "+1-555-123-4567"
  },
  "areaServed": {
    "@type": "City",
    "name": "Austin, TX"
  },
  "description": "24/7 emergency plumbing repair for residential and commercial properties in Austin, including burst pipes, water heater failures, and sewer backups.",
  "offers": {
    "@type": "Offer",
    "priceSpecification": {
      "@type": "PriceSpecification",
      "price": "89",
      "priceCurrency": "USD",
      "description": "Service call fee (waived with repair)"
    }
  }
}
</script>

Review Schema: Display Star Ratings in Search

Review schema can display star ratings directly in organic search results. Note that Google has tightened the rules around review schema:

BreadcrumbList Schema: Improve Navigation Display

Breadcrumb schema shows your site structure in search results, replacing the plain URL with a clickable breadcrumb trail:

smithhvac.com > Services > AC Installation

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://www.smithhvac.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Services",
      "item": "https://www.smithhvac.com/services/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "AC Installation",
      "item": "https://www.smithhvac.com/services/ac-installation/"
    }
  ]
}
</script>

Multi-Location Schema

For businesses with multiple locations, you have two options:

Option 1: Separate Schema Per Location Page

Each location page gets its own LocalBusiness schema with that location’s specific address, phone, hours, and coordinates. This is the preferred approach when each location has its own page.

Option 2: Organization + Locations on Homepage

On your homepage, use Organization schema with a department property listing each location. This approach works for a single “Locations” page that lists all locations.

For multi-location businesses, ensure each location has fully unique schema — not just a copy-paste with the city name changed. Each location should have its own coordinates, phone number, hours, and service area.

How to Implement Schema Markup

For WordPress Sites

  1. Manual JSON-LD: Add the schema code directly to your page template or using a plugin like “Insert Headers and Footers.” This gives you full control.
  2. Yoast SEO / Rank Math: Both plugins generate basic LocalBusiness schema automatically from your settings. This covers the basics but often misses services, geo coordinates, and area served.
  3. Schema-specific plugins: Plugins like “Schema Pro” or “WP Schema” provide a GUI for building structured data without writing JSON.

Validation

Always validate your schema after implementation:

Run both tests after implementation and after every site update. Theme changes, plugin updates, and page edits can break structured data.

Common Schema Mistakes

1. NAP Mismatch Between Schema and GBP

Your schema business name, address, and phone must exactly match your Google Business Profile. “123 Main St” in schema and “123 Main Street” in GBP creates an inconsistency that weakens trust signals.

2. Outdated Hours

Schema with wrong business hours creates a poor user experience and a trust violation. Update schema hours whenever you change your schedule, including holidays.

3. Missing Geo Coordinates

Many implementations skip latitude and longitude. These coordinates help Google precisely locate your business for proximity-based searches. Get your exact coordinates from Google Maps (right-click on your location).

4. Using @type: “LocalBusiness” When a More Specific Type Exists

If you’re a dentist, use @type: “Dentist” — not “LocalBusiness.” The more specific type enables more specific rich results and better entity matching.

5. Invisible Schema Content

FAQ schema must match visible page content. Adding FAQ schema with answers that don’t appear on the page violates Google’s guidelines and can result in a manual action.

Schema Checklist for Local Businesses

Frequently Asked Questions

Does schema markup directly improve rankings?

Schema markup is a confirmed ranking signal for local search. Google’s John Mueller has stated that structured data helps Google understand page content more confidently, which can improve how pages are ranked. The indirect benefits (rich results, higher CTR, stronger entity recognition) also contribute to better rankings over time.

Can I add schema markup myself or do I need a developer?

You can do it yourself. JSON-LD schema is just a block of code pasted into your page’s HTML. WordPress plugins like Yoast and Rank Math handle basic schema automatically. For custom schema (services, FAQs, multi-location), you’ll need to add JSON-LD blocks manually or use a schema plugin with a visual builder.

How do I know if my schema is working?

Use Google’s Rich Results Test (search.google.com/test/rich-results). Enter your URL and it will show which rich results your page is eligible for, plus any errors or warnings in your structured data. Also check Google Search Console under Enhancements for ongoing schema monitoring.

Is there a limit to how much schema I can add to a page?

No hard limit, but only add schema types that are genuinely relevant to the page content. A homepage might have LocalBusiness + BreadcrumbList. A service page might have Service + FAQPage + BreadcrumbList. Don’t add schema types just to have more structured data — it should always match the actual page content.

Should I use JSON-LD or Microdata for schema?

JSON-LD. Google explicitly recommends JSON-LD as their preferred format. It’s easier to implement (a single script block in the page head or body), easier to maintain (all structured data in one place), and doesn’t interfere with your HTML markup. Microdata still works but is harder to manage and debug.

Ready to move east of position 13?

Start your free trial — no credit card required. See results in 30 days.

Start free trial
LinkedIn Instagram TikTok Facebook Pinterest
E

Chat with East13

Typically replies instantly