Schema markup for local business is one of the most underused tools in local SEO. Most small business owners have never touched it. Some have heard of it but assume it requires a developer. A few have a plugin that claims to handle it — but generates bare-minimum output that misses the types that actually matter for home services.
This guide covers what structured data is, which schema.org types a roofing company, HVAC contractor, plumber, or remodeler actually needs, how each one earns you visible rich results in search, and how AI engines like ChatGPT and Perplexity use structured data when deciding which businesses to cite. By the end, you'll know exactly what to implement and how to check whether your current markup is doing anything.
What structured data actually is (and isn't)
Structured data is machine-readable code — almost always JSON-LD these days — that you embed in a page's HTML to tell search engines and AI crawlers exactly what a page is about. It doesn't change what visitors see. It's metadata in a format that Google, Bing, and AI indexers can parse without guessing.
The schema.org vocabulary is the shared standard. It's maintained by a consortium that includes Google, Bing, Yahoo, and Yandex. When you mark up your phone number as a telephone property inside a LocalBusiness type, every crawler that speaks schema.org understands what that string means — not just that digits exist on the page, but that they represent a business phone number.
Without structured data, Google extracts what it can. With it, you hand Google verified facts in a format it prefers. That's the whole pitch.
Why schema markup matters more in 2026
AI-generated answers in search results pull from crawlable structured data. When a user asks 'who does emergency HVAC repair in Escondido?' and gets a sourced answer, the businesses cited are almost always ones that have clean, complete structured data. Crawlers don't guess — they read what's marked up.
Rich results — star ratings in search listings, FAQ dropdowns, breadcrumb trails — also require the right schema types. A roofing company with AggregateRating markup showing 4.8 stars directly in the search result gets more clicks than the same company without it. That's not a theory; it's a documented behavior in Google's Search Central documentation.
You can check how AI engines read your site right now with our GEO Analyzer. It shows whether your structured data is visible to AI crawlers, not just to human visitors.
Which schema types a local home-services business needs
LocalBusiness (and its subtypes)
This is the foundation. LocalBusiness tells crawlers your name, address, phone, hours, geo-coordinates, and service area. For home services, you should use the most specific subtype available: HomeAndConstructionBusiness, Plumber, RoofingContractor, Electrician, or HVACBusiness. These are all valid schema.org types that inherit from LocalBusiness.
Key properties to include: name, telephone, address (as a PostalAddress), geo (latitude/longitude), openingHoursSpecification, areaServed (list the cities or regions you cover), url, logo, and image.
Missing areaServed is one of the most common gaps we see on home-services sites. A plumber whose schema only lists a single address but actually covers five ZIP codes is leaving coverage signal on the table.
Service
The Service type lets you mark up each individual service you offer — roofing repair, water heater installation, panel upgrade, whatever your business actually does. Each Service should have a name, description, provider (linking back to your LocalBusiness), and ideally an areaServed and offers block if you have any pricing to share.
This is how AI engines learn that you offer 'emergency roof tarping' as a distinct service, not just that the words appear somewhere on your site.
FAQPage
If you have FAQ content on a page, wrapping it in FAQPage with Question and Answer pairs makes it eligible for FAQ rich results in Google Search — the expandable dropdowns that appear beneath your listing. More importantly, it gives AI engines clean, pre-structured question-and-answer pairs to pull when someone asks a question your FAQ answers.
Every service page that has a FAQ section should carry this markup.
AggregateRating and Review
AggregateRating is what produces the star display in search results. You need a ratingValue, reviewCount, and bestRating. These should reflect your actual verified reviews — don't inflate the count. If you have 34 Google reviews at 4.9, mark up 34 reviews at 4.9.
Individual Review markup (reviewer name, rating, text) adds depth. Not every business publishes full reviews on their own site, and that's fine — even just the aggregate is useful.
BreadcrumbList
BreadcrumbList marks up the navigation hierarchy of a page. It produces breadcrumb trails in search results and helps crawlers understand site structure. For a site with service category pages and individual service pages, this helps Google understand the relationship between them.
Organization
Organization overlaps with LocalBusiness but adds properties like foundingDate, founder, and sameAs (links to your Google Business Profile, Yelp, LinkedIn, Facebook). The sameAs array is particularly useful for entity disambiguation — it tells crawlers that your business on Google Maps is the same entity as your business on your website.
How to implement schema markup
The cleanest method is JSON-LD embedded in the head of each page — a script tag with type application/ld+json containing your markup. That's the format Google prefers.
For a static or single-page-app site, bake the JSON-LD directly into the page template. For WordPress, plugins like Yoast SEO or RankMath generate some basic markup but often miss the Service type and areaServed fields — check what they're actually outputting, not just whether the plugin is active.
At minimum, a roofing company's LocalBusiness block should declare the business type (RoofingContractor), name, telephone, a full PostalAddress, the areaServed cities, and the site URL. Build out from there with Service, FAQPage, and AggregateRating types on the appropriate pages.
How to validate your schema markup
Use the Schema Validator to check any URL on your site. It surfaces missing required properties, unsupported types, and structural errors — the kinds of issues that prevent rich results from appearing.
Google also provides the Rich Results Test in Search Central. Paste any URL and it shows which rich result types your page is eligible for based on the current markup.
Run both. The Rich Results Test catches Google-specific eligibility issues; the schema validator catches structural problems that might not block Google but will confuse other crawlers.
Common mistakes that kill your rich results
- Marking up content that isn't visible on the page (Google calls this spammy and can penalize it)
- Using outdated types like Product for services instead of Service
- Missing reviewCount from your AggregateRating block
- Embedding markup via JavaScript that renders too late for crawlers to read
- Copy-pasting boilerplate with the wrong business name or address
Frequently asked questions
Does schema markup directly improve my Google rankings?
Not directly in the way a backlink does. Schema markup makes you eligible for rich results, which improves click-through rates. It also helps AI engines understand and cite your business accurately. Better CTR and citation coverage both contribute to stronger performance over time.
Do I need schema markup on every page?
Your homepage and each service page should carry at minimum a LocalBusiness block. Service pages should also have Service markup. Any page with FAQ content should have FAQPage. Blog posts benefit from Article markup. Pages that have no structured content don't need anything forced onto them.
Will a schema plugin handle this for me?
Partially. Most WordPress schema plugins cover LocalBusiness basics and blog Article markup. They typically don't generate Service types with areaServed, and their FAQ markup requires manual input. Audit what your plugin actually outputs before assuming it's complete.
How long does it take for rich results to appear after adding schema?
Google typically processes new structured data within a few days to a few weeks, depending on how frequently your site is crawled. You can use Google Search Console's URL Inspection tool to request indexing after adding markup.
Getting schema markup right isn't a one-afternoon project if your site has dozens of service pages. If you'd rather have someone audit what you have and fix the gaps, book a free audit — we'll show you exactly what's missing and what it's costing you in rich result eligibility.