What Is LocalBusiness Schema? The Complete Guide (2026)

Saar Twito10 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

What Is LocalBusiness Schema?

LocalBusiness schema is a type of structured data — based on the Schema.org LocalBusiness vocabulary — that tells Google exactly what your business is, where it is located, and when it is open. When correctly implemented, it powers the business details that appear in Google Knowledge Panels, Maps results, and local search carousels, and it significantly improves how AI assistants describe and recommend your business.

TL;DR

  • What it is: JSON-LD that gives Google structured facts about a physical business — name, address, hours, phone, coordinates.
  • Required properties: name and address (as a full PostalAddress object).
  • Always use a subtype: Restaurant, Dentist, Hotel, Plumber — never just LocalBusiness when a more specific type exists.
  • Opening hours: Use openingHoursSpecification with 24-hour time format — or the text shorthand openingHours: "Mo-Fr 09:00-17:00".
  • Validate with: Greadme — it checks all LocalBusiness fields including address completeness, geo coordinates, opening hours format, and price range.

What Does LocalBusiness Schema Unlock?

According to Google's official documentation, LocalBusiness schema enables the following search features:

  • Knowledge Panel. The business information card that appears on the right side of desktop search results (and at the top on mobile) — showing name, address, hours, phone number, and photos. LocalBusiness schema feeds this panel and keeps the information consistent.
  • Local search carousel.When users search for a business type ( "dentists near me", "Italian restaurants in Berlin"), Google may display a horizontal carousel of local businesses. Structured data improves your eligibility for these placements.
  • Google Maps integration. LocalBusiness schema data can be used alongside your Google Business Profile. As of 2025, the Maps Booking API also allows reservations and orders to appear directly in search results for eligible businesses.
  • AI assistant responses.When someone asks an AI assistant "What are the opening hours of [business]?" or "Is [business] open on Sunday?", the assistant reads structured data first. Businesses with complete LocalBusiness schema get accurate answers; businesses without it get guessed answers or no answer at all.

Always Use the Most Specific Subtype

The single most impactful decision in LocalBusiness schema is choosing the right type. Google explicitly recommends using the most specific subtype available rather than the generic LocalBusiness. More specific types unlock category-specific properties and improve ranking in local results.

Business typeUse this schema typeExtra properties unlocked
Restaurant, café, barRestaurant, CafeOrCoffeeShop, BarOrPubservesCuisine, menu, hasMenu
Hotel, motel, hostelHotel, Motel, HostelamenityFeature, checkinTime, checkoutTime
Medical / dentalDentist, MedicalBusiness, PhysicianmedicalSpecialty, availableService
Law firm / attorneyAttorney, LegalServiceareaServed, knowsAbout
Retail storeClothingStore, BookStore, GroceryStorecurrenciesAccepted, paymentAccepted
Home servicesPlumber, Electrician, LocksmithareaServed, availableService
Beauty / wellnessHairSalon, BeautySalon, DaySpaavailableService
No specific subtype matchesLocalBusiness

You can also specify multiple types as an array: "@type": ["Restaurant", "LocalBusiness"]. This is valid Schema.org and can help Google understand ambiguous business categories.

Required Properties

Based on Google's LocalBusiness documentation, two properties are required. Missing either one is a hard error in Greadme and prevents Knowledge Panel eligibility:

PropertyTypeNotes
nameTextThe exact business name. Must match your Google Business Profile name to avoid conflicting signals.
addressPostalAddressMust be a full PostalAddress object. Recommended sub-properties:streetAddress, addressLocality (city), addressRegion (state/province), postalCode, and addressCountry (ISO 3166-1 alpha-2 code, e.g. "US").

Recommended Properties

These properties don't block eligibility, but each one adds a measurable amount of information to the Knowledge Panel and AI assistant responses:

PropertyWhy it matters
telephoneInclude the country code and area code (e.g., "+1-212-456-7890"). Shown in Knowledge Panels and used by voice assistants to place calls.
urlThe fully-qualified URL of the specific business location page — not the homepage if this is a multi-location business.
imageBusiness photos in multiple aspect ratios (1:1, 4:3, 16:9). Used in Knowledge Panels and local carousels.
geoGeoCoordinates with latitude and longitude to at least 5 decimal places. Greadme flags coordinates with fewer than 5 decimal places as a warning.
openingHoursSpecificationStructured opening hours. Enables the "open now" / "closes at Xpm" indicator in search results. See the dedicated section below.
priceRangeRelative pricing tier (e.g., "$", "$$", "$$$", or a range like "$10-$30"). Must be under 100 characters — Greadme flags values at or over 100 characters as a hard error.
servesCuisineFor Restaurant types only. Describes the cuisine (e.g.,"Italian", "Sushi"). Improves filtering in local food searches.
departmentFor businesses with distinct departments (e.g., a hospital with a pharmacy and an emergency room). Each department is a nested LocalBusiness object with its own name, address, and hours.

How to Format Opening Hours

Opening hours are one of the most searched pieces of local business information — and one of the most commonly misconfigured. Schema.org supports two formats:

Format 1: openingHoursSpecification (recommended)

A structured object per time block. Supports seasonal hours via validFrom / validThrough.

"openingHoursSpecification": [
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "09:00",
    "closes": "18:00"
  },
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": "Saturday",
    "opens": "10:00",
    "closes": "16:00"
  }
]

Format 2: openingHours (text shorthand)

A compact text format. Valid per Schema.org and accepted by Google. Use when you want a simpler implementation.

"openingHours": ["Mo-Fr 09:00-18:00", "Sa 10:00-16:00"]

Special cases per Google's documentation:

  • Open all day: "opens": "00:00", "closes": "23:59"
  • Closed all day: "opens": "00:00", "closes": "00:00"
  • Hours spanning midnight (e.g., Saturday 6pm to Sunday 3am): use a single specification with "dayOfWeek": "Saturday", "opens": "18:00", "closes": "03:00"
  • Seasonal hours: add validFrom and validThrough in YYYY-MM-DD format to each specification

Full Implementation Example

Restaurant

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Bella Napoli",
  "image": [
    "https://example.com/restaurant-1x1.jpg",
    "https://example.com/restaurant-4x3.jpg",
    "https://example.com/restaurant-16x9.jpg"
  ],
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "45 King Street",
    "addressLocality": "Manchester",
    "addressRegion": "Greater Manchester",
    "postalCode": "M2 4LY",
    "addressCountry": "GB"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 53.48095,
    "longitude": -2.23743
  },
  "telephone": "+44-161-234-5678",
  "url": "https://example.com/locations/manchester",
  "servesCuisine": "Italian",
  "priceRange": "££",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "12:00",
      "closes": "22:30"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday","Sunday"],
      "opens": "11:00",
      "closes": "23:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "218"
  }
}

Service business with multiple departments

{
  "@context": "https://schema.org",
  "@type": "Hospital",
  "name": "City General Hospital",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1 Hospital Road",
    "addressLocality": "Springfield",
    "addressRegion": "IL",
    "postalCode": "62701",
    "addressCountry": "US"
  },
  "telephone": "+1-217-555-0100",
  "department": [
    {
      "@type": "MedicalBusiness",
      "name": "City General — Emergency Room",
      "openingHours": "Mo-Su 00:00-23:59",
      "telephone": "+1-217-555-0199"
    },
    {
      "@type": "Pharmacy",
      "name": "City General — Pharmacy",
      "openingHours": "Mo-Fr 08:00-20:00"
    }
  ]
}

The 7 Most Common LocalBusiness Schema Mistakes

1. Using the generic LocalBusiness type when a subtype exists

"@type": "LocalBusiness" for a dentist, restaurant, or hotel tells Google almost nothing about what kind of business it is. Google explicitly recommends using the most specific subtype. Greadme validates the type and will flag an overly generic type when a better fit exists.

2. Incomplete PostalAddress

A plain text address ("address": "123 Main St") is not valid — address must be a PostalAddress object. Missing addressCountry or postalCode are the most common gaps. Greadme checks each sub-property of the address and flags what is missing.

3. Geo coordinates with too few decimal places

Coordinates like "latitude": 53.48 (2 decimal places) have a precision radius of roughly 1.1 km — far too imprecise for a business location. Google requires at least 5 decimal places (precision of ~1 metre). Greadme warns when coordinates have fewer than 5 decimal places.

4. Using 12-hour time in opening hours

"opens": "9am" or "opens": "9:00 AM" are invalid. Google requires 24-hour format ("09:00"). Greadme flags non-24-hour values as errors.

5. priceRange over 100 characters

A priceRangevalue that is 100 characters or longer fails Greadme's validation as a hard error. Use a concise format: "$$" or "$10–$30".

6. Adding aggregateRating for your own business

Google's guidelines state that aggregateRating and review in LocalBusiness schema are intended for sites that review other businesses — not for a business marking up ratings about itself. A business writing its own reviews in structured data can trigger a manual action. Ratings should come from a third-party review platform, not self-generated data.

7. Schema name doesn't match Google Business Profile name

If your JSON-LD name is "Bella Napoli Restaurant" but your Google Business Profile reads "Bella Napoli", Google sees a conflicting signal. Keep the names identical across all platforms to avoid reducing Knowledge Panel confidence.

How LocalBusiness Schema Affects AI Visibility

AI assistants (ChatGPT, Perplexity, Google AI Overviews, voice assistants) increasingly answer local intent queries directly without sending users to a search results page. Queries like "Is there a vegan restaurant in Amsterdam open on Sunday?" or "What time does the nearest hardware store close?" are answered from structured data — not from reading prose on a website.

When LocalBusiness schema is complete, AI systems can extract:

  • name — to identify and name the business in the response
  • openingHoursSpecification— to answer "is it open now?" accurately
  • address — to give a precise, navigable location
  • telephone — to allow voice assistants to offer to call the business
  • servesCuisine / priceRange— to match the business to filtered queries ("cheap Italian near me")

Businesses without LocalBusiness schema rely on AI models guessing from inconsistent sources — Google Maps, Yelp, aggregator sites. A complete, accurate JSON-LD implementation makes your own website the authoritative source of truth.

How to Validate Your LocalBusiness Schema

Run your URL through Greadme to validate your LocalBusiness schema. Greadme checks all required and recommended fields — including PostalAddress completeness, geo coordinate precision, opening hours format, price range length, and type specificity — and scores the implementation with actionable fixes for each issue.

FAQ

Does LocalBusiness schema replace a Google Business Profile?

No — they serve different systems. A Google Business Profile controls what Google shows in Maps and the local pack for your business. LocalBusiness schema on your website helps Google understand your site and can reinforce the signals from your Business Profile. Both should be kept consistent and up to date.

Should every page of a multi-location business have its own schema?

Yes. Each location should have its own dedicated page with its own LocalBusiness schema containing the specific address, phone number, hours, and geo coordinates for that location. A single schema block on the homepage covering all locations is far less effective and can confuse Google's local ranking signals.

Can I use both openingHours and openingHoursSpecification?

You should use one or the other, not both. openingHoursSpecification is preferred because it supports seasonal variations via validFrom and validThrough. The text-based openingHours is simpler but does not support seasonal hours.

What country code format should I use in addressCountry?

Always use the two-letter ISO 3166-1 alpha-2 country code: "US" for the United States, "GB" for the United Kingdom, "DE" for Germany, and so on. Writing"United States" or "USA" is invalid.

Is LocalBusiness schema useful for online-only businesses?

LocalBusiness schema is designed for businesses with a physical location. An online-only business should use Organization or OnlineStoreschema instead. Applying LocalBusiness schema to a business with no physical address creates a mismatch that Google's classifier will flag.

Can I mark up a service-area business (no storefront)?

Yes — Google supports service-area businesses. Use the most appropriate subtype (e.g.,Plumber, Electrician), include your address, and use the areaServed property to describe the geographic area you cover. You can specify areaServed as a city name, region, or a GeoCircle / GeoShape object.

How often should I update LocalBusiness schema?

Any time your business details change — hours, phone number, address, or seasonal schedules. Stale schema (e.g., old opening hours left in the code after a change) causes AI assistants to give users incorrect information, which damages trust even when the Google Business Profile is up to date.

Conclusion

LocalBusiness schema is the most direct way to ensure Google and AI assistants have accurate, structured facts about your business. Two properties — name and a complete address — are required. Everything else — geo coordinates, opening hours, phone number, price range, and images — adds precision and unlocks more search features. Always use the most specific subtype, keep hours up to date, and never add self-generated ratings. Validate with Greadme to catch address, coordinate, and hours formatting errors before they silently reduce your local search visibility.