Blog · Schema & Structured Data
Schema Markup Cheat Sheet for Local Service Businesses
Schema markup is the single highest-leverage SEO change a local service business can make in a weekend. It removes guesswork. AI engines and Google read facts instead of inferring from prose. See why ChatGPT recommends your competitor for the broader pattern.
This is the working cheat sheet. Concrete examples for the seven schema types every local service business should ship.
1. Organization (foundation)
This goes in the head of every page on your site. It identifies your business as an entity Google and AI engines can build a knowledge graph entry for.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://yourbusiness.com/#organization",
"name": "North Texas Cooling",
"legalName": "North Texas Cooling LLC",
"alternateName": ["NTX Cooling", "North Texas Cooling Co."],
"url": "https://yourbusiness.com/",
"logo": "https://yourbusiness.com/logo.png",
"email": "info@yourbusiness.com",
"telephone": "+1-972-555-0100",
"foundingDate": "2018-03-01",
"founder": { "@type": "Person", "name": "Jane Smith" },
"areaServed": [
{ "@type": "City", "name": "Plano" },
{ "@type": "City", "name": "Frisco" },
{ "@type": "City", "name": "McKinney" }
],
"sameAs": [
"https://www.facebook.com/northtexascooling",
"https://www.linkedin.com/company/north-texas-cooling",
"https://www.bbb.org/us/tx/plano/profile/heating-and-air-conditioning/north-texas-cooling"
]
}
The sameAs array is the cheapest entity disambiguation signal you can ship. Add every authoritative profile that lists the business. AI engines weigh this heavily.
2. LocalBusiness (or its sub-types)
LocalBusiness has dozens of sub-types: Plumber, Dentist, AutoRepair, MedicalBusiness, AttorneyService, Electrician. Use the most specific one that applies.
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://yourbusiness.com/#localbusiness",
"name": "North Texas Plumbing",
"image": "https://yourbusiness.com/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Plano",
"addressRegion": "TX",
"postalCode": "75024",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.0198,
"longitude": -96.6989
},
"telephone": "+1-972-555-0100",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "19:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday"],
"opens": "08:00",
"closes": "16:00"
}
],
"priceRange": "$$"
}
Note: priceRange accepts $, $$, $$$, $$$$ as informal indicators. Do not put dollar amounts in this field.
3. Service (one per offering)
If your site has separate pages for each service, ship a Service schema on each.
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://yourbusiness.com/services/heat-pump-installation/#service",
"name": "Heat Pump Installation",
"description": "Professional heat pump installation for residential and small commercial in Plano, Frisco, and McKinney.",
"provider": { "@id": "https://yourbusiness.com/#organization" },
"areaServed": [
{ "@type": "City", "name": "Plano" },
{ "@type": "City", "name": "Frisco" }
],
"audience": {
"@type": "BusinessAudience",
"audienceType": "Homeowners and small commercial property owners"
},
"offers": {
"@type": "Offer",
"priceSpecification": {
"@type": "PriceSpecification",
"minPrice": "5500",
"maxPrice": "12000",
"priceCurrency": "USD"
}
}
}
Adding a priceSpecification is unusual in local services because most operators do not publish ranges. Operators who do tend to win the AI-search comparison queries because the model can cite an actual number.
4. FAQPage with Speakable
If you have an FAQ section, mark it up. Adding the SpeakableSpecification makes the answers eligible for voice-assistant readout.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"speakable": {
"@type": "SpeakableSpecification",
"cssSelector": ["#faq h3", "#faq p.answer"]
},
"mainEntity": [
{
"@type": "Question",
"name": "Do you service heat pumps in Plano?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. North Texas Cooling installs and services Trane, Carrier, and Lennox heat pumps across Plano, Frisco, and McKinney with same-week appointments."
}
}
]
}
The cssSelector tells voice assistants which elements on the page to read aloud. Keep selectors specific to the FAQ section, not the entire page.
5. BreadcrumbList
Replaces the URL display in search results with the navigational hierarchy. Improves clickthrough.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://yourbusiness.com/" },
{ "@type": "ListItem", "position": 2, "name": "Services", "item": "https://yourbusiness.com/services/" },
{ "@type": "ListItem", "position": 3, "name": "Heat Pump Installation", "item": "https://yourbusiness.com/services/heat-pump-installation/" }
]
}
6. Person (for any named professional on the team)
For any attorney, dentist, doctor, agent, or named senior technician, ship Person schema. This is critical for E-E-A-T-sensitive industries.
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://yourbusiness.com/team/jane-smith/#person",
"name": "Jane Smith",
"jobTitle": "Founder and Master Plumber",
"image": "https://yourbusiness.com/team/jane-smith.jpg",
"url": "https://yourbusiness.com/team/jane-smith/",
"worksFor": { "@id": "https://yourbusiness.com/#organization" },
"alumniOf": "Texas State Technical College",
"knowsAbout": [
"Residential plumbing",
"Commercial backflow prevention",
"Tankless water heater installation"
],
"hasCredential": [
{
"@type": "EducationalOccupationalCredential",
"name": "Texas Master Plumber License",
"credentialCategory": "license"
}
],
"sameAs": [
"https://www.linkedin.com/in/jane-smith-plumber"
]
}
Yes, even for a master plumber. The schema is industry-agnostic and AI engines weight credentialed individuals heavily across all categories.
7. AggregateRating (only when honest and third-party-sourced)
If you have a Google rating with reviews, you can mark it up. Caution: Google penalizes self-applied AggregateRating not backed by a third-party platform.
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://yourbusiness.com/#localbusiness",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "247"
}
}
Make this match the rating displayed on your GBP exactly. Mismatches trigger penalties.
How to ship this
Three steps:
- Add the Organization schema to your site-wide head. One block, every page.
- Add LocalBusiness schema (subtyped to your trade) on the homepage and your About page.
- Add Service, FAQPage, BreadcrumbList, and Person schemas on the specific pages where they apply.
Use Google’s Rich Results Test to validate each block before shipping. Schema mistakes are silent: invalid markup just gets ignored, no error message.
What this does not cover
This is the universe. Knowing which schema types are missing on your specific site, which fields are wrong, and where competitors are using schema you are not is the audit deliverable. The Backlink Gap Snapshot in the audit names competitor schema patterns; the GBP Scorecard cross-references your schema against the GBP truth.
Want it diagnosed? Five business days, flat fee. Book a 10-minute fit call. Related: the AI search visibility guide, the GBP audit checklist.
The short version
Seven schema types ship with every local service business in 2026: Organization, LocalBusiness (sub-typed), Service per offering, FAQPage with Speakable, BreadcrumbList, Person for named professionals, AggregateRating when honest. JSON-LD only. Validate before shipping. The work takes a weekend; the SEO and AI-citation lift compounds for years.