Schema Markup for Contractor Websites: 4 Types That Win Rich Results and Rankings
Most contractor websites send Google a wall of text and hope the algorithm figures out the rest. Schema markup is the alternative: JSON-LD code placed in your HTML that tells Google exactly what your business does, what services you offer, and where you operate. Without it, Google has to infer all of that from your page copy, and it frequently gets it wrong.
Fewer than 30% of small business websites have structured data implemented correctly. Among home service contractors, the number is lower. Implementing schema markup today puts you ahead of most local competitors before the search algorithm makes a single judgment call about relevance.
What Schema Markup Does
Schema markup is JSON-LD code placed in the <head> of your HTML pages. It uses vocabulary from schema.org to describe entities: your business, your services, your reviews, your location. When Google reads that code, it does not have to guess what your business is. It knows.
The tangible results:
- Rich results: Star ratings, review counts, and enhanced listings that appear directly in search. Pages with structured data earn a 25% higher click-through rate than identical pages without it.
- Map Pack reinforcement: LocalBusiness schema sends the same relevance signals as your Google Business Profile. Consistency between both sources strengthens your position in the local pack.
- AI citation readiness: ChatGPT, Perplexity, and Google AI Overviews parse structured data to verify facts before citing sources. A contractor with clean schema is easier for AI to recommend than one who relies on prose alone.
Use JSON-LD exclusively. It does not modify your visible HTML, it is Google’s recommended format, and it is the easiest to maintain. Microdata and RDFa are legacy approaches that Google no longer encourages.
The Four Schema Types Contractors Need
1. LocalBusiness (Homepage and Contact Page)
LocalBusiness schema tells Google the most critical facts about your business: what you are, where you are, and how to reach you. For home service contractors, use the most specific @type available rather than the generic LocalBusiness:
| Trade | Schema @type |
|---|---|
| HVAC | HVACBusiness |
| Plumbing | Plumber |
| Electrical | Electrician |
| Roofing | RoofingContractor |
| Landscaping | LandscapingBusiness |
| Cleaning | HouseCleaning |
| General Contractor | GeneralContractor |
The fields Google uses most heavily for local ranking:
- name: Your exact business name, matching your Google Business Profile exactly.
- address: Full PostalAddress with street, city, state, and zip. Must match your GBP.
- telephone: Your main business number, formatted identically to your GBP and website.
- openingHoursSpecification: Exact hours per day of the week. If you offer 24/7 emergency service, note that availability in a description field within the hours specification.
- areaServed: A list of specific cities and zip codes you serve. List 8 to 15 cities. Google matches these against the searcher’s location. "Greater Dallas area" is not a city. "Plano, TX" is.
- aggregateRating: Your average star rating and review count. Keep this current. Stale ratings older than 90 days may be deprioritized in rich results.
Add this block to the <head> of your homepage and contact page. One well-maintained LocalBusiness block outperforms several inconsistent ones scattered across multiple pages.
2. Service Schema (Each Service Page)
Service schema explicitly defines individual services on each service page. Without it, Google infers from your text what the page is about. With it, Google knows it is a service, offered by your specific business, covering a defined area.
The fields that matter on a contractor service page:
- @type: "Service"
- name: The specific service name: "AC Repair," "Furnace Installation," "Drain Cleaning."
- description: One to two sentences describing what the service includes, written in plain language that matches how homeowners describe the problem, not trade jargon.
- provider: A nested reference back to your LocalBusiness schema using the @id field.
- areaServed: The same city list from your LocalBusiness schema.
- serviceType: A short category label: "HVAC Repair," "Plumbing Service."
One Service block per page, in the <head>. If you have six service pages, you have six Service blocks, each pointing back to your central LocalBusiness block via the provider field. This creates a structured relationship between your entity and your offerings that Google uses to match specific queries to specific pages.
3. FAQPage Schema (Service Pages)
Google reduced FAQ rich results in search in 2023. You will not reliably see FAQ dropdowns in Google search results from FAQPage schema today. That is not the reason to add it now.
FAQPage schema structures your Q&A content in a format that AI engines can extract and quote directly. When ChatGPT or Google AI Overviews answer a question like "How much does AC repair cost in Austin?" the sources they prefer are pages where the answer is clearly marked up as a question and an authoritative response. An FAQ section with FAQPage schema is a citable unit. An FAQ section without it is just text.
Add FAQPage schema to the bottom of each service page, matching the visible Q&A section already on the page. The schema must reflect content visible to users. Google penalizes markup that describes content not present on the page. For each question, include a Question object with an acceptedAnswer containing the full answer text.
4. BreadcrumbList (All Interior Pages)
Breadcrumb schema is the lowest-effort, highest-reliability structured data you can add. It tells Google your site structure and appears in search results as a navigational path below your page title, replacing the raw URL.
Pages with breadcrumb markup display cleaner search results that improve click-through rate modestly but reliably. Add BreadcrumbList schema to every interior page. The implementation is five lines of JSON-LD and does not require updating unless your URL structure changes.
How to Check What You Have Now
Go to Google’s Rich Results Test at search.google.com/test/rich-results. Enter any page URL and run the analysis. The tool shows which schema types it detected, which fields are valid, and which are missing or incorrect. It also previews how enhanced results would appear in search if all requirements are met.
The most common failures in contractor schema audits:
- Missing telephone field: Required for LocalBusiness rich results and Map Pack signal reinforcement.
- Incomplete areaServed: A single city name instead of the full list of cities you actually serve. This undersells your coverage and reduces query matching across your market.
- Stale aggregateRating: A review count that does not match your current GBP total. Update this every 60 to 90 days.
- Schema that contradicts page content: If your schema says you are open Monday through Friday and your contact page says "24/7 availability," Google treats the mismatch as a trust signal failure and may suppress the rich result.
Three Steps to Start This Week
- Audit your current state. Run your homepage and one service page through Google’s Rich Results Test. If the tool reports no structured data detected, you are starting from zero. That is fixable in an afternoon.
- Build a LocalBusiness block for your homepage. Schema.dev or Google’s Structured Data Markup Helper generates JSON-LD from a simple form. Fill in every field from the list above, paste the output into your homepage
<head>, and retest. - Add Service and FAQPage blocks to your top three service pages. Use your LocalBusiness block’s @id as the provider reference. Add a five-question FAQPage block that mirrors your visible FAQ content.
Schema markup is a one-time implementation with periodic maintenance. Once the four types are in place and validated, they work continuously. Every new page you add gets a Service block and a BreadcrumbList. Your LocalBusiness block gets an updated aggregateRating each quarter. The maintenance takes under 10 minutes. The ranking benefit runs indefinitely.