Schema markup sounds technical, and the code can look intimidating. But the idea is simple: a small block of structured information on your website that states your business facts in a format machines read without guessing. Name, trade, phone, address or service area, hours, website, social profiles.
For a contractor, schema will not replace reviews or good service pages. What it does is remove ambiguity, for Google and for the AI assistants that increasingly answer "who should I call?". This guide covers what you need, what you can skip, and a copy-ready example.
Key takeaways
- Use JSON-LD, Google's recommended format.
- Pick the most specific LocalBusiness subtype for your trade.
- Match every detail exactly to your Google Business Profile.
- Do not mark up your own reviews as star ratings.
- Test with the Rich Results Test and fix errors in Search Console.
What schema markup is
"Google uses structured data that it finds on the web to understand the content of the page, as well as to gather information about the web and the world in general."
Google Search Central, Introduction to structured data markup in Google Search
The vocabulary comes from schema.org, a shared standard used by Google, Bing and others. For local businesses, the key type is LocalBusiness and its more specific subtypes.
Which schema type to use
| Business | Schema.org type |
|---|---|
| Roofer | RoofingContractor |
| Plumber | Plumber |
| HVAC company | HVACBusiness |
| Electrician | Electrician |
| Painter | HousePainter |
| Remodeler or builder | GeneralContractor |
| Locksmith | Locksmith |
| Moving company | MovingCompany |
| Other home trades (septic, pest control, landscaping, cleaning) | HomeAndConstructionBusiness or LocalBusiness |
The more specific type helps machines categorize you. Do not pick a type that does not describe you just because it exists.
The properties that matter
| Property | What to put | Notes |
|---|---|---|
| name | Your real business name | Exactly as on your Business Profile, no added keywords |
| url | Your homepage | |
| telephone | Main phone with country code | Same number as your profile |
| address | Street address | Service-area businesses that hide their address on Google can include locality and region only |
| areaServed | Cities, counties or regions you serve | Keep it realistic |
| openingHoursSpecification | Your hours | Match your profile |
| image and logo | A real photo and your logo | |
| sameAs | Links to your Business Profile, Facebook, Yelp, BBB and other official profiles | Helps connect your listings as one business |
| priceRange | For example "$$" | Optional |
| geo | Latitude and longitude | Optional, for storefront locations |
A copy-ready example
Here is an example for a fictional plumbing company that serves customers at their homes. Replace every detail with your own, exactly as it appears on your Google Business Profile, and place it in the head of your homepage or contact page.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://www.example-plumbing.com/#business",
"name": "Lone Star Plumbing",
"url": "https://www.example-plumbing.com/",
"telephone": "+1-214-555-0142",
"image": "https://www.example-plumbing.com/images/truck.jpg",
"logo": "https://www.example-plumbing.com/images/logo.png",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"addressLocality": "McKinney",
"addressRegion": "TX",
"postalCode": "75070",
"addressCountry": "US"
},
"areaServed": [
{ "@type": "City", "name": "McKinney" },
{ "@type": "City", "name": "Allen" },
{ "@type": "City", "name": "Frisco" }
],
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "18:00"
}],
"sameAs": [
"https://www.facebook.com/example-plumbing",
"https://www.yelp.com/biz/example-plumbing"
]
}
</script>Most website builders (WordPress with an SEO plugin, Wix, Squarespace) let you add this in a site-wide header setting or through a plugin's local business options.
Service pages and Service schema
On individual service pages, you can add Service markup that names the service and points back to the business with its @id. This is optional, and it is not a substitute for the page itself having real, useful content. A strong page with no schema beats a thin page with perfect schema every time. See which service pages to build first.
Service-area businesses: what to do about the address
Most contractors are service-area businesses: they go to the customer, and many hide their street address on Google. Your schema should follow the same choice.
| Your situation | What to put in the address |
|---|---|
| Customers visit your office or showroom | Full street address, exactly as on your profile |
| You hide your address on Google | City, region, postal code and country only, plus areaServed for the towns you cover |
| Several real, staffed locations | One LocalBusiness block per location, each on its own location page |
Never add addresses for towns where you have no real location. If you serve a town, say so in areaServed and on a genuinely useful service area page.
Multiple locations
If you have more than one real, staffed location, give each location its own page with its own LocalBusiness markup: its own address, phone, hours and a unique @id. Link each location to the parent company with the parentOrganization property. Each location page should match that location's Business Profile exactly.
How to add schema without a developer
| Platform | Usual approach |
|---|---|
| WordPress | An SEO plugin's local business settings, or a header-code plugin for custom JSON-LD |
| Wix | Built-in business info, plus custom structured data in page SEO settings |
| Squarespace | Business information settings, plus a code block or code injection for JSON-LD |
| Custom or Next.js sites | A JSON-LD script in the page template, generated from one source of business data |
Whatever the platform, keep one source of truth for your business details, so a phone or hours change does not leave old values in the markup.
Schema and AI search
AI assistants and Google's AI Overviews pull facts from many sources: your Business Profile, directories, reviews and your website. Clear, consistent structured data is one of the easiest ways to make sure the facts they find on your site match everything else. This is part of the work covered in GEO and AI visibility, and in GEO vs SEO for home services.
Common schema mistakes
| Mistake | Why it is a problem |
|---|---|
| Marking up your own reviews as aggregate ratings | Google does not show self-serving review stars for local businesses and may ignore or flag them |
| Name, phone or address that differ from your profile | Creates the inconsistency schema is supposed to remove |
| Fake addresses in every city you serve | Misleading, and against Google's guidelines |
| Copying a template without changing the details | Wrong phone numbers and hours confuse search engines and customers |
| Adding FAQ schema to win rich results | FAQ rich results are now limited to a small set of authoritative sites |
| Several conflicting plugins adding schema | Duplicate or contradictory business data |
How to test your schema
- Paste your URL into Google's Rich Results Test to check what Google can read.
- Use the Schema Markup Validator for general schema.org correctness.
- Check Google Search Console's enhancements reports over the following weeks for errors.
- Re-test whenever you change hours, phone, address or website platform.
Get your technical foundations right
Schema is one part of the technical work that lets Google trust your site, along with speed, indexing and site structure. Technical SEO covers all of it, and schema set up for AI answers is included from the Growth plan on the pricing page. Want me to check your current setup? Book a free strategy call.
People also ask
Real questions people search about Technical SEO, answered plainly.
Does schema markup improve local rankings?
Schema is not a direct ranking boost on its own. It helps Google understand your business details clearly and can make pages eligible for certain search features. It also gives AI assistants clean facts about your business. Think of it as clarity, not a shortcut.
Which schema type should a contractor use?
Use the most specific LocalBusiness subtype that fits, such as RoofingContractor, Plumber, HVACBusiness, Electrician or GeneralContractor. If none fits, use HomeAndConstructionBusiness or LocalBusiness.
Can I add review stars to my website with schema?
Not for your own business. Google does not show review rich results for reviews a LocalBusiness or Organization publishes about itself. You can still show testimonials on the page for visitors.
Does FAQ schema still show in Google?
Since 2023, Google shows FAQ rich results only for a limited set of well-known authoritative government and health sites. FAQ content itself is still useful for visitors and AI answers, so keep good FAQs on the page.
Should schema go on every page?
Your main LocalBusiness markup usually goes on the homepage or contact page. Service pages can use Service markup that references the business. Each real location with its own page can have its own LocalBusiness markup.
How do I check if my schema works?
Use Google's Rich Results Test for Google features and the Schema Markup Validator at validator.schema.org for general correctness. Then check Google Search Console for structured data errors.