Schema markup is code you add to your contractor website that tells Google exactly what your business does, where you operate, and what customers say about you. It gets your search listings enhanced with star ratings, FAQ dropdowns, service details, and business hours. Contractors with schema markup earn higher click-through rates and more calls than competitors without it.
You have probably seen search results on Google where one listing has gold star ratings, business hours, FAQ answers expanding right below it, and service details. The listing next to it has nothing but a blue link and two lines of text. Which one gets the click?
The enhanced listing wins. Every time. And the difference between those two results is schema markup.
Most contractor websites have zero structured data. Their web developer built a site that looks decent to humans, but Google is left guessing what the business does, where it operates, and whether customers trust it. Schema markup removes the guessing. It feeds Google the answers in a format it can read, process, and display directly in search results.
This guide explains what schema markup is, which types matter for home services companies, and how to add it to your website. No developer jargon. Real code examples you can hand to whoever manages your site and say, "Put this on there."
What Is Schema Markup in Plain English?
Schema markup is a set of tags you add to your website's code. Think of it as a translation layer between your website and Google. Your website is written for humans. Schema markup rewrites the important facts in a language search engines understand natively.
Google can read your website and figure out most things on its own. But "figuring it out" leads to mistakes. Is "Summit Heating & Cooling" the business name or a page heading? Is "24/7 Emergency Service" a service offering or a tagline? Is the phone number at the top of the page the main business line or a sales department number?
Schema markup eliminates ambiguity. You tell Google: this is the business name, this is the phone number, these are the services, this is the service area, and these are real customer reviews. Google reads that structured data and trusts it more than it trusts its own guessing.
The technical name is JSON-LD (JavaScript Object Notation for Linked Data). It sits in a <script> tag in your page's HTML. Visitors never see it. Google reads it every time it crawls your site.
Why should contractors care about schema markup?
Because schema markup controls what Google shows next to your listing. Without it, you get a plain blue link. With it, you can get:
- Star ratings pulled from your reviews
- Business hours displayed directly in the result
- FAQ answers expandable below your listing
- Service details listed alongside your site link
- Breadcrumb navigation showing your site structure
- Price ranges for services you offer
These enhancements are called "rich results." Google shows them to searchers because they answer questions faster. Searchers click on them because they look more trustworthy. Data from Google's own documentation shows that rich results earn click-through rates 20 to 30% higher than plain results. For a contractor, that is the difference between your phone ringing and the call going to your competitor.
The 4 Schema Types Every Contractor Needs
Not all schema types matter for home services companies. There are hundreds of schema types in the Schema.org vocabulary. You need 4. Get these right and you cover 90% of what Google looks for on a contractor website.
1. LocalBusiness Schema
This is the foundation. LocalBusiness schema tells Google your company name, address, phone number, service area, business hours, and overall review rating. It is the structured data equivalent of your Google Business Profile, but it lives on your website.
Every contractor website needs LocalBusiness schema on the homepage and contact page. Google cross-references this data with your GBP listing and your citations across the web. When all three match, Google's confidence in your business information increases, and your local rankings benefit.
Here is a complete LocalBusiness schema example for a plumbing company:
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Summit Plumbing Co.",
"image": "https://summitplumbing.com/images/logo.webp",
"url": "https://summitplumbing.com",
"telephone": "+1-555-867-5309",
"email": "[email protected]",
"address": {
"@type": "PostalAddress",
"streetAddress": "1420 Industrial Blvd",
"addressLocality": "Denver",
"addressRegion": "CO",
"postalCode": "80202",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.7392,
"longitude": -104.9903
},
"areaServed": [
{
"@type": "City",
"name": "Denver"
},
{
"@type": "City",
"name": "Aurora"
},
{
"@type": "City",
"name": "Lakewood"
}
],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "07:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Saturday"],
"opens": "08:00",
"closes": "14:00"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "287"
},
"priceRange": "$$"
}
Key details to get right:
- @type: Use the specific subtype for your trade. Plumber, HVACBusiness, Electrician, LandscapingBusiness. Do not use generic "LocalBusiness" when a more specific type exists. Google prefers specificity.
- telephone: Include the country code with a
+1prefix. Use the main business number, not a tracking number. Google matches this against your GBP. - areaServed: List every city your company dispatches to. This reinforces your service area for local search queries.
- aggregateRating: Only include this if your reviews exist on your own website. Google has strict policies against fabricating review markup. If your reviews live only on Google and Yelp, skip this field and let Google pull ratings from your GBP instead.
- openingHoursSpecification: Match your Google Business Profile hours exactly. Mismatches confuse both Google and customers.
2. Service Schema
Service schema tells Google exactly which services you offer, along with descriptions, pricing, and the geographic area each service covers. This is how your search listing can display specific services rather than just your business name.
Add Service schema to every individual service page on your site. If you have separate pages for drain cleaning, water heater installation, and sewer line repair, each page gets its own Service schema.
Here is a Service schema example:
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Drain Cleaning",
"name": "Professional Drain Cleaning in Denver",
"description": "Same-day drain cleaning for kitchen drains, bathroom drains, and main sewer lines. Camera inspection included with every service call.",
"provider": {
"@type": "Plumber",
"name": "Summit Plumbing Co.",
"url": "https://summitplumbing.com"
},
"areaServed": {
"@type": "City",
"name": "Denver"
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "149",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "149",
"priceCurrency": "USD",
"unitText": "starting price"
}
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Drain Cleaning Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Kitchen Drain Cleaning"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Main Sewer Line Cleaning"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Hydro Jetting"
}
}
]
}
}
Why this matters: When a homeowner searches "drain cleaning Denver," Google can pull your service name, starting price, and sub-services directly from this markup. That extra detail makes your search listing stand out against competitors who show nothing but a page title.
If you already have dedicated service pages set up (and if you followed our home services SEO checklist, you do), adding Service schema to each page is straightforward. One schema block per service page.
3. FAQPage Schema
FAQPage schema tells Google that your page contains question-and-answer content. When Google trusts your FAQ markup, it can display your answers as expandable dropdowns directly in search results. Those FAQ rich results take up more visual space in search results, pushing competitors further down the page.
Every contractor website should have FAQ sections on service pages, vertical pages, and blog posts. The FAQ schema wraps around those Q&A pairs and signals to Google that this content is structured, reliable, and ready for display.
FAQPage schema follows a simple structure. Each question gets its own object with a name field (the question) and an acceptedAnswer field (the answer). Google's documentation requires that the answer be visible on the page, not hidden behind JavaScript or locked behind a login. Your FAQ text on the page must match the text in your schema exactly.
The full JSON-LD example for FAQPage schema appears at the bottom of this post with the FAQ section. Use that as your template.
Best practices for FAQ schema on contractor sites:
- Write questions the way homeowners ask them. "How much does AC repair cost?" beats "AC Repair Pricing Information."
- Keep answers between 40 and 80 words. Long answers get truncated in rich results.
- Include 4 to 8 Q&A pairs per page. More than 8 dilutes the signal.
- Do not reuse the same FAQ across multiple pages. Each page should have unique questions relevant to that specific service or topic.
4. Review Schema (AggregateRating)
Review schema displays star ratings next to your listing in search results. A row of gold stars next to your business name creates instant trust before the searcher even clicks. Google data shows that listings with star ratings receive significantly more clicks than those without them.
This one comes with a strict rule. Google only allows Review or AggregateRating schema if the reviews are published on the page where the schema appears. You cannot add review schema to your homepage and point it at your Google reviews. That violates Google's structured data guidelines and can earn you a manual penalty.
The right approach: if you display real customer testimonials on your website with the reviewer's name and a star rating, you can add AggregateRating schema to that page. If your reviews only exist on Google, Yelp, and Facebook, do not add review schema to your website. Google already pulls your GBP star rating into local results. Let it do its job.
How Schema Markup Gets You Rich Results
Adding schema markup to your site does not directly boost your ranking position. Google has stated this clearly. But it does increase how much space your listing occupies in search results, and it increases the click-through rate of your listing.
Here is how that plays out in practice.
Rich results attract more clicks
A plain search result shows a title tag and meta description. That is 2 lines of text. A rich result can show your title, meta description, star rating, business hours, FAQ dropdowns, and service details. That is 5 to 8 lines of visual content. More visual space means more attention. More attention means more clicks. More clicks means more calls.
Higher CTR sends positive ranking signals
When your listing gets a higher click-through rate than the results around it, Google interprets that as a signal that your listing is the best answer for that query. Over time, this behavioral signal can influence your ranking position indirectly. You rank at position 4. Your rich result gets clicked more than position 3. Google promotes your listing because searchers prefer it.
FAQ rich results capture voice search answers
When Google displays your FAQ schema as a rich result, it also becomes a candidate for voice search answers and AI Overview citations. A homeowner asking Google Assistant "how much does drain cleaning cost in Denver" can hear your FAQ answer read aloud. Your business name gets mentioned as the source. That is brand awareness you cannot buy with ads.
This connects directly to answer engine strategy. We cover how home service companies show up in AI search results in our SEO service overview. Schema markup is one of the foundational elements.
Step-by-Step: Adding Schema to Your Contractor Website
You do not need to be a developer to add schema markup. You need to understand what goes where, and then hand the code to whoever manages your site. Here is the process.
Step 1: Audit your current schema
Before adding anything, check what you already have. Go to Google's Rich Results Test. Enter your homepage URL. Google will scan the page and show you every schema type it found.
If the result says "no structured data detected," you are starting from zero. That is fine. Most contractor websites have no schema at all. If it finds some schema but shows errors or warnings, you need to fix those before adding more.
Step 2: Add LocalBusiness schema to your homepage
Copy the LocalBusiness JSON-LD example from earlier in this post. Replace every field with your actual business information. Paste the completed <script type="application/ld+json"> block into your homepage HTML, right before the closing </body> tag.
Key fields to customize:
- @type: Use your trade-specific type (Plumber, HVACBusiness, Electrician, Roofer, LandscapingBusiness)
- name: Your exact business name as it appears on your Google Business Profile
- telephone: Your main business phone with
+1country code - address: Your verified business address, matching your GBP listing exactly
- areaServed: Every city and town your company serves
- openingHoursSpecification: Your real business hours
Step 3: Add Service schema to each service page
Your website should have a dedicated page for every service you offer. If it does not, that is the first thing to fix. Our guide on contractor website design that gets calls explains why dedicated service pages convert better and rank higher.
For each service page, create a Service schema block with the service type, description, provider information, service area, and pricing (if you publish starting prices). Paste it into the page's HTML.
One schema block per service page. Do not stack 8 Service schemas on a single "Services" overview page. Google wants to see one primary schema type per page, matching the page's content.
Step 4: Add FAQPage schema to pages with FAQ sections
If you have FAQ sections on your service pages and blog posts (and you should), add FAQPage schema to each page. The questions and answers in your schema must match the visible FAQ content on the page word for word. Google checks for this. Mismatches trigger "content mismatch" errors in Search Console.
Step 5: Add BreadcrumbList schema to every page
BreadcrumbList schema tells Google how your pages connect to each other in your site hierarchy. It produces breadcrumb navigation in search results (e.g., "Home > Services > Drain Cleaning"). This improves user experience and gives Google a clear picture of your site structure.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://summitplumbing.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Services",
"item": "https://summitplumbing.com/services/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Drain Cleaning",
"item": "https://summitplumbing.com/services/drain-cleaning/"
}
]
}
Step 6: Validate every page after adding schema
After you add schema to a page, validate it immediately. Use Google's Rich Results Test to check the live page. Fix every error. Warnings are lower priority, but errors mean Google will ignore your markup entirely.
Common errors and their fixes:
- "Missing field: name": Your schema is missing a required property. Add it.
- "Invalid value for field: telephone": Format your phone number as
+1-555-555-5555. - "Markup does not match page content": Your FAQ schema text does not match the visible text on the page. Update one to match the other.
- "Review snippet not eligible": You added AggregateRating schema but the reviews are not visible on the page. Either display the reviews or remove the schema.
Schema Mistakes That Hurt Contractor Websites
I audit contractor websites regularly. These are the schema mistakes I see over and over.
Copying schema from another business
You found a competitor's schema markup, changed the business name, and pasted it on your site. The problem: the address, geo coordinates, service area, and phone number are still wrong or mismatched. Google sees the inconsistency and ignores the markup. Worse, it can confuse Google about your actual business location.
Always build your schema from scratch with your real business data. Use the examples in this post as templates, not copy-paste targets.
Adding review schema without on-page reviews
This is the most common violation. A web developer adds AggregateRating schema claiming 4.9 stars from 250 reviews, but the page has no visible reviews. Google flags this as a structured data policy violation. The penalty is not just removing the rich result. Google may distrust your schema across your entire domain.
If you want star ratings in search results, either display real reviews on your website or rely on Google pulling your GBP rating automatically.
Using generic types instead of specific ones
Schema.org defines specific business types for contractors. Using LocalBusiness when HVACBusiness exists tells Google less about your company. Using Organization when LocalBusiness exists is even worse. Always pick the most specific type that applies to your trade.
Here are the correct types for common home service trades:
| Trade | Correct Schema @type |
|---|---|
| HVAC | HVACBusiness |
| Plumbing | Plumber |
| Electrical | Electrician |
| Roofing | RoofingContractor |
| Landscaping | LandscapingBusiness |
| General Contractor | GeneralContractor |
| Locksmith | Locksmith |
| Pest Control | PestControlService |
Neglecting schema after initial setup
Schema markup is not a one-time task. When you change your business hours, add a service, open a new location, or update your phone number, your schema needs to reflect those changes. Stale schema data creates mismatches between your website, your GBP, and your citations. Those mismatches erode Google's trust in your business information.
Audit your schema quarterly. Run every key page through the Rich Results Test. Update any fields that have changed.
Not sure if your website has schema markup or if it is set up correctly? Our free growth audit includes a full structured data review. We check every page, flag errors, and show you exactly what rich results you are missing.
Get Your Free Growth AuditWhat Results to Expect After Adding Schema
Schema markup is not a magic ranking boost. But the impact on visibility and click-through rate is measurable and consistent. Here is what contractors typically see after proper schema implementation.
Within 2 to 4 weeks: Google re-crawls your pages and begins processing the new structured data. You will see the schema validated in Google Search Console under the "Enhancements" section. Rich result eligibility appears within this window.
Within 1 to 3 months: FAQ rich results begin appearing for pages with FAQPage schema. Click-through rates on those pages increase by 15 to 30%, based on data from our home services SEO campaigns. More clicks translate directly to more phone calls.
Within 3 to 6 months: The compounding effect kicks in. Higher CTR sends positive behavioral signals. Pages with rich results hold their rankings more consistently. Your overall search presence looks more professional and authoritative than competitors who still show plain blue links.
Schema markup is one piece of a complete SEO strategy. Pair it with a strong Google Business Profile, consistent content publishing, and a review generation system, and you build a search presence that keeps your schedule full. Our home services SEO checklist covers all 15 steps.