Ravevine
Free • No sign-up • Instant JSON-LD

Local Business Schema Markup Generator

Build valid LocalBusiness structured data for your website in seconds. Fill in your details, copy the JSON-LD, paste it into your site — and help Google understand and surface your business.

Business basics
Address
Opening hours (leave blank to skip a day)
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
Rating & social
Need more reviews to fill this in? Get your review link →
          
Validate ↗

Paste the copied block inside the <head> of your page.

What is LocalBusiness schema markup?

LocalBusiness schema is a small block of JSON-LD structured data you add to your website. It spells out your business facts — name, address, phone, opening hours, price range, and ratings — in the exact format search engines read. Google uses it to understand your business, show richer results, and reinforce the local relevance signals that help you appear in the map pack and local search.

How to add it to your site

01

Fill in

Complete the fields — the JSON-LD updates as you type.

02

Copy

Hit “Copy code” to grab the full <script> block.

03

Paste

Drop it into your page <head> (or CMS/SEO plugin) and validate.

Everything here runs in your browser — no account, nothing stored.

LocalBusiness schema properties: required vs recommended

Google strictly requires only two fields — name and address — but a handful of recommended properties are what actually earn you the richer listing. Here is what each one does and where it stands.

Property Required? What it does
@type Required Names the schema type. Use the most specific LocalBusiness subtype that fits (Restaurant, Dentist, HairSalon) rather than the generic LocalBusiness. With @context, it is structurally required for any valid JSON-LD. The next section covers how to choose it.
name Required Your official business name. One of the two fields Google strictly requires for rich-result eligibility.
address Required The physical location, as a nested PostalAddress with streetAddress, addressLocality, addressRegion, postalCode, and addressCountry. A bare text string usually triggers a "missing field address" error.
telephone Recommended Primary contact number with country and area code. Technically recommended, but the Rich Results Test and most SEO plugins treat it as effectively required.
url Recommended The canonical, working URL of this specific location — what distinguishes it from other branches of the same brand.
openingHoursSpecification Recommended Business hours via dayOfWeek, opens, and closes in hh:mm:ss. Use 00:0023:59 for 24-hour days, and give split shifts (lunch breaks) two separate entries rather than one with a gap.
geo Recommended Pinpoints the location on Maps as GeoCoordinates with latitude and longitude. Google wants at least 5 decimal places of precision.
priceRange Recommended Relative price level shown to users — either a numeric range ($10-15) or normalized currency signs ($$$). Keep it under 100 characters.
image Recommended A real, crawlable image URL (or ImageObject). Recommended on paper, but Google now effectively requires it for many LocalBusiness rich results. Use high-resolution images (min 50K px area) in 16x9, 4x3, and 1x1.
aggregateRating Recommended Powers the star/review snippet, but only when the markup describes another business. A business rating itself is ineligible for the star feature. See the caveat below.
sameAs Recommended Links to your official profiles (Facebook, Instagram, Yelp, and the like). Inherited from Organization, it helps Google confirm your business is one consistent entity across the web.

One caveat on ratings: only add aggregateRating if the reviews are genuine and visibly shown on the same page. Google's self-serving rule means a business marking up reviews of itself is ineligible for the star feature, and inventing or hiding ratings is a policy violation that can get the markup filtered or penalized. If you do not have real reviews to display yet, leave the rating fields empty — you can collect more reviews first, then add the rating once it reflects what's actually on the page.

Choosing the right business type

Every LocalBusiness item needs an @type. The instinct is to leave it as the generic LocalBusiness, but Google asks you to use the most specific subtype that fits your business instead. A pizzeria is a Restaurant. A dental practice is a Dentist. An emergency plumber is a Plumber. The more precisely you label yourself, the better Google matches you to the right category, and the right rich result.

The reason is how schema.org is built. Subtypes inherit from their parents: Restaurant is a kind of FoodEstablishment, which is a kind of LocalBusiness, which is a kind of Organization and Place. So picking Restaurant keeps every LocalBusiness field you already filled in and adds ones that only make sense for food, like servesCuisine and a link to your menu. A Hotel gains checkinTime and checkoutTime; a Dentist can carry a medicalSpecialty. Generic LocalBusiness never unlocks those.

To be clear about what this does and does not do: a more specific type makes you eligible for more relevant features and helps Google understand your category. It does not by itself move your ranking, and it does not guarantee any rich result will show — Google decides that. It simply gives Google a cleaner, more accurate picture to work from.

Common subtypes and a real example of each

  • Restaurant — a neighborhood pizzeria like Tony's Pizza Napoletana. A FoodEstablishment subtype that supports servesCuisine and menu.
  • Dentist — a practice like Bright Smile Dental Care. A MedicalBusiness subtype that supports medicalSpecialty.
  • Plumber — an emergency service like Mr. Rooter Plumbing of Austin. A HomeAndConstructionBusiness subtype; pair it with areaServed for a service-area business.
  • HairSalon — a salon like Glow Hair Studio. A HealthAndBeautyBusiness subtype that pairs well with priceRange and opening hours.
  • AutoRepair — a garage like Pep Boys Auto Service. An AutomotiveBusiness subtype; add openingHours and geo.
  • Attorney / LegalService — a firm like Smith & Associates Law Office. Pair with areaServed for the regions you cover.
  • Hotel — a property like The Marker San Francisco. A LodgingBusiness subtype that supports checkinTime and checkoutTime.
  • Store — a retail shop like Main Street Hardware. Go more specific where you can: HardwareStore, ClothingStore, or ElectronicsStore.

The Business type dropdown in the generator above covers these and more — restaurants and cafes, the home-and-construction trades, salons and spas, medical and legal practices, auto repair, real estate, fitness, and the rest. Pick the entry that matches your business and the JSON-LD updates its @type as you select.

When to fall back to generic LocalBusiness

If nothing in the list genuinely describes what you do, use plain LocalBusiness rather than forcing a poor fit. An accurate generic type is better than a precise wrong one — a mislabeled business confuses Google more than a broad-but-honest one. When in doubt, browse the full schema.org tree to see whether a closer subtype exists, then validate the result with Google's Rich Results Test before you publish.

How to add schema markup to your website

Wherever it goes, the block you paste is the <script type="application/ld+json"> the generator above produced, and Google reads it whether it sits in the <head> or just before the closing </body> tag. The harder question is where that field lives on your platform. Here is where it goes on the platforms most local businesses use.

WordPress

If you run Yoast SEO or Rank Math, your site is probably already emitting some LocalBusiness schema automatically, so check first and avoid two conflicting blocks on the same page. Yoast has no field for pasting raw JSON-LD; its Schema tab only lets you pick from preset page and article types. To paste your own markup, use Rank Math or inject it in the header.

  1. Rank Math (free): open the post or page, open the Rank Math panel, and go to the Schema tab, then Schema Generator.
  2. Click the Import tab, choose JSON-LD/Custom Code, paste your block, and click Process Code.
  3. Click Use, leave the @type as-is, then Save for this Post.
  4. Header injection (no SEO plugin): install WPCode, go to Code Snippets → Header & Footer, paste the full <script> block into the Header box, and save. It outputs in the <head> sitewide — use WPCode's conditions to limit it to one page.
  5. Developer route: add the script via a wp_head action in a child theme's functions.php so theme updates don't wipe it.

Wix

  1. Go to Pages & Menu, click the three-dots icon next to the page, and choose SEO basics.
  2. Open the Advanced SEO tab, then Structured Data Markup.
  3. Click + Add New Markup and paste your JSON-LD into the markup field.
  4. Click Apply.

Wix accepts JSON-LD only — up to 5 markups per page, each under 7,000 characters.

Squarespace

  1. For a single-location business, go to Settings → Advanced → Code Injection.
  2. Paste your full <script> block into the Header field (not Footer) and save — it injects into the <head> of every page.
  3. For one specific page, open the Pages panel, click the page's gear icon, go to Advanced, and paste into Page Header Code Injection.

Code Injection requires a paid plan, and per-page injection needs a higher tier (historically the Business plan or above), so check your current plan if the field is missing.

Shopify

  1. From your admin, go to Online Store → Themes.
  2. On your live theme, open the Actions menu and choose Edit code.
  3. Under Layout, open theme.liquid.
  4. Paste your <script> block just before the closing </head> tag and click Save.

This applies the schema across the storefront. To vary it by page, wrap the block in a Liquid conditional such as {% if template contains 'product' %}.

Plain HTML

  1. Open the page's HTML file in your editor.
  2. Inside <head>...</head>, add the <script type="application/ld+json"> element with your JSON object inside.
  3. Save the file and upload it to your server.

Once the block is live on any of these platforms, confirm it before you move on. The next section covers exactly which tools to use and the errors they tend to surface.

Validate your markup and fix common errors

Two tools check two different things. Use both. Google's Rich Results Test tells you whether your markup qualifies for a rich result — it only reports the properties Google cares about for a given feature. The Schema Markup Validator at validator.schema.org checks your JSON-LD against the full schema.org spec, so it catches typos and malformed structure Google's tool may quietly ignore. Markup can be spec-valid yet still ineligible for a rich result, so a clean pass on one is not a clean pass on the other.

Validate before you publish, then validate the live URL again after. A pre-publish paste confirms the JSON itself is sound; testing the published page confirms Google can actually fetch your page and any image and hours URLs it references.

Common errors and how to fix them

Error Fix
Missing field "address" / a value for address is required Give address as a nested PostalAddress object, not a plain string. Include streetAddress, addressLocality, addressRegion, postalCode, and addressCountry. A bare text address is the most common trigger for this error.
A value for the "image" field is required Add an image pointing to a real, crawlable URL (or an ImageObject). Use a high-resolution image — at least 50K px in area, ideally supplied in 16x9, 4x3, and 1x1 ratios. Google now effectively requires image for many LocalBusiness results.
Generic LocalBusiness used instead of a specific subtype Set @type to the most specific subtype that fits — Restaurant, Dentist, DaySpa, and so on — so the right rich result and the right inherited Organization fields apply.
Star ratings filtered out (page ineligible for the review feature) Don't mark up reviews or aggregateRating for your own business on a page you control. Self-serving ratings are filtered and can count as a policy violation. Those fields are only valid for reviews about other businesses. Remove the self-rating.
Opening hours appear wrong or missing A 00:00 closing time is read as start-of-day. For end-of-day use 23:59; for 24 hours set opens to 00:00 and closes to 23:59; for a closed day set both to 00:00. Split shifts (a lunch break) need two separate OpeningHoursSpecification entries, not one with a gap.
Invalid or imprecise geo coordinates Provide geo as GeoCoordinates with numeric latitude and longitude at a minimum of five decimal places of precision.
priceRange too long or malformed Keep it under 100 characters. Use a numeric range like $10-15 or normalized currency signs like $$$.
Duplicate or conflicting LocalBusiness blocks If an SEO plugin (Yoast, Rank Math) already emits a LocalBusiness block and you add your own, Google sees two and may parse inconsistent data. Emit exactly one LocalBusiness block per page and consolidate to a single source.

Most of these come down to a missing required field or a self-serving rating. If both tools pass and you've removed any ratings of your own business, your markup is in good shape.

LocalBusiness vs Organization vs WebSite schema

These three schema types describe different things, and people often think they have to pick one. You don't. The right setup usually uses all three. Here is what each one is for.

What each type describes

TypeDescribesUse it when
LocalBusinessA physical, visitable location with a public address, hours, and a phone numberYou have a brick-and-mortar storefront, office, or clinic that customers can walk into or that serves a defined area
OrganizationThe brand or company as an entity, independent of any single addressThe brand is online-only, national, or runs many locations and needs one parent entity (logo, social profiles)
WebSiteThe website itself, not the businessAlways, on the homepage. It identifies the site and can enable the Sitelinks Search Box

LocalBusiness is the one that powers Google's local panels, Maps listings, and "near me" results. Organization and WebSite do not. If customers visit you in person, you want LocalBusiness (or a more specific subtype like Restaurant or Dentist). If they don't, Organization is the honest choice.

They can all live together in one @graph

You do not emit three separate scripts that ignore each other. The recommended pattern is one <script type="application/ld+json"> on the homepage containing an @graph array with three nodes: a WebSite node, an Organization or LocalBusiness node, and a WebPage node. You cross-link them with @id so Google sees one consistent picture of your brand, your site, and the page.

One useful shortcut: because LocalBusiness is a subtype of Organization (it inherits from both Organization and Place), a single node can carry a combined @type array — for example "@type": ["LocalBusiness", "Restaurant"] — rather than duplicating your name, logo, and address across two separate nodes. One node, one source of truth.

Which setup applies to you

Single-location business. Use one LocalBusiness node with the most specific subtype that fits, plus a WebSite and WebPage node in the same @graph. You do not need a separate Organization node — the LocalBusiness node already is an Organization and inherits its fields (so add logo and sameAs social links to it). This is the most common case, and the generator above produces the LocalBusiness piece for it.

Multi-location brand. Mark up each location page with its own LocalBusiness node — each with its own address, geo, telephone, openingHoursSpecification, and a url pointing to that location's page. Do not put every address on the homepage. On the homepage, use one Organization node for the brand, and connect the brand to its locations with parentOrganization and subOrganization (or branchOf) so Google understands they belong to one company. If a single building has distinct units with their own hours or phone numbers, you can nest those as department under the parent location instead of separate pages.

Agency managing client sites. Standardize on the @graph pattern across every client. Watch for the most common failure mode: a plugin like Yoast or Rank Math already emits an Organization or LocalBusiness block, and then someone pastes a second one by hand. Two conflicting blocks on the same page make Google parse inconsistently. Pick one source per page and remove the duplicate. For client locations, remember the self-serving rule — review and aggregateRating on your own LocalBusiness are ineligible for star snippets and only valid when the markup is about other entities.

Quick rules

  • Visitable address and hours → LocalBusiness (most specific subtype).
  • No single public address, online-only or national → Organization.
  • Describing the site, enabling site search → WebSite, on the homepage.
  • Many locations → one Organization on the homepage, one LocalBusiness per location page, linked by parentOrganization/subOrganization.
  • One JSON-LD block per page. If a plugin already emits one, don't paste a second.

For more on choosing the right LocalBusiness subtype, see the section on picking your @type above. To set up review collection that legitimately drives ratings, start with a Google review link.

Does schema markup improve your Google rankings?

Short answer: no, not directly. Schema markup is not a ranking factor. Adding LocalBusiness JSON-LD to a page will not, by itself, move you up the results. Google has said this for years — its Search team has stated repeatedly that structured data is optional and that markup alone gives no ranking boost on its own. Google's own LocalBusiness documentation makes no ranking claim and notes that the features which consume your markup are not guaranteed to appear.

So if a generator or agency promises that pasting in schema will rank you #1, be skeptical. There is no honest number to put on it. What schema actually buys you is visibility and eligibility, and those are worth real money even though they sit one step removed from rank position.

The real, indirect wins

Schema helps in ways that are easy to overstate and easy to verify. Here is the honest version.

  • Eligibility for rich results. Valid markup is what makes your page eligible for SERP enhancements — review stars, opening hours, the business panel, "near me" treatments. Eligible is not the same as guaranteed; Google decides when to show them. But without valid markup you are not even in the running.
  • A clearer click target. When those enhancements do show, your result takes up more space and answers more of the question before the click. That can lift click-through rate. We will not invent a percentage — the lift depends entirely on your query, your competitors, and which feature appears.
  • Clearer entity understanding. Spelling out your name, address, and phone in a format Google reads directly reduces ambiguity about who you are and where you operate. That feeds Google's Knowledge Graph and its confidence in your local-pack and Maps listing — the same NAP consistency local SEO has always cared about, stated in machine-readable form.
  • Reinforced local relevance. The geo coordinates, address, and openingHoursSpecification you mark up restate the signals Google already uses for local and "near me" results. Schema does not create those signals — it confirms them.
  • AI and answer-engine eligibility. AI Overviews and LLM-based answer engines (Gemini, ChatGPT, Perplexity, Claude) increasingly lean on structured data to verify entities and decide what to cite. Clean LocalBusiness markup makes your business easier to quote correctly. This is the newest reason to bother, and it is about being cited accurately, not about rank.

The honest chain is: better markup → eligibility for richer, more accurate results → potentially better CTR and clearer entity signals → behavior and relevance signals that can correlate with stronger positions over time. The markup is never the lever that moves rank directly. And it will not hurt rankings either, so there is no downside to getting it right.

What schema can and can't do

Schema canSchema can't
Make your page eligible for rich results and business panelsGuarantee any rich result actually shows — Google decides
Help Google and AI engines understand and cite your business correctlyDirectly raise your ranking position
Restate your location and hours as clean local relevance signalsManufacture relevance you don't have, or fix thin content
Show star ratings — but only for reviews of other businesses you listShow stars for reviews of your own business on your own site

That last row catches people out. Marking up aggregateRating and review for your own business on a page you control is self-serving, and Google filters it out — the page becomes ineligible for the star feature and you risk a policy flag. Review stars in schema are only valid when the markup describes a different entity (for example, a directory rating other companies). To get more genuine reviews on your actual Google profile instead, use our Google review link generator.

So is it worth adding?

Yes. Not because it ranks you, but because it is the cheapest way to become eligible for everything Google and AI engines can do with a well-described business — and because it never costs you anything in rankings. Treat it as table stakes for visibility, not a growth hack. Build it with the generator above, pick the most specific @type for your business, fill in name and address at minimum, and validate before you publish.

Frequently asked questions

What is LocalBusiness schema markup?

LocalBusiness schema is structured data (JSON-LD) you add to your site that states your business facts — name, address, phone, hours, price range, ratings — in a format Google reads directly. It makes you eligible for rich results and helps Google understand your business for local search.

Is this schema generator free?

Yes. Generate and copy unlimited LocalBusiness JSON-LD with no account and no sign-up. Everything runs in your browser, and nothing is stored.

How do I add the schema to my website?

Copy the generated block and paste it into your page. It is a script type="application/ld+json" tag — invisible to visitors, readable by Google. Either the head or the body works; place it on the page that describes that business or location. Most platforms (WordPress, Wix, Squarespace, Shopify) have a header or custom-code field, or an SEO plugin, where it goes.

Do I need coding skills to use this?

No. Fill in the form, copy the block, and paste it in. If you run WordPress, Shopify, Squarespace, or similar, most have a header or custom-code field (or an SEO plugin) where you can paste it without touching code.

Which business type should I pick?

Pick the most specific type that fits — Restaurant, Dentist, Plumber, HairSalon, AutoRepair, and so on — because a specific subtype can unlock more relevant fields and rich results. Every one of these still inherits from LocalBusiness, so when nothing fits, the generic LocalBusiness type is a safe default.

Should I use JSON-LD or microdata?

Use JSON-LD. It's the format Google recommends, and it sits in one self-contained script block instead of being woven through your page HTML like microdata, which makes it far easier to add, read, and maintain. This generator outputs JSON-LD for that reason.

Will this guarantee star ratings in Google?

No. Schema makes you eligible for review stars and other rich results, but Google decides if and when to show them. You also need genuine reviews shown on the same page behind the rating fields, and marking up reviews of your own business is self-serving and gets filtered. Validate with Google's Rich Results Test before publishing.

Will the schema work before I have any reviews?

Yes. The rating and review-count fields are optional — leave them blank and the rest of your markup (name, address, hours, and more) stays valid and useful. Add the rating fields later once you have real reviews to back them up.

Can I add schema for multiple locations?

Yes. Each physical location should have its own LocalBusiness block on its own location page, with that location's unique address, phone, and hours. For a franchise or chain, link each location back to the parent brand using parentOrganization so Google understands they belong together.