Google can read your website. But schema markup tells it what it's reading.
Without structured data, Google is guessing. Inferring from your copy whether you're a roofing contractor or a general contractor, whether you serve the whole state or just three zip codes, whether your 4.8-star rating is from 8 reviews or 180. With schema markup, you tell Google explicitly. Unambiguously. In a format it was designed to read.
Most contractors don't have it. That's the gap.
What Schema Markup Actually Is
Schema markup is a block of JSON code embedded in your website that describes your business in a vocabulary search engines and AI systems understand natively.
It looks like this:
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"name": "Acme Roofing",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Cleveland",
"addressRegion": "OH",
"postalCode": "44101"
},
"telephone": "+1-216-555-0100",
"areaServed": ["Cleveland", "Akron", "Parma"]
}
Google, Bing, and AI crawlers read this before they read your page content. It's the first thing that tells them: this business is a roofing contractor, it's in Cleveland, it serves these areas, here's the phone number.
Without it, they're parsing your homepage copy and making educated guesses.
The Four Schema Types That Matter for Contractors
1. LocalBusiness Schema
This is the foundation. It should be on your homepage and every location page.
The minimum you need: business name, address, phone, hours, and geographic coordinates. The full version adds: service area, payment accepted, founding year, and a link to your Google Maps listing.
Use a subtype if one fits — RoofingContractor, PlumbingService, ElectricalContractor, HVACBusiness, GeneralContractor. Google understands these more precisely than the generic LocalBusiness type, and it matches better to the search queries people actually use.
This is what drives NAP consistency at the code level — your website is explicitly declaring your name, address, and phone in a format that feeds directly into local search algorithms.
2. Service Schema
Each service page on your site should have Service schema naming and describing what you do.
For a roofing contractor: roof replacement, roof repair, storm damage assessment, commercial roofing, gutter installation. Each with a description, service area, and price range if applicable.
This is why having individual service pages matters. One page listing all your services gets one schema entry. Ten service pages get ten schema entries, each one specifically targeting a different query. Google indexes them separately, AI reads them separately.
3. FAQ Schema
Any page with a questions-and-answers section should have FAQ schema.
This is what feeds AI search and voice search. When someone asks ChatGPT "what questions should I ask a roofer before hiring them," it pulls from FAQ schema — from websites that explicitly marked their Q&A content as such.
FAQ schema also generates expandable dropdowns in Google search results, which increases the space your listing takes up on the page and improves click-through rates.
The connection to AI visibility is direct. See how AI search decides which local business to recommend — structured FAQ content is one of the five signals that move the needle.
4. Aggregate Rating Schema
If you have reviews, you can surface your star rating directly in Google search results using AggregateRating schema — the yellow stars you see under certain business listings.
This requires pulling your actual review count and average from Google or your review platform. It's more technical to implement, but the click-through rate lift is significant. Searchers trust visible star ratings before they click.
Where to Add Schema and How
Schema markup goes in a <script type="application/ld+json"> tag, typically in the <head> of your page or just before the closing </body> tag.
Every modern website platform supports this:
- WordPress: Yoast SEO or RankMath adds it automatically from your settings. But check what they're generating — most auto-generated schema is incomplete.
- Squarespace / Wix / Showit: Limited built-in support. Use a code injection block to add JSON-LD manually.
- Custom site: Add it to the page template for site-wide schema (LocalBusiness) and to individual page templates for page-specific schema (Service, FAQ).
One important rule: your schema has to match your page content. If your schema says you're open Monday through Saturday but your homepage says hours by appointment only, Google flags the conflict. Schema is not where you put aspirational information — it's where you put accurate information.
Verifying Your Schema
Google provides a free tool called the Rich Results Test (search Google for it). Paste any URL and it shows you exactly what schema it detects, what errors it flags, and whether your pages are eligible for rich results.
Run it on your homepage, your top service page, and a page with FAQ content. What you typically find on a contractor site that hasn't explicitly added schema:
- LocalBusiness detected but incomplete (missing service area, hours, coordinates)
- No Service schema
- No FAQ schema
- Errors flagged on whatever auto-generated schema exists
Fixing these is not a one-day project, but it's also not a major undertaking. A focused half-day gets you from zero to complete on the four schema types above.
Schema and AI Search
AI search visibility depends on the same structured signals that traditional search uses, but with higher weight on machine-readable content.
When ChatGPT crawls the web for local business recommendations, it's not reading your homepage copy the way a human does. It's looking for structured signals: what type of business this is, what it does, who it serves, what customers said. Schema markup makes all of that explicit.
An llms.txt file is the newer layer — a plain-text file specifically for AI crawlers that describes your business in plain language. Schema and llms.txt work together: schema gives the structured data layer, llms.txt gives the narrative layer.
The GBP primary category you set on your Google Business Profile, your website's schema type, and your llms.txt business description should all say the same thing. When they agree, AI systems get a consistent, confident signal about what you are. When they conflict, they get noise.
What the Audit Checks
Our free brand audit looks at your schema markup across your homepage and top service pages. It checks whether you have LocalBusiness schema, whether it's complete, whether there are conflicts between your schema and your page content, and how your structured data compares to the top competitor in your market.
Most contractors we audit have either no schema or the bare minimum from an auto-generated plugin — missing service area, missing geo coordinates, no Service schema, no FAQ schema. The top competitor typically has all four types, correctly implemented.
Run the free audit at vibetokens.io/start — two minutes, no sales call, you get the full breakdown.
The Bottom Line
Schema markup is not a magic ranking boost. It's foundational infrastructure — the explicit, machine-readable layer that tells Google and AI systems what they're looking at.
Most contractors don't have it. The ones ranking in position 1 do.
It doesn't expire. It doesn't need to be updated unless your business information changes. You set it up once, it runs in the background, and every search engine and AI crawler that visits your site reads it accurately from that point forward.
Check your schema markup against the top competitor in your market. Free, two minutes.
— Murph, VibeTokens
