Local Business

Local Business Schema Generator

Generate LocalBusiness JSON-LD to improve visibility in local search and Google Maps

Configure Schema

Article: Blog posts, news articles, guides

Generated Schema

// Fill in the form to generate schema markup

Other Schema Generators

About Local Business Schema Generator

LocalBusiness schema markup is the most important structured data type for businesses with physical locations or those serving customers in specific geographic areas. It communicates your business's name, address, phone number, opening hours, price range, and service area directly to search engines — information that powers local search results, Google Maps listings, and local Knowledge Panels.

Local search is one of the highest-intent search categories — users searching for "near me" or location-specific queries are typically ready to visit or contact a business. LocalBusiness schema ensures your business information is accurate and complete in Google's understanding of your business, improving your chances of appearing in the Local Pack (the map with three business listings shown for local queries) and local organic results.

LocalBusiness schema is also the foundation for advanced local SEO features including business type-specific rich results. Google has over 100 LocalBusiness subtypes — Restaurant, MedicalClinic, LegalService, AutoRepair, Hotel — each with additional schema properties specific to that business type. Choosing the right subtype and including type-specific properties can unlock additional rich result features beyond basic local listings.

LocalBusiness Schema and Local Search Ecosystem

LocalBusiness schema works within a broader local search ecosystem that includes Google Business Profile, Google Maps, and local citation sources. Schema markup provides structured data directly from your website, which Google treats as an authoritative source of your business information. When your schema data matches your Google Business Profile data, you create strong consistency signals that improve local search confidence.

The geo property in LocalBusiness schema — containing latitude and longitude coordinates — is particularly important for location accuracy. It removes any ambiguity about your business's exact location, especially important for businesses in areas with similar addresses or in buildings that might be hard to geocode accurately.

OpeningHoursSpecification is one of the most practically valuable properties in LocalBusiness schema. When correctly implemented, your opening hours can appear directly in search results and Google Maps, reducing the friction for customers trying to find out if you're open. This real-time information display requires keeping hours synchronized between your schema, Google Business Profile, and your website's visible hours content.

Key Considerations

NAP Consistency

Name, Address, and Phone number (NAP) in your LocalBusiness schema must be identical to your Google Business Profile and all local citation sources. Even minor inconsistencies — abbreviating Street to St, different phone number formats — can reduce local search ranking signals. Use the exact same format everywhere.

Opening Hours Accuracy

OpeningHoursSpecification must reflect your actual current hours including holiday hours and seasonal variations. Inaccurate hours in schema that contradict your Google Business Profile or physical signage harm customer trust and local ranking signals. Update hours immediately when they change.

Choose the Right Subtype

LocalBusiness has over 100 subtypes — Restaurant, MedicalClinic, LegalService, Hotel, AutoRepair. Using the most specific applicable subtype unlocks additional type-specific properties and may improve relevance for category-specific searches. Check schema.org/LocalBusiness for the full subtype list.

AggregateRating for Local Trust

Including AggregateRating in LocalBusiness schema can surface star ratings in local search results. These ratings must reflect genuine customer reviews — fabricated ratings violate Google's policies. Ratings from your Google Business Profile reviews can be surfaced, but the schema data must be accurate and up-to-date.

Common LocalBusiness Issues

NAP Inconsistency

  • Business name in schema different from Google Business Profile name
  • Address format inconsistent across schema, GBP, and citations
  • Phone number format different between schema and other local listings
  • Multiple address formats used across different pages of the site

Hours and Availability

  • Opening hours not updated after schedule changes
  • Holiday hours not reflected in schema
  • Missing closes property for businesses that close at specific times
  • validFrom and validThrough dates not set for special hours

Schema Implementation

  • LocalBusiness schema on every page instead of location-specific pages
  • Missing geo coordinates — ambiguous location data
  • Wrong LocalBusiness subtype used for the business category
  • Schema not matching visible contact information on the page

Implementation Guide

Complete LocalBusiness JSON-LD Schema

Full LocalBusiness schema with all recommended local SEO properties:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://www.example.com/#localbusiness",
  "name": "Example Agency",
  "description": "Full-service digital marketing agency specialising in SEO and web development.",
  "url": "https://www.example.com",
  "telephone": "+1-555-123-4567",
  "email": "hello@example.com",
  "priceRange": "$$",
  "image": "https://www.example.com/images/storefront.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94105",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.7749,
    "longitude": -122.4194
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "10:00",
      "closes": "14:00"
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "124",
    "bestRating": "5"
  },
  "sameAs": [
    "https://www.google.com/maps?cid=YOUR_GOOGLE_MAPS_CID",
    "https://www.facebook.com/example",
    "https://www.linkedin.com/company/example"
  ]
}
</script>

Restaurant Subtype Schema

LocalBusiness subtype example for restaurants with additional type-specific properties:

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "The Example Kitchen",
  "servesCuisine": ["Italian", "Mediterranean"],
  "hasMenu": "https://www.example.com/menu",
  "acceptsReservations": "True",
  "priceRange": "$$$",
  "address": { ... },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Tuesday", "Wednesday", "Thursday"],
      "opens": "17:00",
      "closes": "22:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Friday", "Saturday"],
      "opens": "12:00",
      "closes": "23:00"
    }
  ],
  "menu": {
    "@type": "Menu",
    "hasMenuSection": [
      {
        "@type": "MenuSection",
        "name": "Pasta",
        "hasMenuItem": [
          {
            "@type": "MenuItem",
            "name": "Spaghetti Carbonara",
            "offers": { "@type": "Offer", "price": "18", "priceCurrency": "USD" }
          }
        ]
      }
    ]
  }
}

Multi-Location Business Schema

Handle multiple business locations with separate LocalBusiness schemas:

// For businesses with multiple locations,
// create separate LocalBusiness schema on each location page

// app/locations/san-francisco/page.tsx
const sfLocationSchema = {
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://www.example.com/locations/san-francisco#location",
  "name": "Example Agency – San Francisco",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Market Street",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94105",
  },
  // ... SF-specific hours, phone, etc.
  "parentOrganization": {
    "@type": "Organization",
    "@id": "https://www.example.com/#organization"
    // References your main Organization schema
  }
};

// app/locations/new-york/page.tsx
const nyLocationSchema = {
  "@type": "LocalBusiness",
  "@id": "https://www.example.com/locations/new-york#location",
  "name": "Example Agency – New York",
  // ... NY-specific data
};

Common Use Cases

  • Restaurants, cafes, and food service businesses targeting local search
  • Medical and healthcare practices improving local patient discovery
  • Law firms and professional services targeting city-specific searches
  • Retail stores and boutiques wanting local pack visibility
  • Service businesses (plumbers, electricians) targeting near-me searches

Pro Tip

Keep your LocalBusiness schema synchronized with your Google Business Profile by auditing both simultaneously whenever you make changes. Set a quarterly calendar reminder to verify that NAP data, opening hours, and service area information match across your schema, GBP, and all major citation sources (Yelp, Yellow Pages, industry directories). Consistency across all these sources is one of the most important local ranking factors.

Frequently Asked Questions

Does LocalBusiness schema replace Google Business Profile?+
No — they serve different purposes and both are needed. Google Business Profile (GBP) is your listing on Google Maps and the Local Pack. LocalBusiness schema is structured data on your website. GBP is the primary driver of local pack visibility. LocalBusiness schema reinforces your website's local relevance and provides authoritative data that Google cross-references with your GBP. Use both for maximum local search impact.
What is the difference between LocalBusiness and Organization schema?+
Organization schema establishes your brand identity at a company level. LocalBusiness schema (a subtype of Organization) adds location-specific information — address, opening hours, phone number, geo coordinates — that's essential for local search. Use Organization on your homepage for brand identity and LocalBusiness on location pages or your contact page for local search visibility.
Should service-area businesses use LocalBusiness schema?+
Yes, with modifications. Service-area businesses (plumbers, delivery services) that serve a geographic area without a public storefront should still use LocalBusiness schema but can include areaServed instead of or in addition to a physical address. If you don't have a public address, you can omit the address but should include areaServed with the geographic area you serve.
How specific should the LocalBusiness @type be?+
As specific as accurately applies to your business. Google recognizes over 100 LocalBusiness subtypes from schema.org — using a specific subtype like DentalClinic instead of generic MedicalBusiness, or ItalianRestaurant instead of Restaurant, provides more precise signals. However, never use a subtype that doesn't accurately describe your business — accuracy is more important than specificity.
How do I handle seasonal or holiday hours in LocalBusiness schema?+
Use multiple OpeningHoursSpecification objects with validFrom and validThrough dates for special hours. You can have standard hours as the baseline and add separate specifications for holiday periods with specific date ranges. Update these proactively before holidays rather than reactively — users searching for business hours on a holiday need accurate information before they travel to your location.