LocalBusiness Schema: How to Get Cited by AI Search Engines
When a homeowner asks Perplexity or ChatGPT for the best plumber in their city, those AI engines scan dozens of sources before answering. Your Google Business Profile, Yelp listing, and BBB page all feed into the decision. But they also crawl your website, and most contractor websites send back unstructured text that AI models have to guess at rather than read with confidence. Sites with properly structured schema markup get cited by AI search engines three times more often than those without it. The fix takes 30 minutes and does not require a developer.
Why AI Cannot Extract Data from a Typical Contractor Website
Your homepage probably lists your phone number in the header, your address in the footer, and your services somewhere in between. A person reads this without effort. An AI crawler sees the same words but cannot confirm which text is the phone number, which is the service area, and whether the services on the homepage match what you actually offer. It guesses. Frequently it skips ambiguous sources entirely and cites a competitor whose business data is clearly labeled.
Schema markup, using the JSON-LD format Google recommends, solves this by adding an invisible code block to your page that labels every piece of your business data explicitly. Your phone number is declared as your telephone. Your city list is declared as your areaServed. Your services are declared as specific offerings. AI crawlers read the labeled block as a high-confidence source and quote from it directly. No visual changes, no content rewrites, no new pages needed.
The @type Field: Start Here
Every schema block begins with a @type field that tells AI engines what kind of business you are. Most website builders default this to "LocalBusiness" or "Organization." Both are accurate but too generic. Schema.org has specific types for every trade, and AI engines use them to filter business results against the service category in a query. A homeowner asking ChatGPT for the best HVAC company in their city gets an answer filtered by which businesses have their type set to HVACBusiness, not which ones have it set to LocalBusiness.
| Trade | Correct @type | Common default |
|---|---|---|
| HVAC contractor | HVACBusiness | LocalBusiness |
| Plumber | Plumber | LocalBusiness |
| Electrician | Electrician | LocalBusiness |
| Roofing contractor | RoofingContractor | LocalBusiness |
| Landscaper | LandscapingBusiness | LocalBusiness |
| General contractor | GeneralContractor | LocalBusiness |
| Locksmith | Locksmith | LocalBusiness |
If you offer multiple trades under one business, use the type that matches your primary revenue source. A company that does HVAC and plumbing but earns 80 percent of its revenue on HVAC uses HVACBusiness. Changing this one field, without changing anything else, increases AI citation eligibility for every trade-specific query in your market.
The Eight Fields That Drive AI Citations
Beyond @type, these are the specific fields AI engines read when deciding whether to cite your business. Each field needs to be accurate and complete:
| Field | What it tells AI | Why it matters |
|---|---|---|
| name | Your exact business name | Must match your GBP, Yelp, and BBB listings exactly |
| telephone | Primary contact number | Format: +1 followed by 10 digits, no dashes |
| address | Physical location | Street, city, state, ZIP. Must match your NAP exactly. |
| areaServed | Cities and ZIPs you serve | AI matches this list to "near me" and city-specific queries |
| openingHours | Days and hours | Tells AI whether you are available for the query type |
| aggregateRating | Your review score and count | AI engines weight businesses with higher verified ratings |
| hasOfferCatalog | Specific services offered | AI matches your named services to specific service queries |
| sameAs | URLs of your platform profiles | Links your schema to your GBP, Yelp, BBB, and Angi pages |
areaServed: The Most Underused Field
Most contractors set their areaServed to their primary city or leave it blank entirely. This is the biggest schema error for local businesses. When a homeowner types "HVAC repair in Scottsdale" or Perplexity processes that query, it looks for businesses whose areaServed includes Scottsdale. A Phoenix contractor who serves Scottsdale but only lists Phoenix in areaServed does not appear for those queries. The business is invisible for every suburb and neighborhood outside its exact listed city.
List every city, town, and suburb where you regularly take jobs. If you cover 12 cities, list all 12. If you cover specific ZIP codes within each city, add those too. There is no penalty for a long areaServed list. There is a direct citation penalty for an incomplete one. Pull up your last 100 completed jobs and write down every city where work was performed. That list becomes your areaServed.
hasOfferCatalog: Name Your Services Exactly
Generic descriptions cost citations. A schema block that says "Plumbing Services" tells AI almost nothing. A block that lists "Water Heater Replacement," "Drain Cleaning," "Sewer Line Repair," and "Emergency Plumber" tells AI exactly which service queries you are eligible to appear for. When someone asks ChatGPT "who does water heater replacement in [city]," the model matches against specific service names in schema markup, not general descriptions.
Name every service you offer as a separate item. Use the same words homeowners type into Google: "emergency plumber" rather than "24-hour plumbing assistance," "AC tune-up" rather than "preventive HVAC maintenance." The match between your service names and search query language is what puts you in the result.
How to Add Schema Without Writing Code
Three options work for most contractor websites:
WordPress with Yoast SEO or RankMath: Both plugins have a Local SEO module that generates your LocalBusiness schema automatically from a form. Fill in your business name, address, phone, service area, and hours. The plugin generates and injects the correct JSON-LD block. Find it under the plugin settings in the Local SEO or Schema section. Takes 15 minutes to complete.
Google's Structured Data Markup Helper: Search for "Google Structured Data Markup Helper" to find the tool. Select "Local Businesses," enter your website URL, and use the point-and-click interface to tag your business name, address, phone, and hours. Google generates the schema code for you. Copy the output and paste it into your site's header section.
Squarespace, Wix, or any other builder: Look for a "Header Code Injection" or "Custom Code" field in your site settings. Paste the generated schema block there. It applies across your entire site without touching individual pages.
Test It in 30 Seconds
Go to search.google.com/test/rich-results and enter your homepage URL. The tool shows every schema type it finds on your page. Look for your trade-specific type: Plumber, HVACBusiness, RoofingContractor, or whichever applies. If it shows "LocalBusiness" instead, your @type field was not updated. If it shows errors next to any field, fix those before moving on. An error in the address or telephone field means that data is not being passed to AI engines correctly.
Run the same test on each service page after adding schema there. Service pages should carry their own schema entries with service-specific names in hasOfferCatalog. A water heater replacement page should have its own schema listing that specific service.
30-Day Implementation Plan
- Week 1: Add LocalBusiness schema to your homepage with the correct trade @type, your complete areaServed city list, and a full hasOfferCatalog. Test with Google Rich Results Test and fix any errors before moving forward.
- Week 2: Add service-specific schema to your top three service pages. Each page needs its own schema entry listing the specific service name in hasOfferCatalog and the same areaServed used on the homepage.
- Week 3: Add your GBP, Yelp, BBB, and Angi profile URLs to the sameAs field on your homepage schema. This links your website schema to your platform citations and tells AI engines that your site, your GBP, and your directory listings are all the same business. This cross-linking is one of the strongest brand entity signals available for AI citation purposes.
- Week 4: Update your aggregateRating to reflect your current review count and average score. Most contractors set this once and never update it. Keeping it current signals to AI engines that the business is active. Rerun the Rich Results Test to confirm everything is error-free.
The contractors appearing in AI search recommendations have not necessarily built more backlinks or collected more reviews than you. Many of them have simply made their business data machine-readable. A Perplexity or ChatGPT model generating a local contractor recommendation chooses sources it can read with confidence over sources it has to guess at. Schema markup is how you become the confident source. Most of your competitors have not added it yet.