Local Business Schema Markup: Copy-Paste JSON-LD Guide
Last updated: August 26, 2026
Local business schema markup is JSON-LD code you add to a page that tells Google exactly what your business is—name, address, phone, hours, service area, and services—so it can display and rank you accurately in local search. The recommended format is JSON-LD placed in the page's <head> or <body>. This guide gives you copy-paste templates for LocalBusiness, Service, and FAQ schema, plus where to put them and how to validate.
Key takeaways
- Schema markup is structured data that removes ambiguity—it tells search engines what your page means, not just what it says.
- Google recommends JSON-LD; use the most specific type (e.g.,
Plumber,HVACBusiness) under theLocalBusinessumbrella. - The essentials:
name,address,telephone,openingHours,areaServed,url, andgeo. - Pair
LocalBusinesswithServiceschema on service pages andFAQPageon any page with a FAQ. - Validate with Google's Rich Results Test and Schema.org's validator; then keep NAP consistent everywhere.
What local business schema markup is (and why it matters)
Schema.org markup is a shared vocabulary that search engines use to understand web content. Local business schema markup applies that vocabulary to your business details so Google can parse them unambiguously—instead of guessing your phone number from page text, it reads it from a labeled field.
Why bother? Structured data helps you:
- Show up correctly in local search and knowledge panels (accurate name, hours, phone).
- Qualify for rich results (FAQ dropdowns, review stars where eligible).
- Feed AI answers—LLM-powered search extracts structured data heavily.
Schema doesn't guarantee rankings, but it removes ambiguity and improves eligibility—a core item on any on-page SEO checklist for local websites.
JSON-LD vs. Microdata: use JSON-LD
There are three formats (JSON-LD, Microdata, RDFa). Use JSON-LD. Google explicitly recommends it, it's a single block you drop in the page (no weaving attributes through your HTML), and it's the easiest to maintain. Every example below is JSON-LD.
The core LocalBusiness template (copy-paste)
Start here. Replace the values with your business's real details. Use the most specific type available—Plumber, Electrician, HVACBusiness, RoofingContractor, PestControlBusiness—falling back to LocalBusiness if none fits.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Acme Plumbing Co.",
"url": "https://acmeplumbing.com",
"telephone": "+1-602-555-0143",
"image": "https://acmeplumbing.com/storefront.jpg",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Phoenix",
"addressRegion": "AZ",
"postalCode": "85001",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.4484,
"longitude": -112.0740
},
"areaServed": [
{ "@type": "City", "name": "Phoenix" },
{ "@type": "City", "name": "Scottsdale" },
{ "@type": "City", "name": "Tempe" }
],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "18:00"
}
],
"sameAs": [
"https://www.facebook.com/acmeplumbing",
"https://www.yelp.com/biz/acme-plumbing-phoenix"
]
}
</script>
Field notes:
@type— the most specific match. A service-area business with no storefront can omitaddressstreet details but should still setareaServed.areaServed— list the cities you cover; this reinforces your location relevance.geo— latitude/longitude of your location (or primary service area).sameAs— links to your profiles; helps entity disambiguation.- NAP consistency — the name, address, and phone here must match your site and every listing exactly.
Service schema for service pages
On each service page, add Service schema so Google connects the specific offering to your business and area.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Water Heater Repair",
"provider": {
"@type": "Plumber",
"name": "Acme Plumbing Co.",
"telephone": "+1-602-555-0143"
},
"areaServed": { "@type": "City", "name": "Phoenix" },
"url": "https://acmeplumbing.com/water-heater-repair"
}
</script>
Do this per service, and pair it with your location pages so the service × city relationship is explicit to search engines.
FAQ schema (for any page with an FAQ)
If a page has a genuine FAQ, mark it up to qualify for FAQ rich results and to feed AI answer engines clean, standalone Q&As.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do you offer emergency plumbing?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes—we offer 24/7 emergency plumbing across Phoenix, Scottsdale, and Tempe."
}
}
]
}
</script>
Only mark up questions and answers actually visible on the page—marking up hidden content violates Google's guidelines.
Which schema goes where
| Page type | Schema to add |
|---|---|
| Homepage | LocalBusiness (most specific subtype) |
| Service page | Service + optional LocalBusiness reference |
| Location/city page | LocalBusiness with that city in areaServed |
| Any page with an FAQ | FAQPage |
| Blog post | BlogPosting + BreadcrumbList (+ FAQPage if it has one) |
| All pages | BreadcrumbList for navigation clarity |
Where to place it and how to validate
Placement: put each JSON-LD <script> block in the page's <head> or anywhere in the <body>—both are valid for JSON-LD. One block per schema type; multiple blocks per page are fine.
Validate before you trust it:
- Google Rich Results Test (search.google.com/test/rich-results) — confirms eligibility for rich results.
- Schema.org validator (validator.schema.org) — checks the markup is well-formed.
Fix any errors, then keep your NAP identical across the site and all listings—inconsistent details undermine the whole point.
Don't hand-code this per page. RankLocal generates correct, validated
LocalBusiness,Service,FAQPage, andBreadcrumbListJSON-LD on every page of the sites it builds—homepage, each service, each city—so the structured-data layer is done for you, at scale.
Common schema markup mistakes
- Using generic
LocalBusinesswhen a specific subtype (Electrician,HVACBusiness) exists—be specific. - Marking up content not on the page (fake reviews, hidden FAQs)—a guidelines violation.
- NAP mismatch between schema, page, and listings—confuses entity resolution.
- Invalid JSON (trailing commas, unescaped quotes)—always validate.
- Only marking up the homepage—service and city pages need their own schema too.
- Fabricated
aggregateRating—never invent review stars; only mark up real, on-page reviews.
Frequently asked questions
What is local business schema markup?
It's structured data (in JSON-LD) added to your web pages that tells search engines your business's name, address, phone, hours, service area, and services in a labeled, machine-readable format. It removes ambiguity so Google can display and rank your business accurately in local search and rich results.
Does schema markup improve rankings?
Schema isn't a direct ranking factor, but it improves how accurately search engines understand your business and makes you eligible for rich results and AI citations—both of which drive clicks. It's best understood as a clarity and eligibility booster that supports rankings rather than causing them outright.
Where do I put the JSON-LD code?
Inside a <script type="application/ld+json"> block, placed in the page's <head> or <body>—both are valid for JSON-LD. Use one block per schema type, and you can include several blocks on a single page (for example, LocalBusiness plus FAQPage).
What's the best schema type for a local business?
The most specific type that matches your business, drawn from the LocalBusiness hierarchy—Plumber, Electrician, HVACBusiness, RoofingContractor, PestControlBusiness, and so on. If none fits, use LocalBusiness. Specific types give search engines richer context than the generic one.
How do I test my schema markup?
Use Google's Rich Results Test to check eligibility for rich results and the Schema.org validator to confirm the markup is well-formed. Fix any errors they flag, then re-test. After it's live, monitor Google Search Console's enhancement reports for structured-data issues.
The bottom line
Local business schema markup is the clearest signal you can hand a search engine: here's exactly what this business is, where it works, and what it offers. Add LocalBusiness on your homepage and city pages, Service on service pages, and FAQPage wherever you have an FAQ—then validate. Do it across every page and your whole site becomes machine-legible.
Skip the hand-coding. RankLocal builds local sites with correct, validated JSON-LD on every page—homepage, services, and each city—generated automatically. Build your site free and get the structured-data layer done for you.
Build a local website that ranks
RankLocal generates a complete, SEO-optimized local business website, content, location pages, schema, and all, in minutes. No coding required.