Covered On This Post

Hands coding LocalBusiness schema on laptop

Local Business Schema: Implementation Guide for Website Owners

Picture of Todd Stager

Todd Stager

Search Engine Optimization
Expert / Owner / Founder

Share this:

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.

PointDetails
Start with required propertiesAdd name, address, telephone, and url as the minimum viable LocalBusiness JSON-LD.
Use the most specific subtypeChoose Dentist, Restaurant, or another subtype over generic LocalBusiness when it accurately fits.
Validate in two stagesRun Schema Markup Validator for syntax, then Rich Results Test for Google eligibility, before going live.
Match schema to visible contentEvery address, phone, and hours value in your JSON-LD must appear on the page it’s placed on.
Toddstager for ongoing maintenanceToddstager 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:

  • Restaurant for food-service businesses (also unlocks restaurant carousel eligibility on Google)
  • Store for retail locations
  • HealthClub or DaySpa for fitness and wellness businesses
  • MedicalClinic, Dentist, or Physician for healthcare providers
  • AutoDealer for car dealerships
  • LegalService for law firms and attorneys
  • HomeAndConstructionBusiness subtypes (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:

PropertyExpected TypeExample Value
nameText“Riverside Dental Group”
addressPostalAddressSee subfields below
streetAddressText“4521 Oak Avenue”
addressLocalityText“Chicago”
addressRegionText“IL”
postalCodeText“60614”
addressCountryText“US”
telephoneText“+1-312-555-0199”
urlURLhttps://example.com
logoImageObjectURL to logo file
imageImageObjectURL to business photo
openingHoursText“Mo-Fr 09:00-17:00”
openingHoursSpecificationOpeningHoursSpecificationStructured open/close per day
geoGeoCoordinateslatitude, longitude (5+ decimal places)
priceRangeText“$$”
paymentAcceptedText“Cash, Credit Card”
aggregateRatingAggregateRatingratingValue, reviewCount
departmentLocalBusinessNested department object
servesCuisineText“Italian” (Restaurant only)
menuURLLink to menu page (Restaurant only)

A few property notes worth calling out:

  • Telephone format. Always include the country code: +1-312-555-0199 for U.S. numbers. This prevents parsing errors in international search contexts.
  • OpeningHoursSpecification vs. openingHours. The OpeningHoursSpecification type supports opens, closes, dayOfWeek, validFrom, and validThrough fields, making it the better choice for businesses with seasonal hours or holiday closures. The simpler openingHours text 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:

  • @context and @type are mandatory in every JSON-LD block. They tell parsers which vocabulary and which type you’re using.
  • address uses the nested PostalAddress type. Each subfield (streetAddress, addressLocality, addressRegion, postalCode, addressCountry) should match what’s visible on the page.
  • geo coordinates should carry at least five decimal places for accuracy. Pull them from Google Maps by right-clicking your location pin.
  • openingHoursSpecification is an array, so you can add a second object for Saturday or Sunday hours, or include validFrom and validThrough for 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:

  1. 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.

  2. 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.

  3. Theme header injection (WordPress). If you prefer not to use a plugin, add the JSON-LD block to your theme’s header.php or use the wp_head action hook in functions.php. This works but requires a child theme to survive updates.

  4. Shopify (theme.liquid). Add the JSON-LD block inside the <head> section of your theme.liquid file. For multi-location Shopify stores, use Liquid variables to pull location-specific data from metafields.

  5. 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.

  6. 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.

  7. 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, and openingHoursSpecification.
  • 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 geo coordinates for each physical location.
  • DO use accurate openingHoursSpecification per 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 url property 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.

ToolPurposeQuick Usage Note
Rich Results TestChecks eligibility for Google rich resultsEnter a URL or paste code; shows which rich result types are detected and any blocking errors
Schema Markup ValidatorValidates schema.org syntax and conformanceCatches malformed JSON, wrong property types, and missing required fields
Google Search ConsoleMonitors live errors and warnings across your siteCheck Enhancements > Local Business for production-level issues

Common errors and how to fix them:

  • Missing required properties. The validator will flag missing name or address. Add the missing fields and re-validate before pushing to production.
  • Invalid types for geo coordinates. latitude and longitude must 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.txt or noindex meta 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.

  1. 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 Service or Organization instead.

  2. 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 to LocalBusiness only when no subtype fits.

  3. Gather accurate business information. Collect the canonical business name, full street address (including addressRegion as the two-letter state abbreviation and postalCode as the five-digit ZIP code), U.S. phone number with +1 country code, primary URL, and current hours. Cross-check against the Google Business Profile to avoid discrepancies.

  4. 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.

  5. 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 the wp_head hook. For Shopify, add it to theme.liquid.

  6. 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.

  7. Push to production and request indexing. After publishing, use the URL Inspection tool in Search Console to request indexing of the updated page.

  8. Monitor Search Console. Check the Enhancements section for LocalBusiness errors and warnings. Address any flagged issues within 48 hours of discovery.

  9. 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

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:

This is a staging environment