The two minutes that decide how machines read your business

Somebody searched for your business five minutes ago. Maybe they typed the name plus "hours". Maybe they asked an assistant whether you are open on Saturdays. What came back depended on a messy assortment of signals — your Google Business Profile, a Yelp page, an old Facebook post — and on whether all of those sources agree about who you are, where you are, and when you answer the phone. Structured data is the one part of that picture you control completely, directly on your own site.

I have audited enough small-business sites to know how this usually goes. The owner knows schema exists. A developer or an SEO checklist mentioned it once. But actually writing JSON-LD by hand feels like filling out a customs form in a language you half-remember — one misplaced comma and the whole thing silently fails. So it gets skipped, sometimes for years, while a competitor with an identical business and a competently marked-up contact page picks up the enriched listing. That is a shame, because the markup itself takes about two minutes once the fields are laid out plainly. That is exactly what this generator does: it lays the fields out plainly, shows you the JSON-LD as you type, and stays out of your way.

One thing this article will not do is promise stars and rankings. We will spend real time on what LocalBusiness markup can and cannot do, including the parts of Google's review policy that catch honest people off guard. What you get here is the unglamorous, verifiable version: correct structure, honest limits, and a workflow you can repeat for every location you manage.

What LocalBusiness schema actually is

LocalBusiness is a schema.org type that describes a physical business — a restaurant, a dentist's office, a branch of a bank, a bowling alley. Schema.org is a shared vocabulary that the major search engines agreed on back in 2011, and it lets you state facts about your business in a format machines can read without guessing. A crawler that sees your address in a footer "knows" it only probabilistically; the same crawler seeing a PostalAddress object with streetAddress, addressLocality, addressRegion and postalCode properties *knows* it structurally.

The format Google prefers is JSON-LD: a single `<script type="application/ld+json">` block in your page's head or body. You are describing the same facts your page already shows — name, address, phone, hours — but in a labeled, nested structure. Google's structured data guidelines are blunt about the two rules that matter most: the marked-up information must match what is actually visible on the page, and it must be complete and specific rather than a hollow shell.

A point worth internalizing: LocalBusiness sits at the intersection of Organization and Place in the schema.org hierarchy. Your business is being described both as an entity (it has a name, a phone, a URL) and as a location (it has an address, hours, a place on the map). Most local-SEO confusion I see comes from forgetting one half of that pairing.

If you run more than a pure storefront — a service area business, a professional practice, an online store with one physical outlet — you will meet sibling types like Organization for the company itself, Service for what you sell, and Product for items with reviews. Our Organization Schema Generator handles the entity side, and the Product Schema Generator covers reviewable products — those matter because, as we will get into, self-marking-up your business reviews is the one thing Google categorically refuses to reward.

Why search engines lean on structured data for local results

Local results carry unusually high stakes for accuracy. When Google shows "Open until 6 PM" for a plumber who actually closed at 4, the searcher does not blame Google — they blame the plumber. So the systems that assemble local knowledge are conservative: they prefer data that is structured, consistent across sources, and corroborated. Your markup is one of the cleanest signals available because you wrote it deliberately, on your own domain, in a format with no ambiguity.

There is also an audience beyond Google. Bing runs its own entity understanding and feeds a growing share of AI search. Apple Maps, Yelp, and directory aggregators all parse structured data to one degree or another. And the newer AI assistants — the ones people now ask "find me a coffee shop near me that is open" — are trained on and grounded in corpora where well-structured pages are simply easier to trust and cite. Schema.org itself reports LocalBusiness usage across millions of domains, which tells you two things: it is mainstream enough that absence is a gap, and common enough that merely having it is not a differentiator. The differentiator is having it *correct*.

The honest framing, which I repeat to every client who asks: schema is plumbing, not a megaphone. It decides how reliably your facts flow into systems that are already deciding whether to show you. The megaphones — proximity, relevance, prominence, your review profile — work regardless. But good plumbing makes every other signal easier to reconcile, and bad plumbing (contradictory addresses, stale hours) actively undermines them.

Generating your markup — the 90-second version

The generator above is deliberately spare. Every field is one a local business already knows off the top of its head; nothing needs to be looked up in documentation. The output panel re-renders on every keystroke, so you can watch the JSON-LD take shape and learn the shape of the format almost by osmosis.

  1. Fill in the business identity

    Enter your exact legal-and-signage business name, your public phone number, and your @type. The default is CafeOrCoffeeShop for the demo; the type box accepts any schema.org LocalBusiness subtype (Dentist, Electrician, AutoRepair, LodgingBusiness, Restaurant, and dozens more).

  2. Enter the full street address

    Street, city, state and ZIP exactly as they appear on your Google Business Profile — down to the abbreviations. The tool emits a properly nested PostalAddress with addressCountry set to US. Every character of mismatch between your profile and your page is a small credibility leak.

  3. Review the hours block

    The demo defaults to Monday-Friday, 07:00 to 18:00, expressed as an OpeningHoursSpecification object — the structured form Google documents in its own local business examples. If your hours differ, edit the generated JSON directly or regenerate; the format is human-readable enough for that.

  4. Decide on the rating fields — carefully

    The rating and review-count fields are optional. Leave them empty unless you have read the review policy section below; for most local businesses the safest choice is to omit self-referential ratings entirely. When the rating value is 0 or blank, the generator drops the aggregateRating object from the output.

  5. Copy, paste, validate

    Copy the JSON-LD block, paste it into the <head> of your homepage or contact page (or inject it via Google Tag Manager), then run it through the Rich Results Test before you call it done.

Every field, and what Google does with it

Here is what the generator emits, field by field, with the schema.org property each maps to and why a crawler cares. The "required" column reflects Google's documented preferences for local business markup — treat required as "omit at the cost of usefulness" rather than "page explodes", because schema validation is forgiving to a fault.

FieldSchema propertyRequiredWhat it does
Business namenameYesThe canonical name of the entity. Match it to signage and your Google Business Profile exactly — no keyword stuffing; Google filters "SEO names" in profiles and distrusts mismatches.
Business type@typeYesThe LocalBusiness subtype. More specific is better: CafeOrCoffeeShop tells a vertical crawler more than LocalBusiness does. Invalid values silently degrade to nothing.
PhonetelephoneRecommendedThe number you actually answer. Format with country code (+1-...) so international crawlers and map platforms parse it unambiguously.
Street / City / State / ZIPaddress (PostalAddress)YesYour physical address as structured properties. This is the address that gets reconciled against your profile, your citations, and the pin on the map.
HoursopeningHoursSpecificationRecommendedStructured opening hours with dayOfWeek, opens and closes. Drives "Open now" style features that systems compute from a visitor's local time.
Rating / Review countaggregateRatingOptionalAn average rating with the count it came from. Eligibility rules for showing stars are strict — see the review section before using these.
(fixed) @id@idBest practiceA stable identifier for the entity (https://yourdomain/#business). Lets other markup on your site reference the same business instead of creating duplicate entities.
Field reference for the generated LocalBusiness JSON-LD

Two omissions are worth naming so you can add them yourself when relevant: priceRange (schema.org's own property, a coarse "$$"-style signal that some verticals display) and sameAs (URLs of your social profiles and other canonical listings, which help entity reconciliation). geo coordinates are valuable for service-area disambiguation but should come from your actual map pin, not a hand-typed guess. The Meta Tag Generator is the natural next stop once your entity markup is done — a location page with perfect schema and a default "<title>Home</title>" is leaving the SERP unclaimed.

A complete worked example

The default values in the tool are a realistic small business: Sam's Coffee House, a cafe in Austin, Texas. Here is exactly what the generator produces from those fields — input on the left, output on the right — so you can see the mapping from plain answers to structured data.

Sam's Coffee House, Austin TX — rated fields left blank

Input

name:        Sam's Coffee House
type:        CafeOrCoffeeShop
phone:       +1-512-555-0100
street:      123 Main Street
city:        Austin
state:       TX
zip:         78701
rating:      (blank — omitted)
review count: (blank — omitted)

Output

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.com/#business",
  "name": "Sam's Coffee House",
  "telephone": "+1-512-555-0100",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "openingHoursSpecification": {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "07:00",
    "closes": "18:00"
  }
}
</script>

Notice what the structure buys you. The address is not a string a parser has to dissect — it is five labeled properties. The hours are not a sentence like "we're open weekdays 7 to 6" but a computable object: any system can now answer "is Sam's open right now" for any visitor in any timezone without natural-language guessing. That is the entire value proposition of structured data in one example, and it is why getting the nesting right matters more than adding more fields.

If you fill in the rating fields — say 4.8 with 212 reviews — the output gains an aggregateRating object. For a cafe, that object is allowed by schema.org syntax but will not earn stars in Google's results, for reasons the next two sections cover in detail. Knowing when to leave a valid field empty is genuinely part of local SEO competence.

Choosing the right @type — it matters more than you think

The @type box accepts any of the dozens of LocalBusiness subtypes schema.org defines, and the choice is not cosmetic. Vertical crawlers and local packs filter by category. A Dentist markup routes your entity toward health-related local surfaces; an AutoRepair toward automotive ones; LodgingBusiness toward travel-adjacent ones. The most specific accurate type beats the generic parent every time, the same way choosing your Google Business Profile category carefully does.

  • Exact-match subtypes: Restaurant, CafeOrCoffeeShop, Bakery, BarOrPub, Dentist, Physician, Pharmacy, VeterinaryCare, Electrician, Plumber, HairSalon, HealthAndBeautyBusiness, AutoRepair, AutoPartsStore, HardwareStore, GroceryStore, ClothingStore, ElectronicsStore, LodgingBusiness, ChildCare, ElementarySchool, Gym, Library, Museum, MovieTheater, NightClub, Park, Playground, RealEstateAgent, SelfStorage, ShoppingCenter, TouristInformationCenter, TravelAgency, FuneralHome, LegalService, AccountingService, InsuranceAgency, FinancialService, MovingCompany, Locksmith, HousePainter, RoofingContractor, GeneralContractor, HomeAndConstructionBusiness, ProfessionalService.
  • Parent types when nothing fits: LocalBusiness itself is always valid and loses you nothing structural — you simply forgo the vertical classification.
  • What not to do: do not stack unrelated types to "cast a wider net" (an entity that is simultaneously a Dentist and a NightClub reads as garbage), and do not invent types; anything not in the schema.org hierarchy is ignored or, worse, invalidates the surrounding markup.

A practical tie-breaker: if your Google Business Profile category has an obvious schema.org cousin, use it. If the mapping is unclear — you run a hybrid business, a co-working space with a cafe, a salon inside a gym — the parent type plus accurate properties beats a wrong subtype. Entity understanding is cumulative and error-tolerant, but only when the errors are omissions, not contradictions.

Ratings and reviews: read this before you paste stars into your markup

This is the section I would tattoo on the forearm of every small-business owner who has ever copied a "5-star reviews schema" snippet from a blog post. Google's review snippet rules include a category of markup it calls self-serving: reviews or ratings of an entity that the entity itself controls. Your business marking up its own testimonials — your own customers' reviews, hosted on your own site, inside your own LocalBusiness markup — is the textbook definition. It is not a gray area: it is explicitly ineligible for star rich results, no matter how genuine the reviews are.

So why does this generator offer rating fields at all? Because there are legitimate uses that are not self-serving: a business that legitimately hosts reviews of *products it sells but does not manufacture*, or (more commonly) a webmaster marking up an entity as a service to a third party — a directory, a local news site, a chamber of commerce listing. If you are the business itself, my standing advice is to leave the rating fields empty, mark up your products or services where genuine third-party reviews exist, and let your Google Business Profile — where stars come with the platform's own verification — carry the aggregate opinion. The Review Rating Schema Generator exists for the legitimate cases, and its defaults assume you are reviewing someone else's offering.

The good news is that none of this makes your hard-won reviews wasted. Reviews power your Business Profile, your reputation, your conversion rate on the page itself. The mistake is only in *marking them up as if they were independent* — that specific act earns nothing and reads as manipulation to the one entity whose opinion matters.

NAP consistency — the unglamorous factor that outweighs clever markup

NAP stands for Name, Address, Phone, and it is the oldest idea in local SEO precisely because it still works. The mechanism is mundane: every directory, map platform, data aggregator and search engine independently "knows" your business, and they cross-check. When your site, your Google Business Profile, your Yelp page and the chamber of commerce listing all say the same thing, confidence rises. When your site says "123 Main St, Suite 4B" and your profile says "123 Main Street" and an old directory says "123 N Main", systems reconcile the variants — usually correctly, occasionally by choosing the wrong one, always with slightly less trust than a clean match would have earned.

Structured data turns NAP from a formatting coincidence into an assertion. That is its superpower *and* its risk: if your markup asserts an address that contradicts your profile, you have automated the contradiction. So the real workflow for a multi-location or long-standing business is: audit first, generate second. Pull up your Google Business Profile, your website footer, and your top three citations, put them side by side, and pick the canonical form of every field — then enter exactly that into the generator.

  • Pick one name form. If signage, incorporation papers and profile disagree, use the customer-facing form on the site and profile, and keep the legal form in the footer only if required.
  • Pick one address form. Decide "St" vs "Street" and suite placement once, then use it everywhere you control.
  • Pick one phone number. The local line and the call-tracking number cannot both be canonical; choose the one humans should dial forever.
  • Re-audit quarterly. Hours change seasonally, suites renumber, businesses move. A stale-but-structured address is worse than a stale footer because it is asserted with more confidence.

I will resist the urge to claim NAP consistency "boosts rankings" as a blanket statement, because the effect is indirect: it reduces reconciliation failures and feeds cleaner data to every downstream system. What I can say from field observation is that when a local business's visibility mysteriously lags its reputation, contradictory NAP turns up in the audit more often than any missing schema type. Fix the contradictions, then let markup lock them in.

Where the JSON-LD belongs on your page

Placement questions generate surprising folklore, so here is the settled version. Google reads JSON-LD anywhere in the document — head or body — and states plainly that placement does not affect how it is processed. What actually matters is what page it sits on and whether the page corroborates it.

  • Homepage or contact/location page are the natural hosts. The page should visibly show the same name, address, phone and hours the markup asserts — Google's guidelines require the marked-up data to match visible content.
  • One location, one entity, one @id. If you have a single location, one block on one page is correct. Do not paste the same block into every page of a brochure site; it adds nothing and multiplies your maintenance surface.
  • Multi-location businesses: give each location its own page (yoursite.com/locations/austin) with its own markup and its own visible details. Sitewide copy-paste of one location's data is the classic multi-location failure mode.
  • Google Tag Manager works if you cannot touch templates directly — GTM has a native JSON-LD tag type. It costs you nothing in parsing, though editing JSON inside a tag manager is clunkier than editing a template.

On technical placement, one guardrail: keep the JSON-LD as a single well-formed block per entity. Concatenating several schema types into one script (your LocalBusiness plus, say, a website-level WebSite object) works only if you wrap them properly as a @graph array — otherwise emit separate script tags per entity. The simplest safe pattern, and the one I recommend to hands-on owners, is one script tag per entity, on the page that is about that entity.

Validating before you ship

Markup fails silently. A single stray comma, an unescaped apostrophe, a property name typo — the page renders fine, the tool "worked", and the crawler quietly discards the whole block. That silence is why validation is not an optional polish step; it is the only feedback loop you get.

  1. Rich Results Test (Google)

    Paste the URL (or the raw JSON-LD) into Google's Rich Results Test. It reports which rich result types the page is eligible for and flags errors and warnings per property. For LocalBusiness, expect "local business" detection plus warnings for any recommended property you omitted — warnings are nudges, not failures.

  2. Schema Markup Validator (validator.schema.org)

    The community validator checks full syntax against the schema.org vocabulary, beyond Google's feature-specific lens. Run it whenever you add properties Google's test does not model, like priceRange or geo.

  3. Search Console over time

    After deployment, watch the Enhancements reports in Search Console for the site. Google reprocesses markup on its crawl schedule, and the reports surface issues on real URLs at real scale — including templates you forgot you had.

  4. The one-minute human check

    View source, find your script tag, and read it. Apostrophes in business names (Sam's) must be fine in JSON — they are — but hand-edited blocks accumulate accidental smart quotes and HTML entities that no validator catches if the block is also missing entirely.

A validation nuance worth knowing: eligibility is not display. Passing the Rich Results Test means your markup *qualifies* a page for a feature, not that Google will show it. Star displays in particular are rationed hard — self-serving rules, quality thresholds, and outright policy changes have made review stars rarer every year, which is exactly why this article keeps steering you away from counting on them.

What schema will and will not do for your rankings

Let me be the boring honest voice in a genre that runs on hype. Adding LocalBusiness markup will not move you from position 9 to position 3 next week. Google has said for years, consistently, that structured data is not a ranking factor in itself. What it does is three specific, bounded things: it removes ambiguity about your entity's facts, it unlocks eligibility for feature displays that plain HTML cannot earn, and it makes your page legible to the expanding zoo of non-Google systems that consume schema directly. Those are real advantages that compound with everything else — they are just not magic.

ClaimVerdictThe reality
"Schema gets you to the top of the local pack"FalseLocal pack ordering runs on proximity, prominence and relevance signals; profile completeness and reviews dominate. Schema supports the knowledge layer behind them.
"Schema earns star ratings for my business"Usually noSelf-serving LocalBusiness ratings are ineligible. Stars attach to genuinely third-party-reviewed products, services, and content — or to your Business Profile itself.
"More properties = better rankings"FalseCompleteness and accuracy help features and understanding; stuffing optional properties with junk can trigger spam signals. Depth without truth is negative value.
"Schema future-proofs me for AI search"Partly trueStructured facts are disproportionately consumable by answer engines and assistants. It is a legibility investment with a real, if unquantified, audience.
"Invalid schema hurts my site"Mostly no, but...Invalid markup is typically ignored, not penalized. The exception is deliberate misrepresentation — fake ratings, invisible text, mismatched data — which is a spam-policy problem, not a syntax one.
Common schema claims, checked against documented behavior

The pattern across every row of that table: schema is an input to systems that were already judging you, not a lever that moves the judgment. Budget your local-SEO effort accordingly — an afternoon on your Google Business Profile, reviews and NAP beats a weekend of markup tinkering. Then spend the two minutes here, because the marginal cost of correct markup is now trivial and the marginal clarity it buys is permanent.

Questions people actually ask about local business schema

Does LocalBusiness schema improve my local rankings?

Not directly. It makes your facts unambiguous to search engines and unlocks feature eligibility, while the heavy lifting stays with your Business Profile, reviews, and NAP consistency.

Can I show star ratings for my own reviews?

No. Self-serving reviews — your business marking up reviews of itself, including via embedded widgets — are ineligible for stars, and fake or incentivized reviews are prohibited outright.

Where do I paste the JSON-LD?

In the <head> or body of your homepage or contact page, or inject via Google Tag Manager. The marked-up facts must be visible on that same page.

Which @type should I pick?

The most specific accurate subtype — Restaurant, Dentist, Electrician. Fall back to plain LocalBusiness when nothing fits. Never stack unrelated types.

Is my business data stored anywhere?

No. This generator runs entirely in your browser; nothing you type is uploaded or logged. Close the tab and it is gone.

How do I know the output is valid?

Run it through Google's Rich Results Test and the Schema Markup Validator before publishing. Both are free and catch silent failures like stray commas.

Does this replace a Google Business Profile?

No — they are complements. The profile feeds Google's listings; on-site schema describes you to every other crawler, map platform and AI assistant that reads your page.

Can I use one schema block for multiple locations?

No. Each location deserves its own page, its own visible details, and its own markup. Copy-pasting one location's data sitewide is the classic multi-location error.

Tools that pair well with this one

Local markup rarely lives alone in a well-built page. The natural companions in our SEO tools collection: the Organization Schema Generator for the corporate entity above the storefront (one is a Place, the other an Organization, and mature sites mark up both), the FAQ Schema Generator for the questions your location page already answers in prose — genuinely useful markup that assistants and answer engines read eagerly, even as its SERP display has been rationed to high-authority sites. The Meta Tag Generator and Open Graph Generator complete the page-level layer, because a location page that shares beautifully into group chats earns local traffic that no structured data manufactures.

Once the entity layer is done, audit the site-level plumbing: the XML Sitemap Generator to make sure your location pages are discoverable in the first place, and the Robots.txt Generator with its AI-crawler policies if you care about being cited by the assistants your customers increasingly ask. The Google SERP Simulator closes the loop by showing how your page's title and description will actually render — the last honest check between "technically marked up" and "worth clicking".

The short version

LocalBusiness markup is a two-minute task with permanent payoff, and almost everything written about it overcomplicates it. State your real name, your real address, your real phone, your real hours — in the structure machines expect, on the page that visibly shows the same facts — and you have done the whole job. Skip the rating fields unless you genuinely sit outside the self-serving rule. Validate once with two free tools, and re-validate whenever hours or addresses change.

Sources and further reading

We cite primary sources (standards bodies, government agencies, official documentation) wherever they exist so you can verify every number on this page yourself.