TECHNICAL SEO · 2026

Schema markup for contractor websites

Schema won’t make you rank. It makes your business machine-readable — which increasingly decides whether search engines and AI assistants can describe you at all. Here’s what to implement, in order.

Updated July 2026 · Engineered Reach

The short answer

Schema markup is structured data that tells search engines and AI systems exactly what your business is, where it operates, and what it does, in a format they cannot misread. It is not a ranking factor. What it does is remove ambiguity and enable rich results. For contractors the priority order is LocalBusiness on the homepage, Service on each service page, FAQPage on pages with real FAQs, BreadcrumbList for navigation, and Article on guides. Never mark up content that is not visible on the page.

Schema markup is the part of SEO that sounds hardest and is actually one of the more mechanical things on the list. It is a block of JSON in your page’s head that says, in a format machines cannot misinterpret: this is an HVAC company, it is at this address, it serves these cities, it does these services, it is open these hours.

Your page already says all of that in English. The problem is that English is ambiguous and a parser has to guess. Schema removes the guessing.

What schema actually does

Three concrete things.

It disambiguates your entity. Search engines model your business as an entity with attributes. Schema states those attributes explicitly instead of leaving them to be inferred from page copy. When your site, your Google Business Profile, and your directory listings all assert the same facts, confidence goes up. Confidence is what gets you included in results that require certainty.

It enables rich results. Review stars, FAQ dropdowns, breadcrumb trails in search results. Google decides whether to show these, but without markup you are not eligible at all.

It makes you extractable. This one has gotten more important. AI assistants summarizing local options are doing retrieval and extraction. Structured data is the cleanest possible form of an extractable claim. We go deeper on this in the AI search visibility guide, but the short version: unambiguous machine-readable claims are exactly what a retrieval system wants.

What it will not do

Being honest here saves you disappointment.

Schema is not a ranking factor. Adding LocalBusiness markup will not move you into the map pack. Google has been fairly consistent about this: structured data helps them understand the page, and understanding can lead to eligibility for features, but it is not a thumb on the scale.

So when an agency quotes you a five-figure “schema optimization” engagement with a ranking promise attached, that is a mispriced service with a false claim on top. The work itself is genuinely valuable. The pitch is not.

Think of it as infrastructure. A well-marked-up site does not rank because of the markup. It ranks because everything else is right, and the markup ensures nothing gets misread on the way.

The priority order for contractors

Do these in this sequence. Most contractor sites have none of them.

PriorityTypeWhereWhy
1LocalBusiness (or a subtype like HVACBusiness, Plumber, RoofingContractor, Electrician)Homepage, and a contact page if you have oneEstablishes the entity: who, where, what, when
2ServiceEvery service pageConnects a specific service to your business and area
3FAQPageAny page with genuine visible FAQsRich result eligibility; highly extractable
4BreadcrumbListAny page below the top levelSite structure clarity, breadcrumb rich results
5ArticleGuides and blog postsEstablishes authorship, dates, publisher
6AggregateRating / ReviewOnly where real reviews are displayedStar eligibility \u2014 with real risk if misused

LocalBusiness: the foundation

This is the one that matters most and the one most contractors get subtly wrong.

Use the most specific type available for your trade. Schema.org has HVACBusiness, Plumber, RoofingContractor, Electrician, and GeneralContractor. Specific beats generic — use the narrow type when one fits.

A workable structure for a service-area contractor:

PropertyWhat goes in itNotes
@typeHVACBusiness, Plumber, RoofingContractor, ElectricianMost specific type that fits
nameYour exact business nameByte-for-byte identical to your GBP. No keywords appended.
urlYour canonical homepagePick www or non-www and never mix
telephoneYour primary number in E.164 formatNot a tracking number
addressPostalAddress objectInclude even if hidden on GBP \u2014 it anchors the entity
areaServedArray of City objects or a GeoCircleThe cities you genuinely serve
geoGeoCoordinatesLatitude and longitude of your actual location
openingHoursSpecificationReal hoursMust match your GBP exactly
sameAsArray of your profile URLsGBP, Facebook, LinkedIn, BBB, Yelp \u2014 this is the entity glue
priceRange$$ or similarOptional; skip rather than guess

The sameAs array is the underrated one. It is how you explicitly tell a machine “this website and that Google profile and that Facebook page are all the same entity.” Without it, they have to infer the connection. List every profile you actually control.

The name field is where sites quietly break. If your schema says “Smith Heating and Air LLC” and your GBP says “Smith Heating & Air,” you have introduced exactly the ambiguity you were trying to remove. Same string. Everywhere.

Service: one per service page

Each service page gets a Service block tying that specific service to your business and your service area. The useful properties: serviceType (“Air Conditioning Repair”), provider (a reference back to your LocalBusiness), areaServed, and a plain description.

Keep the provider.name identical to your LocalBusiness name. Every time you introduce a variant, you weaken the connection.

If you have distinct pages for AC repair, furnace replacement, and duct cleaning, each gets its own Service block naming that service. Do not copy the same generic block onto all three — that tells the parser your three pages are about the same thing, which is precisely the opposite of what you want.

FAQPage: still worth doing

Google narrowed FAQ rich result eligibility, so most sites no longer see the dropdowns in search results. People concluded FAQ schema is dead. That is the wrong conclusion.

FAQ markup remains one of the cleanest ways to hand a machine a question-and-answer pair. For AI retrieval, a well-structured FAQ block is close to an ideal input: an explicit question, an explicit answer, unambiguously paired. Whether or not you get a dropdown in Google, that structure is doing work.

The rules that matter:

  • The question and answer must both be visible on the page. Marking up content that is not there is a violation.
  • The answer text in the markup must match the visible text. Not a summary. Not a keyword-enriched variant.
  • Answer real questions people ask. “Why is Smith Heating the best HVAC company in Aurora?” is not an FAQ, it is an ad in a costume.

Article and BreadcrumbList

Article on your guides establishes headline, description, author, publisher, and — importantly — datePublished and dateModified. The dates matter for freshness assessment, which matters more in an AI retrieval context than most people realize. Just make sure they are true. A dateModified of today on a page you last touched in 2023 is a lie you are telling in a structured format, which is a strange hill to die on.

BreadcrumbList is trivial and worth it. It describes where the page sits in your hierarchy — Home › Resources › This Guide — and can produce a cleaner path display in search results instead of a raw URL.

Review and AggregateRating — carefully

Star ratings in search results are attractive, which is why this is the most abused markup type in local SEO.

The rules are not subtle:

  • The reviews must be real, and they must be displayed on the page carrying the markup.
  • You cannot mark up reviews that live only on Google or Yelp as if they were on your site.
  • You cannot invent an aggregate rating. Google issues manual actions for this, and the FTC has rules about fabricated reviews that have nothing to do with SEO and considerably sharper teeth.
  • You cannot mark up self-serving reviews about your own business written by your own business.

The safe pattern: publish your real reviews on a real page, attribute them accurately, and mark up what is actually there. That is what we do on our own site — the reviews on our reviews page are real, verified, and few, and the AggregateRating reflects exactly that. Fewer real reviews with accurate markup is a better position than an impressive number that cannot survive scrutiny.

Worth saying plainly

If an agency offers to add review schema to your site without adding real reviews to it, they are proposing to fabricate structured data on your domain. The manual action lands on you, not them. This is one of the few SEO mistakes that can produce a legal problem as well as a ranking one.

How to actually add it

Use JSON-LD. Google recommends it, it lives in a single script block in your head, and it does not entangle with your HTML. Microdata and RDFa still work but there is no reason to choose them in 2026.

Practically:

  • WordPress: most SEO plugins generate a baseline automatically. Check what it emits before adding your own — duplicate conflicting blocks are a real and common problem.
  • Static or custom sites: paste the JSON-LD block into the head of each page. That is the whole job.
  • Page builders: usually a custom-code or head-injection field. Find it before you build the markup.
  • Google Tag Manager: possible, but it depends on JavaScript execution during crawl. Server-rendered markup in the head is more reliable. Use GTM only when you have no other option.

You do not need a generator tool, though they are fine for a first draft. The properties above are the whole vocabulary for 95% of contractor sites.

Mistakes that trigger penalties

  • Marking up invisible content. The number one violation. If it is not on the page, it does not go in the markup. Hidden divs full of FAQ text are detectable and treated as spam.
  • Fake reviews or ratings. Manual action territory, plus FTC exposure.
  • Name inconsistency between schema, GBP, and citations. Not a penalty, but it quietly undermines the entire point.
  • Wrong or invented addresses — a virtual office marked up as a business location.
  • Duplicate conflicting blocks. Plugin emits one LocalBusiness, you paste another with different hours. Now the parser has two contradictory claims from the same page.
  • Marking up an entire site as one Service — the same generic block copied to twelve pages.
  • Stale dates. dateModified that auto-updates on every deploy without the content changing.
  • Over-marking. Not every element needs schema. LocalBusiness, Service, FAQPage, BreadcrumbList, Article. That is the list.

Testing and maintenance

Two free tools do everything you need. Google’s Rich Results Test tells you whether a page qualifies for a rich result and what is broken. The Schema Markup Validator at validator.schema.org checks your syntax against the vocabulary regardless of whether Google shows a feature for it.

Then watch Search Console’s Enhancements reports, which flag errors on live pages once Google has crawled them. Warnings are usually optional properties — ignore them unless you want the feature. Errors are worth fixing.

Maintenance is thin but real: re-check after any site redesign or plugin change, update hours when they change, add new services when you add them, and confirm your sameAs profiles still exist. Once a year is enough for most contractors.

The honest summary: this is a half-day of work that most contractor sites have never had done, it costs nothing but attention, and it makes every other visibility effort you make slightly more legible to the machines deciding whether to mention you.

Want to know what your site is currently telling search engines about your business? Book a free 30-minute Revenue Plan with Engineered Reach and we will run your markup and show you what comes back.

FAQ

Common questions

Not directly. Google has been reasonably consistent that structured data helps them understand a page and can make it eligible for rich results, but it is not a ranking factor on its own. The real value is removing ambiguity about your business and making your claims extractable by search engines and AI assistants. Treat it as infrastructure rather than as a lever.
Use HVACBusiness, which is a specific subtype of LocalBusiness, rather than the generic LocalBusiness type. Schema.org also has Plumber, RoofingContractor, Electrician, and GeneralContractor. Choosing the most specific type that accurately fits gives search engines a clearer signal than a generic one.
No. Review and AggregateRating markup must describe reviews that are actually displayed on the page carrying the markup. Marking up reviews that live only on Google or Yelp violates the guidelines and can lead to a manual action. If you want star eligibility, publish real reviews on your own page and mark up what is genuinely there.
Yes, even though Google narrowed which sites see FAQ rich results. The markup remains one of the cleanest ways to hand a machine an explicit question-and-answer pair, which matters for AI retrieval regardless of whether a dropdown appears in search. The requirement is that the questions and answers are genuinely visible on the page and match the markup exactly.
Run the page through Google's Rich Results Test to see rich result eligibility, and through validator.schema.org to check syntax against the vocabulary. Then watch the Enhancements reports in Search Console, which flag errors on live pages after crawling. Warnings usually refer to optional properties and can be ignored unless you want a specific feature.
Either works. Most SEO plugins generate a reasonable baseline automatically. The important step is to check what the plugin already emits before adding your own markup, because duplicate blocks with conflicting information are a common and self-defeating problem. On static or custom sites, pasting JSON-LD into the head is straightforward and gives you exact control.

Ready to stop guessing and start booking?

Book your free 30-minute Revenue Plan. We map the 7 highest-ROI opportunities for your business and implement the #1 one at no cost — before you pay us a dime.