SchemaForAI
Ad

Free Local Business Schema Generator for AI Search

Generate JSON-LD LocalBusiness schema with full NAP, opening hours, geo, and social profiles. Optimized for ChatGPT, Google AI Overviews, Perplexity local search. No sign-up.

Business Details

LocalBusiness Schema

The public-facing name of your business.

Use the name as it appears on Google Business Profile — consistency is the #1 local-AI signal.

Pick the most specific Schema.org LocalBusiness subtype.

Specificity wins — Restaurant beats LocalBusiness for a café, Dentist beats MedicalBusiness for a dental office.

Minimum 50 characters. AI local search picks a primary source based on description depth.

0 / 1500

Mention neighborhood/city, specialties, and unique details (e.g. 'wood-fired pizza in Capitol Hill').

Street number and name (no suite — put that here if you need to).

City or locality.

State, province, or region code.

Postal or ZIP code.

Two-letter ISO country code (e.g. US, GB, CA).

Public phone number in international format.

Phone is the primary disambiguation signal for AI local search — a consistent phone across NAP listings beats backlinks.

Canonical website URL.

Photo of the business (optional but strongly recommended).

Storefront photos appear directly in AI local answers. Use a real, recent shot, not a logo.

Dollar signs ($, $$, $$$, $$$$) or a range like $10–$30.

Decimal latitude (optional but improves map accuracy).

Decimal longitude (optional but improves map accuracy).

Opening Hours

Add rows for each day your business is open.

0 items

Opening hours are the #2 citation signal for AI local search after NAP — fill them in for every day.

Social Profiles / sameAs URLs

Links to Facebook, Instagram, LinkedIn, Yelp, Google Business Profile, etc.

0 items

sameAs is how AI engines confirm this business is the same entity they know from other platforms. Every link is a vote.

JSON-LD
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Your business name",
  "description": "What the business does…",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "Seattle",
    "addressRegion": "WA",
    "postalCode": "98101",
    "addressCountry": "US"
  },
  "telephone": "+1-206-555-0123",
  "url": "https://example.com"
}

AI Readiness Score

Get a 0–100 score showing how likely AI search engines are to parse and cite content from your page.

How to use this code:

  1. Copy the JSON-LD code above
  2. Paste inside <script type="application/ld+json">
  3. Add the script tag to your location page <head>
  4. Validate with Google Rich Results Test ↗
AI Simulator

See how ChatGPT answers — with and without your schema

Side-by-side comparison of what an AI assistant would return for a typical local business query, with vs. without the structured data you generated above.

3 of 3 remaining today

Sample user query

What are this business's hours and how do I reach them?

Without Schema
Generic answer

Click Simulate to see the AI response without schema.

With Schema
Detailed citation

Click Simulate to see the AI response with schema.

Install Guide

How to install this schema on your site

Pick your platform. Every step includes a copy-paste-ready code block where it applies.

  1. 1

    Install and activate a schema plugin: "Rank Math SEO", "Yoast SEO Premium", or "Schema Pro". For straight JSON-LD injection without a full SEO plugin, "WPCode" (formerly Insert Headers and Footers) is the simplest option.

  2. 2

    In Rank Math: go to the post edit screen → Rank Math sidebar → Schema tab → Schema Builder → paste your JSON-LD. In Yoast Premium: the Schema tab auto-generates standard types; use the Custom Schema plugin add-on to inject custom types.

  3. 3

    For WPCode: Code Snippets → Add Snippet → Custom Code (HTML/PHP) → paste the full <script type='application/ld+json'> tag. Set Location to 'Site Wide Header' or 'Specific Post/Page' depending on scope.

    html
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [ /* your Q&A pairs */ ]
    }
    </script>
  4. 4

    Publish the post. Open the live URL, view source, confirm the <script type="application/ld+json"> tag appears in the <head>.

  5. 5

    Validate at search.google.com/test/rich-results.

What is LocalBusiness Schema?

LocalBusiness schema is the family of Schema.org types that describe a business tied to a physical location — restaurants, stores, professional services, healthcare practices, home-service providers, hotels. It tells search engines and AI systems the canonical facts: who you are, where you are, when you are open, how to contact you, and how you connect to your presence on other platforms. Without it, local search and AI local answers rely on scraping your HTML and reconciling it with third-party directories, which produces worse results for everyone.

The schema.org hierarchy is deep. At the top is LocalBusiness. Under it sit dozens of industry-specific subtypes: Restaurant, Bakery, CafeOrCoffeeShop, Store, ClothingStore, AutomotiveBusiness, Dentist, MedicalClinic, HairSalon, Plumber, Electrician, LodgingBusiness, Hotel, and many more. Each subtype inherits everything from LocalBusiness and adds specificity-relevant fields. A realistic Restaurant markup looks like this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Acme Pizza",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main St",
    "addressLocality": "Seattle",
    "addressRegion": "WA",
    "postalCode": "98101",
    "addressCountry": "US"
  },
  "telephone": "+1-206-555-0123",
  "url": "https://acmepizza.com",
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification",
      "dayOfWeek": "https://schema.org/Monday",
      "opens": "11:00", "closes": "22:00" }
  ],
  "priceRange": "$$"
}
</script>

That markup gives AI engines everything they need to answer questions like "what are Acme Pizza's hours" or "is there a pizza place open at 9pm near me" — without guessing and without cross-referencing unreliable third parties.

Ad

Why LocalBusiness Schema Matters for AI Search

Local queries have the highest AI-vs-blue-links substitution rate of any query class. When someone asks "where can I get dim sum near Pike Place," ChatGPT, Perplexity, and Google AI Overviews all respond with a synthesized list of businesses — not a map with pins. The businesses that appear in that synthesized list are almost never the ones with the most links; they are the ones with the cleanest, most consistent, machine-readable identity data. LocalBusiness schema is the primary vehicle for that identity data on your own site.

Here is what AI engines specifically extract and weight:

  • NAP consistency triangulation: The business name, address, and phone from your schema are cross-referenced against every directory the AI engine has indexed. Perfect consistency across Yelp, Google Business, Apple Maps, and your schema creates a high-confidence entity; a single mismatch drops confidence to "probably the same but not certain" — which often means you don't appear in responses at all.
  • Subtype-filtered intent matching: Queries like "find a 24-hour pharmacy" filter candidates to businesses with the Pharmacy subtype. A drugstore marked up as generic LocalBusiness is ineligible for that query even if it is literally a pharmacy.
  • Opening-hours real-time reasoning: When a user asks "is X open now," the AI consults your OpeningHoursSpecification. Accurate hours are a citation signal; missing or stale hours are an anti-signal.
  • Geo-anchored proximity ranking: Latitude/longitude lets the AI engine's spatial reasoner calculate distance from the user without round-tripping to a geocoder. Businesses with geo are faster to surface and less prone to being misplaced.
  • Entity graph connections via sameAs: Each sameAs link is a vote that connects the schema-declared business to an external, independently-maintained identity. Five verified sameAs links beat fifty backlinks for local entity strength.
  • Price-tier filtering: priceRange lets AI engines answer "cheap" / "moderate" / "upscale" queries correctly. Businesses without it are either left out of those queries or guessed at — usually wrongly.

The compounding effect matters here: an AI engine that successfully serves your business in one query is more likely to include you in adjacent ones. A single well-marked-up location page with complete schema and consistent NAP outperforms a whole site with weaker signals on the same local queries.

LocalBusiness Schema Best Practices

Pick the deepest matching subtype

A fine-dining restaurant is a Restaurant, not a FoodEstablishment. A pediatric dentist is a Dentist, not a MedicalClinic. Specificity unlocks type-specific filters.

Match NAP across every platform you control

Your website, Google Business Profile, Facebook, Yelp, and industry directories must all render the same name, address, and phone — character for character.

Fill opening hours for every day

Include closed days explicitly when needed. "Closed Mondays" omitted from schema is interpreted by AI engines as unknown hours, not a closed day.

Use international phone format

+1-206-555-0123, not (206) 555-0123. International format lets AI voice assistants dial directly.

Geocode with a dropped pin

Use Google Maps to drop a pin on your actual entrance. Copy lat/lng to 5 decimal places — the precision pays off in AI proximity queries.

Link real sameAs profiles only

Don't link abandoned MySpace or defunct Foursquare pages. Each dead link is an AI engine trust cost.

Sync schema with Google Business Profile

Whenever you update GBP hours, address, or phone, update the on-site schema the same day. Divergence is the #1 cause of AI engines losing confidence in your entity.

One page per physical location

Multi-location businesses need one URL per location with its own LocalBusiness schema. Lists of locations on a single page fragment your entity.

How to Install LocalBusiness Schema

WordPress

  1. 1Generate the JSON-LD above and click Copy.
  2. 2Install a schema plugin such as Rank Math, Yoast SEO Premium, or Schema Pro — all support LocalBusiness templates.
  3. 3Alternatively, paste the raw JSON-LD via a code-injection plugin like WPCode, scoped to the location page only.
  4. 4Make sure your theme isn't already outputting conflicting LocalBusiness schema — having two LocalBusiness objects for the same URL confuses AI engines.
  5. 5Validate the live URL with Google Rich Results Test.

Squarespace / Wix

  1. 1Copy the generated JSON-LD.
  2. 2In Squarespace, use Code Injection → Page Header on the specific location page.
  3. 3In Wix, use the Custom Code section (Settings → Custom Code) and target the location page only.
  4. 4Both platforms will render the script in the page head at publish time.
  5. 5Verify rendering by viewing source on the live URL, then run the Rich Results Test.

Static / Next.js site

  1. 1Keep one source-of-truth file per location (e.g. locations/seattle.json) with NAP, hours, geo.
  2. 2At build time, inject LocalBusiness JSON-LD into each location page from that data.
  3. 3Whenever hours or contact change, update the source file and rebuild — don't hand-edit generated pages.
  4. 4If you publish on a CDN with ISR/SSG, invalidate affected pages on data changes.
  5. 5Add a smoke test that validates every location page passes the Rich Results Test.

Frequently Asked Questions

Do I need LocalBusiness schema if I already have Google Business Profile?+
Yes — they do different jobs. Google Business Profile (GBP) is the authoritative listing Google uses for its own local surfaces (Maps, local pack, the knowledge panel). LocalBusiness schema on your website is the machine-readable version of the same facts, and it is what AI engines outside Google read. Perplexity, ChatGPT, and Bing's AI surfaces cross-reference schema on your site against the information they see on GBP, Yelp, Facebook, and other directories. Missing schema on your own site is treated as a soft signal that you aren't actively claiming the business — which deprioritizes you even in queries where the facts match across directories. The two together are stronger than either alone.
What exactly is NAP and why does it matter so much?+
NAP stands for Name, Address, Phone — the three pieces of identity data that let any search or AI system confirm you are the same business they've seen elsewhere. Inconsistent NAP across your website schema, your Google Business Profile, Yelp, Apple Maps, Facebook, and industry directories causes AI engines to either deduplicate you incorrectly or treat each variant as a separate weaker entity. A single transposed digit in your phone number, or using "St." in one place and "Street" in another, can fragment your authority. AI local search specifically uses NAP triangulation — it matches the business a user asks about to the entity with the strongest consistent NAP signal across platforms. This is why specifying NAP in LocalBusiness schema is the single highest-leverage piece of structured data a local business can add.
Which LocalBusiness subtype should I pick?+
Always pick the most specific subtype that fits. A cafe is a CafeOrCoffeeShop, not just a LocalBusiness; a dental practice is a Dentist, not a MedicalBusiness. Specificity matters for three reasons: Google's rich-result eligibility differs by subtype, AI engines use subtype to filter candidates in intent-specific queries ("find me a sushi restaurant"), and some subtypes unlock additional schema properties (Restaurant supports servesCuisine, menu, acceptsReservations). If none of the specific subtypes fit, fall back to LocalBusiness. Don't pick a subtype that's aspirationally accurate — a bakery that also sells coffee is still a Bakery, not a CafeOrCoffeeShop.
Should I include opening hours in schema?+
Yes, and for every day you are open. Opening hours are the second-highest-value local signal after NAP. AI assistants routinely answer queries like "is Acme Coffee open right now?" directly from schema-declared hours. Missing hours cause AI engines to either refuse to answer (leaving your competitor to fill the gap) or fall back to stale data from a directory. Use OpeningHoursSpecification with individual day/time entries rather than the older openingHours string format — it supports split shifts, seasonal hours, and irregular schedules more cleanly. Update the schema whenever your hours change; drift is the most common cause of AI-sent customers arriving at a locked door.
How do I handle multiple locations?+
Each physical location needs its own page with its own LocalBusiness schema. Don't try to list all locations on a single "Locations" page with a single schema — that confuses both Google and AI engines. Build one page per location under a URL pattern like /locations/seattle, /locations/portland, each with LocalBusiness schema reflecting that specific address, phone, and hours. On the parent page (or your homepage), use Organization schema with sameAs links to each location page. This gives AI engines a clean entity tree: the parent brand, with n child locations, each addressable as a distinct LocalBusiness. Multi-location chains that get this right often outrank franchises with stronger domain authority but flat schema structures.
Is geo (latitude/longitude) important?+
It is strongly recommended, especially if your address is ambiguous (rural, new development, shared strip-mall) or if you've been geocoded incorrectly in the past. Latitude and longitude pinned to 4–5 decimal places let AI engines and map systems bypass address geocoding entirely, which is the single most common source of misplaced pins. You can find your coordinates by dropping a pin on your exact entrance in Google Maps. If your NAP already geocodes correctly, the lift from adding geo is modest — but it costs nothing and eliminates a whole class of potential errors.
Does sameAs really improve AI local visibility?+
Enormously, and the links aren't cosmetic. sameAs is how AI engines confirm that the business on your website is the same entity they know from LinkedIn, Facebook, Yelp, Instagram, TripAdvisor, or your industry-specific directories. Each verified link increases your entity confidence score in the AI's knowledge graph. Only include profiles you actively maintain — an abandoned MySpace page linked via sameAs is worse than no link. The highest-value sameAs links are your Google Business Profile's URL, your primary directory listing (Yelp for restaurants, Healthgrades for doctors, Zillow for real estate), and your main social channel.
Can I claim priceRange or does that trigger reviews?+
priceRange is a signal, not a guaranteed rich result, and claiming it does not trigger manual review. Use the conventional dollar-sign notation ($ / $$ / $$$ / $$$$) for broad categories, or a specific range like "$10–$30" for eateries. The value should match what users actually experience. AI restaurant and service queries often filter by price tier ("find me a cheap lunch spot"), and a business with priceRange declared typically appears in those responses ahead of businesses without it. Don't set priceRange aspirationally — AI engines correlate your declared range with external signals (menu prices scraped from Yelp, check-size data from review text).

Related Schema Generators

Ad