BizWhiz.ai Run my free scan
AI visibility · how-to

LocalBusiness Schema Markup for AI: A Step-by-Step Guide

Published July 6, 2026 · BizWhiz research

LocalBusiness schema markup is a block of JSON-LD code on your website that states your business’s name, address, phone, hours, and services in a format machines parse without guessing. For AI systems that retrieve web pages and compose answers, it removes ambiguity about your basic facts. Here is how to add it, step by step, with a complete example.

Why structured data matters to machines that write answers

When an AI system answers “who’s a good HVAC company in Boise,” it isn’t reading your website the way a person does. Retrieval-backed systems — Perplexity, ChatGPT with search, Google’s AI answers — pull indexed pages, extract facts, and synthesize a response. Extracting facts from prose is error-prone. Is “Summit Air” the business name or a product line? Is the phone number in the footer current? Do “weekday hours” include Friday?

JSON-LD answers those questions in a form that requires no interpretation. It’s a labeled statement: this is the name, this is the address, these are the hours, this is the service area. Machines that retrieve and synthesize don’t have to guess, and when they don’t guess, they misstate you less often.

Be clear about what this buys you. Schema is a consistency input, not a placement lever. It raises the odds that when you are retrieved, you’re described correctly and matched confidently to your other profiles. It does not force any AI system to mention you. In the local-business audits we run, the pattern that predicts visibility best is presence on the sources AI answers already cite, plus consistent name/address/phone data and a complete Google Business Profile. Schema supports that consistency; it doesn’t substitute for it.

Step 1: Pick the right schema type

schema.org defines LocalBusiness plus dozens of specific subtypes. Use the most specific one that truthfully describes you:

Your businessSchema type
Plumbing companyPlumber
HVAC companyHVACBusiness
ElectricianElectrician
RooferRoofingContractor
DentistDentist
Real estate agentRealEstateAgent
Mortgage brokerFinancialService
Anything else localLocalBusiness

Two rules. First, don’t use the generic Organization type — it works, but it throws away the “this is a local business with a physical presence and service area” signal, which is exactly what local queries run on. Second, don’t stretch: if no subtype fits, plain LocalBusiness is correct and safe.

Step 2: The complete worked example

Here is a full JSON-LD block for a fictional HVAC company. Every field in it is one you should be able to fill in from memory about your own business.

{
  "@context": "https://schema.org",
  "@type": "HVACBusiness",
  "name": "Summit Air Heating & Cooling",
  "description": "Residential HVAC installation, repair, and maintenance serving Boise, Meridian, and Nampa since 2012.",
  "url": "https://summitairboise.com",
  "telephone": "+1-208-555-0142",
  "image": "https://summitairboise.com/images/storefront.jpg",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "2418 W Fairview Ave",
    "addressLocality": "Boise",
    "addressRegion": "ID",
    "postalCode": "83702",
    "addressCountry": "US"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "18:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "08:00",
      "closes": "14:00"
    }
  ],
  "areaServed": [
    { "@type": "City", "name": "Boise" },
    { "@type": "City", "name": "Meridian" },
    { "@type": "City", "name": "Nampa" }
  ],
  "sameAs": [
    "https://www.facebook.com/summitairboise",
    "https://www.yelp.com/biz/summit-air-heating-and-cooling-boise"
  ]
}

Field notes, in the order they earn their keep:

  • name — your exact legal-or-trading name, character for character the same as your Google Business Profile and directory listings. “Summit Air Heating & Cooling” and “Summit Air Heating and Cooling LLC” look identical to you and different to a machine.
  • address — the structured PostalAddress object, matching your profiles exactly. Same suite format, same abbreviations.
  • telephone — one canonical number, ideally with country code. The same number everywhere on the web.
  • openingHoursSpecification — real hours, in 24-hour time. If you offer 24/7 emergency service, say that in the description; don’t fake round-the-clock office hours.
  • areaServed — the cities you actually serve. This is how service-area businesses tell machines where they operate beyond their street address.
  • sameAs — links to profiles that are verifiably yours: Facebook, Yelp, industry directories. This is how a machine confirms that the Summit Air on Yelp and the Summit Air on your website are the same entity.
  • url, image, priceRange, description — low effort, all worth filling honestly.

Everything in the block must be true and current. Schema is a claim about your business; wrong hours in JSON-LD propagate exactly as efficiently as right ones.

Step 3: Where to put it

The block goes inside a script tag in your page’s HTML:

<script type="application/ld+json">
{ ...the JSON from above... }
</script>

Placement rules:

  • At minimum, put it on the page where your name, address, and phone are visible — usually the homepage or contact page.
  • It can live in the <head> or the <body>; both are read.
  • On WordPress, most SEO plugins can output LocalBusiness schema from a settings form — check yours before hand-coding. On a static site, paste the script tag into the base layout or the specific page template. On a site builder, look for a custom-code or header-injection feature.
  • Mark up only what’s on the page. If the schema claims Saturday hours, your visible page should show Saturday hours too.

Step 4: Validate it

Don’t trust your own typing — JSON is unforgiving, and one missing comma silently invalidates the whole block. Two checks, both free:

  1. Google’s Rich Results Test — paste your page URL or the raw code; it reports whether the structured data parses and what Google recognizes.
  2. The Schema.org validator — same idea, vendor-neutral; it validates the markup against schema.org’s vocabulary and flags errors and warnings.

Then do the low-tech check: view your live page’s source in a browser and confirm the script tag is actually there. Plugins and caching layers sometimes strip or duplicate blocks. Re-validate after any site redesign.

Common mistakes we see in audits

  • NAP mismatch. The schema says one phone number, the Google Business Profile another, and an old directory listing a third. This is the single most common problem, and it undermines the entire point of the markup. Fix the source data first, then the schema.
  • Generic or wrong subtype. Organization where Plumber fits, or an aspirational subtype that doesn’t match the business.
  • Marking up things not on the page. Schema describing services, reviews, or hours that appear nowhere in the visible content.
  • Multiple conflicting blocks. A theme, a plugin, and a hand-pasted snippet each emitting their own LocalBusiness markup with different details. Pick one source of truth and remove the rest.
  • Set-and-forget. Hours change, service areas grow, phone systems get replaced — and the JSON-LD stays frozen at launch day. Stale structured data is confidently wrong data.

What to do this week

  1. Pick your schema type from the table above — most specific truthful subtype, or LocalBusiness.
  2. Copy the worked example and replace every value with your real details, checked character-for-character against your Google Business Profile.
  3. Add your genuine profiles to sameAs — only pages that are actually yours.
  4. Paste the script tag into your homepage or contact page (or configure your SEO plugin to output it).
  5. Run the page through Google’s Rich Results Test and the schema.org validator; fix every error.
  6. View source on the live page to confirm exactly one LocalBusiness block exists.
  7. Diary a quarterly check: hours, phone, service area, links.

What schema won’t do

It won’t put you in AI answers by itself, and no one can pay OpenAI, Google, Anthropic, or Perplexity for placement in organic AI answers today. What schema does is make you unambiguous — so that when AI systems retrieve pages about your market, the facts about you line up everywhere they look. Pair it with an llms.txt file and, above all, a complete Google Business Profile and consistent directory presence. If you run a home-services company, our home services page covers the full picture for your trade.

To see how AI systems describe your business right now — before and after you ship the markup — run a free AI visibility scan.

Common questions

Does schema markup help AI visibility?

It helps as a consistency input. AI systems that retrieve web pages have to extract your name, address, phone, and hours from prose, and prose is ambiguous; JSON-LD states those facts in a format machines parse without guessing. In our audits, businesses with clean structured data and consistent contact details across the web get described more accurately. It is not a placement lever, and nobody can promise it will make AI systems recommend you.

Which schema type should a local business use?

Use the most specific schema.org subtype that matches your business, and fall back to LocalBusiness if none fits. Examples: Plumber, Electrician, HVACBusiness, RoofingContractor, Dentist, RealEstateAgent, and FinancialService for mortgage brokers. Avoid the generic Organization type — it discards the local signals that matter most for local queries.

Where do I add LocalBusiness schema?

Add it as a script tag of type application/ld+json in the HTML of your website, at minimum on the page that shows your name, address, and phone — usually the homepage or contact page. On WordPress, most SEO plugins can output it; on a static site, paste the block into your page template. It should describe information that is actually visible on that page.

Does schema guarantee I show up in AI answers?

No. Schema markup makes your basic facts unambiguous to machines; it does not decide whether an AI answer mentions you. Visibility depends mostly on whether you are present on the sources AI systems retrieve and cite — directories, review platforms, local press — with consistent details everywhere. Schema is one input among several, and anyone guaranteeing AI placement from markup alone is guessing.

See what AI actually says about your business.

Free 30-second scan — real queries against live AI systems, no simulations. Then the full 70+ answer report with your score and the fix plan if you want it.

Run my free scan →
Keep reading

AI assistant answers vary by time, phrasing, location, and model version. Nothing on this page is a guarantee of rankings, mentions, or citations — we describe the inputs AI systems observably rely on, and we measure results per business with timestamped samples.