Local business schema is a short block of code that tells Google your name, type of business, address, phone and hours in a form a machine reads with no guessing. Google's own doc ties it to the knowledge panel and business details it may show in search. Pick the most exact type for your trade, match your Business Profile word for word, put it in the page source, and test it with the Rich Results Test and the Schema Markup Validator.
What Changed
- In our October 17, 2026 scan of 61 trade sites, 48% had no LocalBusiness type schema and 20% had no schema on the home page at all.
- Google requires only two fields, name and address. A trade business should also send telephone, url, geo and hours.
- Use the exact type. RoofingContractor, Locksmith, AutoRepair and LegalService all exist on schema.org. LawFirm and Roofer do not.
- Star ratings on your own reviews do not earn stars. Google says self serving LocalBusiness reviews are not eligible.
- Put the code in the page source. Google can read schema added by JavaScript, but most AI crawlers do not run it.
What We Found on 61 Trade Websites
We scan a lot of roofer, locksmith, auto repair and law firm sites. The same gap shows up on most of them. The site says who the business is in words. It never says it in code.
On October 17, 2026, we ran 61 small business sites through our own scanner. That was 19 roofers, 17 locksmiths, 17 auto repair shops and 8 law firms. This is what came back. 48% had no LocalBusiness type schema at all. 20% had no schema of any kind on the home page. The full results are on the Rank Any Site proof page.
One more thing about those numbers. The scanner reads the page source, the way most crawlers do. Schema that a plugin or a tag manager adds later with JavaScript is not counted. So the real share of sites with working schema could be a little higher. Treat 48% as a floor, not a ceiling.
Almost half the businesses we looked at had never told Google, in Google's own language, that they are a roofer, a locksmith, a shop or a law firm. Their site still shows up. But Google and the AI tools have to guess the basics from the text. Guesses go wrong. A phone number in the footer gets read as a fax. A city in a blog post gets read as the address. A review widget gets read as nothing at all.
This post fixes that. You get the exact code a trade business needs, field by field. You get the right type for your trade. You get the four mistakes we keep finding. And you get a ten minute test with two free tools.
What Local Business Schema Is, in Plain Words
Schema is a shared list of labels. Google, Microsoft, Yahoo and Yandex are the founding companies of schema.org, and they built it so every search engine reads the same words the same way. "Name" means the name. "Telephone" means the main phone. "RoofingContractor" means a roofing contractor.
Local business schema is the part of that list for a business with a real place or a real service area. You write it as a small block of JSON-LD and put it in the page. JSON-LD is just a tidy list of labels and values inside a script tag. Visitors never see it. Crawlers read it first.
Think of it as the business card you hand to a machine. Your site is the sales pitch. The schema is the card with the facts on it, in the order the machine expects.
What Google Says It Uses It For
Be careful here, because a lot of pages oversell it. This is what Google says, from its LocalBusiness structured data doc, last updated September 8, 2026.
- When people search for a business, results may show a knowledge panel with details about it.
- People searching for a kind of business may see a carousel of businesses.
- The markup can tell Google your hours, your departments and more.
Note the word "may" in each line. Google's general structured data guidelines say it plainly. Correct markup does not guarantee that anything shows. Google picks what to show based on the searcher and the query.
Google also does not call schema a ranking factor. So the real pitch is this. Schema does not make you rank. It makes you clear. It removes the guessing about who you are, where you are and when you are open. That clarity matters more every year, because AI answers are built from facts a machine can trust.
Pick the Right Type for Your Trade
This is the first fork in the road, and it is where a lot of sites go wrong. Google's doc says to use the most specific LocalBusiness subtype you can. Schema.org has types for most trades. Plain LocalBusiness is the fallback, not the goal.
We checked each of these on schema.org in October 2026. The path shows where each type sits in the family tree.
| Your business | Type to use | Where it sits on schema.org |
|---|---|---|
| Roofer | RoofingContractor | LocalBusiness, HomeAndConstructionBusiness, RoofingContractor |
| Locksmith | Locksmith | LocalBusiness, HomeAndConstructionBusiness, Locksmith |
| Auto repair shop | AutoRepair | LocalBusiness, AutomotiveBusiness, AutoRepair |
| Body shop | AutoBodyShop | LocalBusiness, AutomotiveBusiness, AutoBodyShop |
| Law firm | LegalService | LocalBusiness, LegalService |
| Notary | Notary | LocalBusiness, LegalService, Notary |
| Plumber | Plumber | LocalBusiness, HomeAndConstructionBusiness, Plumber |
| Electrician | Electrician | LocalBusiness, HomeAndConstructionBusiness, Electrician |
| HVAC company | HVACBusiness | LocalBusiness, HomeAndConstructionBusiness, HVACBusiness |
| General contractor | GeneralContractor | LocalBusiness, HomeAndConstructionBusiness, GeneralContractor |

Law Firms, Read This Twice
Law firms get this wrong more than any other trade we scan. There is no LawFirm type. There is an Attorney type, but schema.org marks it as deprecated on the Attorney page. It says LegalService is more inclusive and less ambiguous. So a firm uses LegalService. A single lawyer's own page can describe the person with Person and link it to the firm.
What If You Do Two Trades?
Some shops do repair and body work. Some locksmiths also install garage doors. Google's doc covers this. You can list more than one type as an array, like ["AutoRepair", "AutoBodyShop"]. The doc also says Google does not support additionalType here, so skip that trick. Only list a type you really are. A roofer who once fixed a gutter is not also a GeneralContractor.
The Exact Code, Field by Field
This is a full block for a roofer. It is a worked example for a made up business, Example Roofing Co, at a made up address, with a 555 phone number and example.com links. Swap in your own facts, keep the shape.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"@id": "https://www.example.com/#business",
"name": "Example Roofing Co",
"url": "https://www.example.com/",
"telephone": "+1-562-555-0123",
"image": "https://www.example.com/img/crew-on-roof.jpg",
"logo": "https://www.example.com/img/logo.png",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Example Street",
"addressLocality": "Long Beach",
"addressRegion": "CA",
"postalCode": "90802",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.76812,
"longitude": -118.19542
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "12:00"
}
],
"areaServed": [
{ "@type": "City", "name": "Long Beach" },
{ "@type": "City", "name": "Lakewood" },
{ "@type": "City", "name": "Signal Hill" }
],
"sameAs": [
"https://www.facebook.com/exampleroofingco",
"https://www.yelp.com/biz/example-roofing-co-long-beach"
]
}
</script>
We ran this exact block through the Schema Markup Validator on October 19, 2026. It came back clean, with no errors and no warnings. The screenshot is in the testing section below. Now, what each line does and what Google says about it.
The Two Fields Google Requires
- name. Your business name, the same as on your sign and your Business Profile. No city or keywords stuffed in.
- address. A PostalAddress with street, city, state, ZIP and country. Google's doc says to include as many parts as you can. Use the same format as your profile, down to "Suite" or "Ste."
The Fields a Trade Business Should Add
- @type. Your trade type from the table above.
- @id. A fixed name for this business, usually your home page URL plus
#business. Other pages and other schema blocks can point to it. Google does not require it, but it keeps a site from describing the same business five different ways. - telephone. Google says to use the main customer number and include the country code and area code. For the US that starts with +1. Use the number you want calls on, the one on your profile.
- url. Google says this must be the full URL of that location's page, and it must work. For a one location business that is usually your home page.
- geo. Your map point. Google's doc says to use at least 5 decimal places for latitude and longitude. Grab it from your pin in Google Maps. In the US, longitude is a negative number. Leave off the minus sign and you put your shop on the other side of the planet.
- openingHoursSpecification. Your real hours, one entry per set of days. Google's rules are simple. Open 24 hours means opens "00:00" and closes "23:59". Closed all day means both are "00:00". For holiday or season hours, add
validFromandvalidThroughdates. - priceRange. Optional. Google says it must be under 100 characters or it will not show. Most trades use "$$" or a plain range.
- image and logo. A real photo of your crew, truck or shop and your logo file. Google's guidelines say image URLs must be crawlable and indexable, so do not block your image folder.
Two Extras That Help a Service Area Business
- areaServed. The cities you work in. It comes from schema.org, not from Google's list of recommended fields, so think of it as context, not a ranking trick. Locksmiths, mobile mechanics and roofers who drive to the job should use it. List real cities you serve, not every town in the county.
- sameAs. Links to your own profiles on other sites, like Facebook, Yelp, the BBB or your state bar listing. It helps tie your site to the same business everywhere else. Only list profiles you own and keep current.
Where the Block Goes
Put the full block once, on your home page or the page for that location. It can sit in the head or the body. What matters is that it is in the HTML the server sends, not added later. Every other page can carry a small block that points back with the same @id. Google's guidelines say markup must describe the page it is on, so do not put a full business block on a blog post about gutters as if the post were the business.
If you have more than one location, Google's doc says to define each one as its own LocalBusiness. Give each location its own page, its own block, its own phone and its own @id.
The Four Mistakes We Keep Finding
The scan tells us how many sites have no schema. Reading the ones that do tells us what goes wrong. These four show up again and again.
Mistake 1. The Wrong Type, or a Type That Does Not Exist
We see three versions of this. A roofer marked as plain LocalBusiness, when RoofingContractor is sitting right there. A law firm marked as LawFirm, which is not a type at all. And a theme that ships every site as Organization, which says nothing about the place or the trade.
A made up type is the worst of the three. To show you, we pasted a LawFirm block for a made up firm into the Schema Markup Validator. It threw an error on the type and said LawFirm is not a type defined by the recognized schema. Everything under it was correct. It did not matter. The tool could not tell what kind of thing it was describing.

Mistake 2. Star Ratings on Your Own Reviews
This one comes from old advice and old plugins. A site adds aggregateRating to its own LocalBusiness block, says 4.9 stars, and waits for gold stars in Google. They do not come.
Google's review snippet doc is direct about it. If the business being reviewed controls the reviews about itself, its pages with LocalBusiness or Organization markup are not eligible for the star feature. Google's LocalBusiness doc says the rating fields are only recommended for sites that collect reviews of other businesses. A directory, yes. Your own roofing site, no.
It gets worse when the rating is made up or copied by hand and never updated. Google's general guidelines say markup must be a true picture of the page and must not mislead. Breaking those rules can lead to a manual action, which takes away rich result eligibility. Keep your reviews where they count, on your Business Profile, and show real ones on your site as plain text if you like. Just do not mark them up as stars for yourself.
On October 19, 2026, the top Google result for this topic still taught the old way. Its sample code for an auto repair shop used plain LocalBusiness instead of AutoRepair. It put a 4 star rating with 250 reviews on the shop's own block. And its longitude was missing the minus sign. It is a good example of why you test before you trust.
Mistake 3. An Address That Does Not Match Your Business Profile
Google's schema doc does not mention your Business Profile at all. This rule is ours, from years of cleaning up local listings. Your schema, your website footer and your Business Profile should say the same name, address and phone, character for character.
Why it matters. Google and every AI tool are trying to decide if the business on your site is the same one on the map. When your schema says "Suite 4" and your profile says "Unit 4", that is a small doubt. When your schema has an old address from before you moved, or a tracking number that is not on your profile, that is a big one. Two facts that disagree are worse than one fact.
The fix takes five minutes. Open your Business Profile. Copy the name, address and phone exactly. Paste them into your schema and your footer. If you have not set up or claimed your profile yet, start with our guide to claiming your Google Business Profile.
Service area businesses, one more note. If you hide your address on your profile because you drive to the job, think before you print a street address in your schema. Use the same city and ZIP your profile shows, and lean on areaServed for the rest. Do not invent an office.
Mistake 4. Schema That Only Exists After JavaScript Runs
Lots of sites add schema with a tag manager, a chat widget or a plugin that injects it after the page loads. Google can handle that. Its JavaScript structured data doc says Google Search can process structured data in the page once it renders it.
The trouble is everyone else. In a December 17, 2024 study, Vercel found that none of the major AI crawlers it tracked render JavaScript. That list included the crawlers from OpenAI, Anthropic and Perplexity. Gemini and Apple were the exceptions. So schema that lives only in JavaScript is invisible to many of the tools that now answer "who is the best locksmith near me".
That is also why our own scan counts schema from page source only, and why we call the numbers a floor. Some of the sites with no schema in source may have it after JavaScript runs. Google may see it. Many AI crawlers will not.
The fix is to put the block in the HTML your server sends. On WordPress, a theme file or an SEO plugin that prints it server side does this. On a hosted builder, paste it into the site's header code box, which most builders print into the page itself. Then check the page source to be sure, as the next section shows.
How to Test It in Ten Minutes
Use two free tools. They do different jobs, and you want both.
Step 1. The Schema Markup Validator
The Schema Markup Validator is run by schema.org. It checks every type and every field against the full vocabulary. That matters for trades, because Google has no special rich result for a RoofingContractor or a Locksmith. Only this tool will tell you the type itself is right.
- Open the validator and pick Fetch URL for a live page, or Code snippet to paste a block before it goes live.
- Run the test.
- On the right, look for your type, like RoofingContractor, with 0 errors and 0 warnings.
- Click into it and read every value. Check the phone, the address and the hours against your Business Profile.

Step 2. Google's Rich Results Test
The Rich Results Test is Google's own tool. It tells you if the page can get a Google rich result and if Googlebot can read it. Google's JavaScript doc says to use the URL input instead of pasting code. The URL test renders the page the way Google does, so it also shows whether schema added by a script made it in.
- Paste your live page URL and run the test. Use the Code tab only for a block that is not live yet.
- Look at the list of items found. Read any errors first, then warnings.
- Click View Tested Page, then HTML, and search for
application/ld+json. That is the rendered page. - Now open your page in a browser and view the plain page source. Search for
application/ld+jsonagain. If it is in the rendered HTML but not in the page source, your schema is JavaScript only. See mistake 4.

Do not panic if the Rich Results Test says no rich results were found for a trade page. Google only lists the result types it shows, and many trade types do not have one. That is what the Schema Markup Validator is for. The two tools together answer both questions. Is the code right, and can Google read it.
Step 3. Check Again After Every Change
Schema rots. You move, you change your hours, you switch phone numbers, you change themes. Each one can leave old facts in the code. Re-run both tests any time you change your Business Profile, your theme or your SEO plugin. Put a note on the calendar to check twice a year even if nothing changed.
What Fixing It Did on Real Sites
Our scanner is the tool behind these numbers, so this is what it does. It reads every page of a site from source and writes the fixes. In the October 17, 2026 test, it read 730 pages across the 61 sites. It wrote 648 schema blocks for them, built from the facts on each site's own pages.
Then we put the fixes live on 5 of the sites and scanned again. The average score went from 68 to 79, and 5 of 5 went up. The tool fixes more than schema, so we cannot split out how much of the gain came from schema alone, and we will not pretend to. What we can say is that a site that tells machines who it is, cleanly, scores better on every check we run. You can see the full table on the Rank Any Site page.

Yes, that is our own site with a schema gap. We build these for a living and the scanner still flagged it. That is the point of testing. Everyone has a gap until they look.
Schema is also one half of being readable by AI tools. The other half is a plain file that tells them what your site is about. If you want that half too, read what an llms.txt file is and how to write one.
Schema Generator or Hand Written?
A lot of people searching for local business schema really want a schema generator. That is fine. A generator is a form that turns your answers into the JSON-LD block. It saves typing and it gets the commas right. But a generator only knows what you type into it, and most of the mistakes above happen in the form, not the code.
This is how to use one without getting burned.
- Change the type. Many generators start you on plain LocalBusiness. Scroll the type list until you find your trade. If your trade is missing from the list, the generator is out of date.
- Skip the rating box. If the form offers a star rating or a review count for your own business, leave it empty, for the reasons in mistake 2.
- Paste, do not type. Copy your name, address and phone from your Business Profile into the form so they match exactly.
- Check where it lands. A generator gives you code. Where you paste it decides if crawlers see it. Put it where your site prints it into the page source, then check the source.
- Test the result. Run the output through both tools above before it goes live, not after.
Writing it by hand is not hard either. Copy the worked example above, change every value, and test it. Most trade businesses need one block, written once, checked twice a year. The hard part was never the code. It was knowing which type to pick and which fields to leave out.
Your Local Business Schema Checklist
Print this or keep it open while you work.
- Pick the exact type for your trade from the schema.org table above. LegalService for law firms, never LawFirm.
- Copy your name, address and phone from your Business Profile, character for character.
- Use the full phone with +1 and the area code.
- Add your map point with at least 5 decimal places, and keep the minus sign on US longitude.
- Add real hours with openingHoursSpecification. Add season dates if you have them.
- Add a real photo and your logo, at URLs Google can crawl.
- List the cities you really serve in areaServed and your own profiles in sameAs.
- Give it an @id and put the full block on the home page or the location page only.
- Leave out aggregateRating and review on your own business.
- Make sure the block is in the page source, not only added by JavaScript.
- Test it in the Schema Markup Validator and the Rich Results Test.
- Re-test after any move, number change, theme change or plugin change.

If you would rather not hand write it, Rank Any Site reads your pages and writes the block for your trade, from your own facts. Either way, test it before you trust it.
Evidence
Every number in this story comes from one of these. If a figure is ours, the paragraph says so.
- Google Search Central, Local Business (LocalBusiness) structured data (updated September 8, 2026)
- Google Search Central, General structured data guidelines (updated July 10, 2026)
- Google Search Central, Review snippet structured data (updated September 8, 2026)
- Google Search Central, Generate structured data with JavaScript (updated December 10, 2025)
- Schema.org, RoofingContractor
- Schema.org, LegalService and Attorney
- Schema Markup Validator
- Google Rich Results Test
- Vercel, The rise of the AI crawler (December 17, 2024)
- Rank Any Site, 61 site test (October 17, 2026)
Clickflame builds the websites and runs the local search and ads for service businesses that live on the phone ringing. See a tool that writes this schema from your own pages, look at the work, or pick a time and we will look at your numbers with you.
Help Desk Answers
What is a business schema?
It is a block of code, usually JSON-LD, that describes your business with fixed labels from schema.org. Name, type of business, address, phone, hours and links. Search engines and AI tools read it so they do not have to guess those facts from your page.
Can you give me an example of schema markup?
Yes. The worked example on this page is a full RoofingContractor block for a made up roofer, Example Roofing Co. It has the name, address, phone, map point, hours, service cities and profile links. Swap in your own facts, keep the structure, and test it before it goes live.
Is schema still relevant?
Yes. Google's LocalBusiness doc was updated on September 8, 2026, and it still ties the markup to the business knowledge panel Google may show. AI tools also read it when they are deciding who a business is. What changed is that some rich results went away, so do it for clarity, not for stars.
Does local business schema help my rankings?
Not directly. Google treats structured data as a way to understand a page and show richer results, not as a ranking boost. It helps you get read right, and a page that is read right has a better shot at showing for the right searches.
Should I put LocalBusiness schema on every page?
Put the full block on the home page or the page for that location. Other pages can point to it by its @id instead of repeating the whole thing. A business with several locations gets one block per location, each on its own location page.
Can I use a schema generator?
Yes, and a good one saves typing. Check three things after. The type is your trade, not plain LocalBusiness. Every fact matches your Business Profile. And it lands in the page source, not only in a script that runs later.
What is the difference between the Rich Results Test and the Schema Markup Validator?
The Rich Results Test is Google's tool. It tells you if a page can get a Google rich result. The Schema Markup Validator is run by schema.org. It checks every type and field against the full vocabulary, including types Google has no rich result for, like RoofingContractor.



