Schema Markup for Local Businesses, Made Simple

You’ve done the work. Your website looks great, your Google Business Profile is set up, and you’ve got real pages describing what you do. So why is your business still hard to find when someone searches for what you offer?

One reason could be your schema markup, which tells search engines and AI tools about things like who you are, what you do, what you sell, and where you are. If you get it right, you hand them a clear summary of your business. Get it wrong, or skip it, and you might leave them guessing.

This post walks you through what schema markup is, how to choose the correct type for your business, the schema markup every local business should have, and where they go on your site.

What Schema Markup Actually Is

Schema markup is a bit of code you add to your website that spells out, in a format machines read instantly, who you are, what you do, and where you do it. Your pages already say all of this in words. The markup says it again in a structured way that leaves no room for guessing.

One quick word on wording, since “schema” and “schema markup” get used like they’re the same thing. “Schema” is the shared vocabulary, basically a dictionary of labels for describing a business, a product, a person, and so on. It is documented at schema.org, which is a project founded by Google, Microsoft, Yahoo, and Yandex. “Schema markup” is the code you can add to your site that uses that vocabulary to describe your specific business. Schema is the language; the markup is what you write in it. Many people say “schema” for both, which is fine as long as you remember the markup is the part you actually add to your pages.

While we’re on vocabulary: you’ll also hear Google call this “structured data.” That’s basically their name for schema markup. Structured data is what you add to your page; “rich results” are what you might get in return on the search engine results page. Those are search listings with extra built-in features, such as star ratings, FAQs, images, or prices, instead of a plain blue link. One important catch: valid structured data makes you eligible for rich results, but it doesn’t guarantee them. Google decides whether to show them, and for which searches.

Why Is Schema Markup Important?

Schema isn’t a direct ranking factor. You can’t add it and expect to climb the results. It can still help your ranking, just indirectly. When you label your pages clearly, search engines understand you better, and Google’s own team has said that a clearer understanding can make it easier to rank you for the right searches. Schema also makes you eligible for richer search results, the listings with extra detail that take up more space and pull more clicks. That’s a visibility win on its own, and more engaged visitors never hurt.

Schema also gives AI tools a clean, unambiguous set of facts about your business. When someone asks ChatGPT or Claude for a recommendation in your area, the results that get pulled into the answer are the ones whose information is easy to read and trust. Structured data is how you hand it over on a silver platter instead of making them dig through your page copy and hope.

So when I say wrong or missing schema can be why you’re getting overlooked, I don’t mean it’s tanking your ranking. I mean, search engines and AI may not understand you well enough to surface you with confidence, and your listing may not stand out enough to earn the click.

This isn’t a fringe tactic, either. Google publishes its own guide to local business structured data and points businesses to it, so adding it is squarely what search engines want you to do.

LocalBusiness Schema Markup

Most local businesses should start by adding LocalBusiness schema markup to their website. This is the foundation that describes your business: your name, address, phone number, hours, the areas you serve, your social profiles, your logo, and more. 

The tricky part is that there are also more-specific “subtypes” for LocalBusiness, such as AutoRepair and LegalService, and you should use the most specific subtype that is both accurate for your business and an actual subtype on schema.org. Google says the same thing in its documentation, recommending you use the most specific subtype available.

For many businesses, this is easy. A dentist uses Dentist. A plumber uses Plumber. A hair or nail salon uses BeautySalon. You pick the subtype that matches what you do, and you’re done.

Here’s where it gets tricky, and it’s a mix-up I’ve had to clean up a few times. There’s a subtype called MedicalBusiness, and it sounds like the natural fit for anyone in health or wellness. But MedicalBusiness is meant for licensed medical providers running a medical practice. Take a therapist: a counselor who isn’t medically licensed isn’t a medical business, even though the word “therapist” lives in the same neighborhood. If a business tags that practice as MedicalBusiness, it misrepresents the business, which could cause a credibility issue, so you want to avoid that.

If you can’t find a specific subtype that accurately describes you, the broad LocalBusiness type is always safe. (You can see the full menu of subtype options on the schema.org LocalBusiness page, and the MedicalBusiness definition if you want to check whether it really applies to you.)

Another thing that can make the LocalBusiness schema complicated is multiple locations. In fact, that’s complicated enough that we’re just not going to cover it in this post. I’ll write a follow-up that gets into it.

Create Your LocalBusiness Schema Markup

Once you know your type or subtype, it’s time to create your LocalBusiness schema markup. Google has a Structured Data Markup Helper tool you can use to do this, but it doesn’t automatically include specific subtypes. This tool should generate valid schema markup, but it’s always a good idea to double-check it with the Schema.org Markup Validator before adding it to your website.

Another option is to use ChatGPT, Claude, or another AI tool to generate the code for you. Paste the prompt below into your favorite AI tool, drop in your website address in the placeholder, and let it do the heavy lifting. It should read your website, confirm the right business subtype with you, ask about anything it can’t find, and refuse to make up details it doesn’t have.

You are an SEO specialist who writes valid schema.org structured data as JSON-LD for local businesses.

I want LocalBusiness schema markup for my business that I can paste into my homepage, contact page, and about page. My website is: [YOUR WEBSITE URL]

Work in this order:

Step 1: Review my website (homepage, about, contact, and services pages) and gather every detail that belongs in the schema: business name, address, phone, email, hours, social media links, online booking link, logo, and the areas I serve. If you cannot open my website, tell me and I will paste in those pages.

Step 2: Before writing any code, show me what you found and ask me for anything missing or unconfirmed. Always ask:

  - What kind of business I run, so you can choose the most specific schema type that truly applies.

  - To confirm my business name matches my Google Business Profile exactly.

Step 3: After I reply, generate the schema markup using these rules:

  - Use the most specific business type that genuinely and accurately describes my business and is a real schema.org type. Only use a specific type if it truly applies to me. Some types have eligibility rules (for example, MedicalBusiness is only for licensed medical or healthcare providers), so do not pick a type just because it sounds close. If no specific type accurately fits, use the general LocalBusiness type. Do not use ProfessionalService, it is deprecated. Confirm the type exists before you use it.

  - Give the business a stable @id using my domain plus "#business" (for example, https://yourbusiness.com/#business). Keep this the same everywhere.

  - Include these properties wherever I have real information for them: name, description, url, telephone, email, address, geo coordinates, opening hours (only the days I am open), areaServed, priceRange, logo, image, and sameAs (my social links). Add a booking action if I gave you a booking link.

  - Never guess, invent, or use placeholder values. Leave out anything I did not provide.

  - Output the schema as valid JSON-LD in one <script type="application/ld+json"> block.

  - After the code, list anything you left out and anything I should double-check before publishing.

After you get the result, validate the code in the Schema.org Markup Validator before adding it to your website. More on how to do that a bit later.

Add Service Schema Markup

If you have service pages on your website, you should also include a Service schema block for each one. The Service schema markup will have a provider property that points back to your LocalBusiness schema block, so the LocalBusiness has to exist first for the Service to connect to anything.

It’s important to note that Google doesn’t include Service in its structured data documentation. That doesn’t mean Google doesn’t see or use those Service schema blocks, but it’s not turning them into rich results.

Run the prompt below in the same chat where you made your LocalBusiness schema markup:

Now create individual Service schema markup for each of my main service pages. Each block will go on that service's own page. 

Work in this order:

Step 1: Review my service pages and pull the name, a short description, and the page URL for each service. If you cannot open my website, tell me and I will paste them in.

Step 2: Show me the services you found and ask me to confirm the list and fill any gaps before writing code.

Step 3: After I confirm, generate the schema markup using these rules:

  - Create one Service block per service, anchored to that service's own page.

  - Only create a block for a service that has its own page. Skip any service that only appears on a combined services page.

  - Set provider to reference my LocalBusiness (or subtype) from earlier. Include the relevant type and id values. Do not retype my business details.

  - For each service include: name, description, serviceType, url, areaServed, and provider.

  - Use the general Service type, or a more specific Service subtype only if it is accurate and a real schema.org type. Confirm any type exists before using it.

  - Do not include pricing unless I have a fixed, publicly listed price on my site.

  - Output each block as its own valid JSON-LD <script type="application/ld+json"> block, labeled with the page it belongs on.

  - After the code, list anything I should double-check before publishing.

As with the LocalBusiness schema markup, check each block of code in the Schema.org Markup Validator before adding it to your website

What If You Sell Products?

Everything above assumes you sell services. If you sell products instead, or alongside your services, there’s also a Product schema, and it works the same way.

Product schema is for the tangible things people buy, the way Service schema is for the intangible things you do. Each product page has its own Product block, just as each service page has a Service block. If you offer both, you simply mark up each page for what it actually is. Your LocalBusiness schema doesn’t change at all.

Here’s the part worth getting excited about. Product schema can earn some eye-catching rich results on the search engine results page. Price, availability, and star ratings can show up right in the search result, which is something Service schema usually can’t do. So if products are a real part of your business, this markup can pull more visible weight.

It also flips the review rule I’ll mention again in a minute. You can’t star-rate your business as a whole, but if you have genuine customer reviews on a product page, Product schema can carry them and show those stars. The only catch is that they have to be real reviews from real customers, never invented ones.

Important note: If you’re using e-commerce software for your products, there’s a very good chance that the software automatically creates Product schema, so you might not have to do this. You can check by going to Google’s Rich Results Test tool to test one of your product pages. If the results say there’s a product, you’re all set. Just make sure you test an individual product page, not the homepage, because the Product schema should only appear on the relevant product page.

Here’s a prompt for products, built to run in the same chat as your LocalBusiness schema:

Now create individual Product schema for each of my main products. Each block goes on that product's own page.

Work in this order:

Step 1: Review my product pages and pull the name, a short description, image, price, availability, and the page URL for each product. If you cannot open my website, tell me and I will paste them in.

Step 2: Show me the products you found and ask me to confirm the list and fill any gaps, especially price and availability, before writing code.

Step 3: After I confirm, generate the schema using these rules:

  - Create one Product block per product, anchored to that product's own page.

  - Only create a block for a product that has its own page. Skip any product that only appears on a category or collection page.

  - For each product include: name, description, image, url, and an offers block with price, priceCurrency, and availability.

  - Reference my business as the brand or seller using my LocalBusiness @id from earlier where it fits. Do not retype my business details.

  - Include aggregateRating or review ONLY if I have genuine customer reviews shown on that product page. Never invent ratings or reviews.

  - Use the price and availability exactly as they appear on the page. Do not guess or use placeholder values.

  - Output each block as its own valid JSON-LD <script type="application/ld+json"> block, labeled with the page it belongs on.

  - After the code, list anything I should double-check before publishing.

Where the Schema Goes on Your Site

This is the other place people trip up, and it’s changed enough that even some current advice is out of date.

Your LocalBusiness schema markup goes on the pages that are actually about your business: your homepage, your contact (or location) page, and your about page. Use the exact same block on all three, so search engines understand it’s one business, not three different listings. You do not need it on every page of your site.

Each individual service page gets its own Service block, the ones you generated in the second prompt. So if you have three service pages, you’ll have three Service blocks, one living on each page. The same pattern covers products. Each product page gets its own Product block.

As for getting the code onto your site, it depends on your website builder. Check the documentation for how to add code to the “head” of specific pages so you don’t accidentally add each block of code to the whole website. If you’re on WordPress, an SEO plugin, or your theme settings should have a spot to paste schema markup into the page head. 

Validate Before You Publish

Once you’ve got your code, check it before it goes live. Two free tools do this. Run each block through the Schema.org validator. Fix anything flagged as an error. A few warnings are usually fine, but errors mean something’s actually broken.

After you publish, run the Schema.org validator on the whole page. You can also test the live page with Google’s Rich Results Test, but remember that it doesn’t “see” the Service schema. If you have Google Search Console set up, keep an eye on that after you publish, as it will also see the same Rich Results. That’s it. No ongoing babysitting required, but if your business, service, product, or other info changes, the related schema markup should also change.

Your Next Small Step

Getting this right takes about an afternoon. Pick the LocalBusiness type or subtype that’s actually accurate, put your LocalBusiness schema markup on the pages that describe your business, add a Service or Product block to each of your service and product pages, and validate the whole thing. From there, you’ve handed the search engines and AI tools a clear, trustworthy picture of who you are.

You can start with the very first step this week. Run the LocalBusiness prompt, answer its questions, and validate what it gives you. That alone puts you ahead of most of your competitors, who either skipped schema entirely or got the type wrong and never knew.

If you’d like a guided path through the rest of your SEO with people who’ll cheer you on when you get stuck, come join us in the SEO Success Club. You’ve got this!