Schema markup tells Google what your local business actually is. Without it, you're a webpage. With it, you're a verified business entity that Google can match to local searches, voice queries, and AI overviews. Here's exactly what to include for each business type, with copy-paste JSON-LD templates that pass validation on the first try.
1. Why LocalBusiness schema matters more than ever
In 2026 schema markup is no longer optional for local businesses. Three trends made it essential:
- AI overviews pull from structured data first. When Google's AI summarises a local business, it leans heavily on schema fields rather than scraping page text.
- Voice and assistant queries depend on schema. "Hey Google, find a dentist in Austin open now" matches against schema-defined opening hours, location, and business type.
- Rich results increase CTR. Properly marked-up pages get FAQ accordions, star ratings, hours, and phone-tap actions in mobile search — visible boost over plain listings.
2. Choose the right schema type
"LocalBusiness" is the parent type. Use a more specific subtype when one fits — Google ranks specific over general. Common subtypes:
- MedicalBusiness → Dentist, Physician, Optician, Pharmacy
- LegalService → Attorney, Notary
- RealEstateAgent → For realtors
- HomeAndConstructionBusiness → Contractor, Plumber, RoofingContractor, Electrician, HVACBusiness
- FoodEstablishment → Restaurant, Bakery, CafeOrCoffeeShop, BarOrPub
- HealthAndBeautyBusiness → BeautySalon, HairSalon, NailSalon, DaySpa
- AutomotiveBusiness → AutoRepair, AutoBodyShop, AutoDealer
- LodgingBusiness → Hotel, BedAndBreakfast, Resort
- ProfessionalService → Catch-all for services not above (web design, marketing agency, accountant, financial planner)
3. Core fields every local business needs
The minimum viable LocalBusiness schema has these properties. Skip any of them and Google's confidence drops:
- @type — specific subtype (Dentist, RoofingContractor, etc.)
- name — exact business name as on Google Business Profile
- image — primary business photo URL (logo or storefront)
- @id — canonical URL (your homepage with #organization)
- url — homepage URL
- telephone — international format (+1 415 555 0192)
- address — PostalAddress with street, city, region, postalCode, country
- geo — GeoCoordinates with latitude and longitude
- openingHoursSpecification — array of days and hours
- priceRange — $, $$, $$$, $$$$
- sameAs — array of social/profile URLs (Facebook, LinkedIn, Yelp, etc.)
- areaServed — for service-area businesses without a customer-facing address
4. Copy-paste JSON-LD templates
Template A: Walk-in business with a physical address (dentist, restaurant, salon)
Template B: Service-area business (plumber, electrician, mobile detailer)
Use areaServed instead of an exposed address. Google still wants the address but you can mark it private for service-area businesses.
5. Multi-location pattern
If you have multiple locations, don't try to cram them into one schema block. Each location gets its own page with its own LocalBusiness schema. Then on your main "Locations" page, link to each location URL. Pair this with separate Google Business Profiles per location.
/locations/ → list of all locations with internal links
/locations/houston/ → full schema for Houston location
/locations/austin/ → full schema for Austin location
Each location page has unique schema, unique address, unique phone, and ideally unique reviews.
6. Review and aggregateRating schema
If you have legitimate reviews, you can add aggregateRating to your schema. Caveat: Google requires the reviews be displayed on the page itself, and rules tightened in 2024 — fake or self-attributed reviews get penalised hard. Only use this if you have at least 5 real reviews from actual customers visible on the page.
Better practice: pull reviews directly from Google Business Profile via API rather than self-attesting in schema.
7. How to install on WordPress
Three options, in order of preference:
- Rank Math (free). Settings → Titles & Meta → Local SEO. Fill in business type, address, hours, geo. Rank Math generates and injects validated schema automatically. Why we recommend Rank Math over Yoast.
- Schema Pro plugin. Visual builder with templates for 13+ business types. $79/yr. Solid for non-technical clients.
- Manual JSON-LD via Code Snippets plugin. Paste the script into a code snippet, set to run in
wp_head. Fully under your control. Best for developers.
8. Validate before deploying
Two free Google validators — run both:
- Rich Results Test — checks if your schema is eligible for rich results.
- Schema.org Validator — strict syntax validation. Catches the typos.
Both should return zero errors before you ship. Warnings are okay but should be reviewed.
9. Common mistakes that break the schema
- Mixing data formats. JSON-LD is the modern standard. Don't mix it with microdata or RDFa on the same page — Google can get confused.
- Wrong country code in addressCountry. Use ISO 3166-1 alpha-2 codes ("US", "NG", "GB"), not full country names.
- Phone number not in international format. "+234 816 6457230" works. "08166457230" doesn't (Google can't always infer country).
- Schema doesn't match visible page content. If your schema says you're open 24/7 but the page footer says "9am–5pm", Google flags inconsistency. Schema must match visible content.
- Missing geo coordinates. Latitude and longitude help Google place you on the map and improve "near me" matching. Use Google Maps to get exact coords.
- Multiple LocalBusiness blocks on the same page. One per page. If you must list multiple locations, give each its own page.
Day 1 — install plugin, fill in core fields. Day 2 — validate with Rich Results Test, fix errors. Day 3 — submit URL in Search Console for re-indexing. 14–30 days — Google starts surfacing rich results in SERPs. 60 days — measurable CTR improvement on local queries.