Technical SEO

Local business schema for contractors: a plain-English guide with examples

Schema markup tells Google and AI assistants exactly who you are, what you do and where. Here is what home service businesses actually need, with a copy-ready example and the mistakes to avoid.

By Ramjan Ali Akash6 min readUpdated

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

BusinessSchema.org type
RooferRoofingContractor
PlumberPlumber
HVAC companyHVACBusiness
ElectricianElectrician
PainterHousePainter
Remodeler or builderGeneralContractor
LocksmithLocksmith
Moving companyMovingCompany
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

PropertyWhat to putNotes
nameYour real business nameExactly as on your Business Profile, no added keywords
urlYour homepage
telephoneMain phone with country codeSame number as your profile
addressStreet addressService-area businesses that hide their address on Google can include locality and region only
areaServedCities, counties or regions you serveKeep it realistic
openingHoursSpecificationYour hoursMatch your profile
image and logoA real photo and your logo
sameAsLinks to your Business Profile, Facebook, Yelp, BBB and other official profilesHelps connect your listings as one business
priceRangeFor example "$$"Optional
geoLatitude and longitudeOptional, 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 situationWhat to put in the address
Customers visit your office or showroomFull street address, exactly as on your profile
You hide your address on GoogleCity, region, postal code and country only, plus areaServed for the towns you cover
Several real, staffed locationsOne 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

PlatformUsual approach
WordPressAn SEO plugin's local business settings, or a header-code plugin for custom JSON-LD
WixBuilt-in business info, plus custom structured data in page SEO settings
SquarespaceBusiness information settings, plus a code block or code injection for JSON-LD
Custom or Next.js sitesA 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

MistakeWhy it is a problem
Marking up your own reviews as aggregate ratingsGoogle does not show self-serving review stars for local businesses and may ignore or flag them
Name, phone or address that differ from your profileCreates the inconsistency schema is supposed to remove
Fake addresses in every city you serveMisleading, and against Google's guidelines
Copying a template without changing the detailsWrong phone numbers and hours confuse search engines and customers
Adding FAQ schema to win rich resultsFAQ rich results are now limited to a small set of authoritative sites
Several conflicting plugins adding schemaDuplicate or contradictory business data

How to test your schema

  1. Paste your URL into Google's Rich Results Test to check what Google can read.
  2. Use the Schema Markup Validator for general schema.org correctness.
  3. Check Google Search Console's enhancements reports over the following weeks for errors.
  4. 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.

Next step

Want this done for your business?

Book a free strategy call. I will review your Google Business Profile, website, AI search presence and top competitors, and show you what I would fix first, whether you hire me or not.

Free · no pitch · you keep the action plan

Chat on WhatsAppBook a Call →
Book a free strategy call
Loading calendar…