LocalBusiness schema is a Schema that tells search engines exactly what your business is, where it operates, and how customers can reach you. The immediate action: build a minimal JSON-LD block with name, address, telephone, and url, then paste it into your site’s <head> or hand the snippet to your developer today.
Three authorities back every implementation decision you’ll make here:
- Schema.org defines the LocalBusiness type, its properties, and the subtypes you should prefer when they apply.
- Google Search Central documents which properties Google actually reads, what’s required versus recommended, and feature-specific rules like restaurant carousel image sizes.
- Rich Results Test and the Schema Markup Validator let you confirm your markup is both syntactically correct and eligible for Google’s enhanced displays before you push to production.
Key Takeaways
LocalBusiness schema requires accurate, visible-content-matched markup with required properties (name, address) and recommended fields that raise quality signals for knowledge panels and rich results.
| Point | Details |
|---|---|
| Start with required properties | Add name, address, telephone, and url as the minimum viable LocalBusiness JSON-LD. |
| Use the most specific subtype | Choose Dentist, Restaurant, or another subtype over generic LocalBusiness when it accurately fits. |
| Validate in two stages | Run Schema Markup Validator for syntax, then Rich Results Test for Google eligibility, before going live. |
| Match schema to visible content | Every address, phone, and hours value in your JSON-LD must appear on the page it’s placed on. |
| Toddstager for ongoing maintenance | Toddstager audits, templates, and monitors LocalBusiness schema as part of a full local SEO service. |
What is local business schema and when should you use it?
LocalBusiness is a Schema.org type used to mark up a specific physical business location. It tells search engines the business’s name, address, hours, contact details, and category in a machine-readable format. You place it on the page that represents that location, whether that’s a homepage for a single-location business or a dedicated location page for a chain.
Use LocalBusiness markup when the page’s primary purpose is to represent a physical place a customer can visit or call. If the page is about a product, a blog post, or a corporate overview with no location intent, a different schema type fits better.
When to choose a more specific subtype. Schema.org recommends using the most specific applicable type rather than the generic LocalBusiness parent. Common subtypes include:
Restaurantfor food-service businesses (also unlocks restaurant carousel eligibility on Google)Storefor retail locationsHealthCluborDaySpafor fitness and wellness businessesMedicalClinic,Dentist, orPhysicianfor healthcare providersAutoDealerfor car dealershipsLegalServicefor law firms and attorneysHomeAndConstructionBusinesssubtypes (Plumber, Electrician, RoofingContractor) for trades
A dentist who marks up their location page as Dentist rather than the generic LocalBusiness gives Google a clearer signal and may qualify for type-specific features. The rule is simple: if a subtype exists that accurately describes your business, use it.
LocalBusiness vs. Organization or Service. Use Organization when the page represents a company entity without a specific physical location focus. Use Service when the page describes a service offering rather than a place. A page that says “Visit our Chicago office at 123 Main St” belongs to LocalBusiness; a page that says “We offer HVAC repair across the Midwest” belongs to Service.
Why does implementing LocalBusiness schema improve your local SEO?
Adding structured data for local businesses increases the clarity of your business data to search engines and raises your eligibility for knowledge panels, local carousels, and other enhanced displays. It doesn’t guarantee any specific result, but it removes ambiguity that might otherwise prevent Google from surfacing your business information confidently.
Concrete benefits include:
- Knowledge panel eligibility. Accurate schema helps Google connect your site to your entity in the Knowledge Graph, which can trigger a branded knowledge panel in search results.
- Richer search snippets. Hours, phone numbers, and price ranges can appear directly in results when schema is present and valid.
- Clearer indexing of contact and location data. Google can parse your address, phone, and hours without scraping unstructured text.
- Review snippet eligibility. When you capture reviews on your own site and mark them up correctly, review stars can appear in results.
- Improved local pack relevance signals. While Google Business Profile (GBP) drives the local 3-pack directly, schema on your website reinforces the same signals.
Schema vs. Google Business Profile. GBP controls your presence in Maps and the local 3-pack. LocalBusiness schema on your website reinforces your site’s organic search presence and entity clarity. They work together, not as substitutes. A well-maintained GBP with no schema on the website leaves a gap; schema without a GBP misses the map-pack entirely. Both belong in your local SEO strategy.
Set realistic expectations: schema improves eligibility but Google decides whether to display rich results based on its own quality signals. Accurate, complete markup is the prerequisite.
Which core properties should you include in LocalBusiness markup?
Google’s LocalBusiness documentation identifies name and address as required properties. Everything else is recommended, but the more complete your markup, the stronger the signal you send. Here’s the prioritized property list:
| Property | Expected Type | Example Value |
|---|---|---|
name | Text | “Riverside Dental Group” |
address | PostalAddress | See subfields below |
streetAddress | Text | “4521 Oak Avenue” |
addressLocality | Text | “Chicago” |
addressRegion | Text | “IL” |
postalCode | Text | “60614” |
addressCountry | Text | “US” |
telephone | Text | “+1-312-555-0199” |
url | URL | “https://example.com” |
logo | ImageObject | URL to logo file |
image | ImageObject | URL to business photo |
openingHours | Text | “Mo-Fr 09:00-17:00” |
openingHoursSpecification | OpeningHoursSpecification | Structured open/close per day |
geo | GeoCoordinates | latitude, longitude (5+ decimal places) |
priceRange | Text | “$$” |
paymentAccepted | Text | “Cash, Credit Card” |
aggregateRating | AggregateRating | ratingValue, reviewCount |
department | LocalBusiness | Nested department object |
servesCuisine | Text | “Italian” (Restaurant only) |
menu | URL | Link to menu page (Restaurant only) |
A few property notes worth calling out:
- Telephone format. Always include the country code:
+1-312-555-0199for U.S. numbers. This prevents parsing errors in international search contexts. - OpeningHoursSpecification vs. openingHours. The OpeningHoursSpecification type supports
opens,closes,dayOfWeek,validFrom, andvalidThroughfields, making it the better choice for businesses with seasonal hours or holiday closures. The simpleropeningHourstext string (e.g.,"Mo-Fr 09:00-17:00") works fine for consistent schedules. - aggregateRating and review. Only mark up reviews that your site actually captures and displays. Google’s Review Snippet guidelines prohibit using aggregateRating for reviews hosted on third-party platforms like Yelp or Google itself. If you don’t collect reviews on your own site, omit these properties entirely.
- Images for restaurant carousels. Google requires crawlable, indexable images in multiple aspect ratios for carousel eligibility. High-resolution photos improve your chances of appearing in image-dependent features.
A minimal JSON-LD snippet you can copy and paste
Google recommends JSON-LD in most cases because it’s easy to add without touching your HTML content. Here’s the smallest valid LocalBusiness block that covers required and key recommended fields:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Riverside Dental Group",
"url": "https://www.example.com",
"telephone": "+1-312-555-0199",
"address": {
"@type": "PostalAddress",
"streetAddress": "4521 Oak Avenue",
"addressLocality": "Chicago",
"addressRegion": "IL",
"postalCode": "60614",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 41.92384,
"longitude": -87.64821
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "09:00",
"closes": "17:00"
}
],
"priceRange": "$$",
"image": "https://www.example.com/images/office-exterior.jpg"
}
</script>
Field-by-field notes:
@contextand@typeare mandatory in every JSON-LD block. They tell parsers which vocabulary and which type you’re using.addressuses the nestedPostalAddresstype. Each subfield (streetAddress,addressLocality,addressRegion,postalCode,addressCountry) should match what’s visible on the page.geocoordinates should carry at least five decimal places for accuracy. Pull them from Google Maps by right-clicking your location pin.openingHoursSpecificationis an array, so you can add a second object for Saturday or Sunday hours, or includevalidFromandvalidThroughfor seasonal closures.
Where to place the script tag. Paste it inside the <head> of the HTML page it describes, or immediately before the closing </body> tag. Both positions work. In a CMS, most schema plugins inject it into the head automatically.
Pro Tip: Replace hard-coded values with template variables wherever your CMS supports it. A field like {{business.phone}} pulled from a shared CMS field updates every page the moment you change the source record, eliminating the risk of stale data.
How do you add LocalBusiness schema to your site?
JSON-LD is the easiest format to implement and maintain, especially for multi-location sites using templates. Choose the method that fits your site’s maintenance workflow:
Manual script injection. Paste the JSON-LD block directly into the
<head>of your location page’s HTML template. This is the cleanest approach for custom-built sites and gives developers full control over the output.WordPress schema plugins. For WordPress sites, dedicated schema plugins handle JSON-LD generation without touching theme code. When evaluating the best WordPress schema plugins, look for ones that support LocalBusiness type specifically, allow per-page type overrides, pull address data from a central settings field, and output valid JSON-LD (not Microdata). Plugins that meet these criteria reduce manual maintenance significantly. You can also set up local listings alongside plugin-generated schema for a complete local presence.
Theme header injection (WordPress). If you prefer not to use a plugin, add the JSON-LD block to your theme’s
header.phpor use thewp_headaction hook infunctions.php. This works but requires a child theme to survive updates.Shopify (theme.liquid). Add the JSON-LD block inside the
<head>section of yourtheme.liquidfile. For multi-location Shopify stores, use Liquid variables to pull location-specific data from metafields.Static sites and site builders. Embed the JSON-LD in your page template’s head section. Most static site generators (Jekyll, Hugo, Eleventy) support a head partial where you can inject structured data using template variables.
Single-page applications (SPAs). Ensure the JSON-LD is present in the server-rendered HTML, not injected only after JavaScript executes. Google can process JavaScript-rendered schema, but server-side rendering is more reliable and faster to index.
Google Tag Manager. You can inject JSON-LD via a Custom HTML tag in GTM. Set the trigger to fire on the specific page URL. This works, but it introduces a dependency on GTM loading correctly, which makes it less reliable than direct template injection for critical structured data.
Pro Tip: For any site with more than one location, avoid hard-coding addresses and phone numbers in your schema. Use a data layer or CMS custom fields as the single source of truth, then pull those values into your JSON-LD template. One update to the source record propagates everywhere.
How do you handle multiple locations, departments, and service-area businesses?
Each physical location deserves its own LocalBusiness item with its own canonical URL and its own JSON-LD block. Stacking multiple addresses into a single schema object, or duplicating one block across many city pages, sends conflicting signals and can trigger policy issues.
Multiple locations:
- Create one dedicated page per location (e.g.,
/locations/chicago/,/locations/dallas/). - Each page carries its own LocalBusiness JSON-LD with that location’s unique
name,address,telephone,geo, andopeningHoursSpecification. - Link each location page to its corresponding Google Business Profile for maximum local pack coverage.
Departments within a location. Use the department property to nest a department as a child LocalBusiness under the parent. Google’s recommended naming format is {Store Name} {Department Name}, for example, “Riverside Medical Group Cardiology.” Each department object can carry its own hours and telephone number, which is useful for large clinics or multi-department retailers.
Service-area businesses (SABs). If your business serves customers at their location and you don’t operate a publicly accessible storefront, avoid marking up your homepage as a fixed-location LocalBusiness with a home address or a P.O. box. Instead, use Service type markup or general Organization markup, and follow Google’s service-area business guidance. Publishing a false address to game local search is a policy violation. For practical tactics on winning local visibility without a storefront address, the service-area SEO guide covers this in depth.
Quick dos and don’ts:
- DO use unique
geocoordinates for each physical location. - DO use accurate
openingHoursSpecificationper location, including holiday closures. - DON’T copy a single LocalBusiness block onto dozens of city landing pages that don’t represent real physical addresses.
- DON’T omit the
urlproperty on location pages; each page should reference its own canonical URL.
How do you validate and troubleshoot LocalBusiness schema?
Validate markup using the Rich Results Test and Schema Markup Validator, then monitor Search Console for errors and coverage reports once the markup is live.
| Tool | Purpose | Quick Usage Note |
|---|---|---|
| Rich Results Test | Checks eligibility for Google rich results | Enter a URL or paste code; shows which rich result types are detected and any blocking errors |
| Schema Markup Validator | Validates schema.org syntax and conformance | Catches malformed JSON, wrong property types, and missing required fields |
| Google Search Console | Monitors live errors and warnings across your site | Check Enhancements > Local Business for production-level issues |
Common errors and how to fix them:
- Missing required properties. The validator will flag missing
nameoraddress. Add the missing fields and re-validate before pushing to production. - Invalid types for geo coordinates.
latitudeandlongitudemust be numbers, not strings."latitude": "41.92384"(string) will fail;"latitude": 41.92384(number) is correct. - Visible content mismatch. If your JSON-LD shows a phone number that doesn’t appear anywhere on the page, Google may ignore or penalize the markup. The address and phone in your schema must match what a visitor sees on that page.
- Malformed JSON. A missing comma, an unclosed bracket, or a trailing comma after the last property breaks the entire block. Run the raw JSON through a linter like JSONLint before testing in the Schema Markup Validator.
- Relative image or URL paths. Use absolute URLs (
https://example.com/images/logo.png), not relative paths (/images/logo.png). Relative paths can fail when the schema is parsed outside the page context.
What Google policies must your structured data follow?
Google’s structured data policies require that markup reflects visible page content. Schema that describes content a visitor can’t actually see on the page is a policy violation, regardless of how technically correct the JSON-LD is.
Key policy requirements:
- Visible content parity. Every piece of information in your LocalBusiness schema, including address, phone number, and hours, must appear on the page the schema is placed on. Don’t add schema to a page that only shows a contact form with no visible address.
- No fake locations. Marking up a virtual office, a P.O. box presented as a storefront, or a location you don’t actually operate violates Google’s guidelines and can result in manual actions.
- Review and aggregateRating rules. Only use these properties for reviews your site collects directly. Pulling star ratings from Google, Yelp, or other third-party platforms and marking them up as your own is prohibited.
- Image requirements. Images referenced in schema must be crawlable and indexable. Blocked images (via
robots.txtornoindexmeta tags) won’t qualify for image-dependent features like restaurant carousels. - Duplicate pages. If your site has duplicate pages for the same location, each duplicate should carry the same structured data as the canonical, not just the canonical page alone.
Quick compliance checks before you publish:
- Open the live page and confirm the address in your JSON-LD appears in the visible text.
- Confirm the telephone number in your JSON-LD matches the number displayed on the page.
- If you include
aggregateRating, verify the reviews are hosted on your site and visible to users. - Check that all image URLs return a 200 status and aren’t blocked by
robots.txt.
Pro Tip: Set a calendar reminder to audit your schema every time you change business hours, move locations, or update your phone number. Stale schema is one of the most common policy violations, and it’s entirely preventable with a simple update workflow.
Implementation checklist for U.S. local businesses
Follow these steps in order. A developer can work from this list directly.
Confirm the page’s primary purpose. Is this page primarily about a physical business location? If yes, proceed with LocalBusiness. If the page is about a service offering or a corporate entity, choose
ServiceorOrganizationinstead.Choose the most specific schema type. Check Schema.org’s LocalBusiness subtypes. Use
Dentist,Restaurant,Plumber, or another specific type when it accurately describes the business. Fall back toLocalBusinessonly when no subtype fits.Gather accurate business information. Collect the canonical business name, full street address (including
addressRegionas the two-letter state abbreviation andpostalCodeas the five-digit ZIP code), U.S. phone number with+1country code, primary URL, and current hours. Cross-check against the Google Business Profile to avoid discrepancies.Build the JSON-LD block using templates. Use the snippet from Section 5 as your starting point. Replace hard-coded values with CMS template variables or data layer values wherever possible. For WordPress, use a schema plugin that pulls from a central settings field.
Place the script tag in the page template. Add it inside
<head>or before</body>on the location page. For WordPress, use a plugin or thewp_headhook. For Shopify, add it totheme.liquid.Validate locally before pushing. Run the page through the Schema Markup Validator to catch syntax errors, then run it through the Rich Results Test to confirm Google can detect the LocalBusiness type and identify any blocking issues.
Push to production and request indexing. After publishing, use the URL Inspection tool in Search Console to request indexing of the updated page.
Monitor Search Console. Check the Enhancements section for LocalBusiness errors and warnings. Address any flagged issues within 48 hours of discovery.
Schedule quarterly audits. Review schema accuracy every quarter, and immediately after any business change: new address, new phone number, updated hours, added locations, or a new service category.
U.S.-specific notes: Always format addressRegion as the two-letter state code (e.g., "IL", "TX", "CA"). Use the five-digit ZIP code for postalCode. Format telephone as +1-XXX-XXX-XXXX. These conventions align with how Google parses U.S. address data and reduce the risk of address-parsing errors in local search.
What most implementers get wrong about LocalBusiness schema
The most common mistake isn’t a technical error. It’s treating schema as a one-time setup task rather than a living part of your site’s data layer.
I’ve seen businesses invest time in a well-structured JSON-LD block, validate it cleanly, push it to production, and then leave it untouched for two years. By the time someone notices the schema still shows the old address or the pre-pandemic hours, the business has been sending conflicting signals to Google for months. Search Console may have been flagging errors the whole time, but nobody was watching.
The practical tip: tie every schema value to a live data source. If your CMS has a “Business Phone” field that populates the footer, that same field should populate your JSON-LD template. When the phone number changes, one edit updates both. This isn’t a complex engineering task; it’s a workflow decision that takes 30 minutes to set up and saves hours of troubleshooting later.
The second oversight is skipping the Rich Results Test after a site redesign. Template changes can silently break schema output, especially in WordPress when a plugin update conflicts with a theme change. A quarterly validation pass, tied to your regular SEO audit, catches these breaks before they affect your search presence.
Toddstager handles LocalBusiness schema so you don’t have to
Getting schema right once is straightforward. Keeping it accurate across multiple locations, through business changes, and in sync with Google’s evolving guidelines is where most small businesses fall short.

Toddstager builds and maintains LocalBusiness schema as part of a complete local SEO service for small businesses across the U.S. The work includes a full schema audit of your current markup, JSON-LD templating tied to your CMS data, multi-location automation so each location page carries accurate and unique structured data, and ongoing Search Console monitoring to catch errors before they compound. For businesses in specialized verticals, from dental practices to restaurants, the schema implementation is paired with the vertical-specific SEO strategy that makes the markup actually move the needle. To get started, request a local SEO audit and see exactly where your current schema stands.
Sources
These are the primary sources you should consult when building, validating, and maintaining your LocalBusiness markup:

