Course → Module 2: Structured Data: Speaking Google's Language
Session 6 of 10

If your business has a physical location that customers visit, or if you serve a specific geographic area, LocalBusiness is more accurate than Organization. It inherits everything from Organization and adds location-specific properties that are critical for local search: geo coordinates, opening hours, price range, and area served.

Google treats LocalBusiness as a strong signal for local pack results, map listings, and location-based Knowledge Panels. For businesses that depend on local visibility, this is not optional.

LocalBusiness vs. Organization

The decision between Organization and LocalBusiness is straightforward:

Criteria Use Organization Use LocalBusiness
Physical location? No storefront or office Yes, customers can visit
Service area? Nationwide or global, no local focus Specific city, region, or district
Operating hours? Not applicable Yes, defined business hours
Google Maps listing? No Yes, via Google Business Profile
Local pack eligibility? No Yes

Many businesses fall into a gray area. A consulting firm that operates from an office but primarily serves clients remotely might use either. The test: does your Google Business Profile exist and is it actively managed? If yes, use LocalBusiness (or a more specific subtype).

LocalBusiness Subtypes

LocalBusiness has many children in the Schema.org hierarchy. Use the most specific one that fits:

graph TD LB["LocalBusiness"] --> FS["FoodEstablishment"] LB --> Store LB --> PS["ProfessionalService"] LB --> MB["MedicalBusiness"] LB --> AE["AutomotiveBusiness"] LB --> EB["EntertainmentBusiness"] FS --> Restaurant FS --> Bakery FS --> CafeOrCoffeeShop Store --> HardwareStore Store --> ElectronicsStore PS --> LegalService PS --> AccountingService MB --> Dentist MB --> Pharmacy style LB fill:#222221,stroke:#c8a882,color:#ede9e3 style FS fill:#222221,stroke:#6b8f71,color:#ede9e3 style Store fill:#222221,stroke:#6b8f71,color:#ede9e3 style PS fill:#222221,stroke:#6b8f71,color:#ede9e3 style MB fill:#222221,stroke:#6b8f71,color:#ede9e3 style AE fill:#222221,stroke:#6b8f71,color:#ede9e3 style EB fill:#222221,stroke:#6b8f71,color:#ede9e3 style Restaurant fill:#222221,stroke:#8a8478,color:#ede9e3 style Bakery fill:#222221,stroke:#8a8478,color:#ede9e3 style CafeOrCoffeeShop fill:#222221,stroke:#8a8478,color:#ede9e3 style HardwareStore fill:#222221,stroke:#8a8478,color:#ede9e3 style ElectronicsStore fill:#222221,stroke:#8a8478,color:#ede9e3 style LegalService fill:#222221,stroke:#8a8478,color:#ede9e3 style AccountingService fill:#222221,stroke:#8a8478,color:#ede9e3 style Dentist fill:#222221,stroke:#8a8478,color:#ede9e3 style Pharmacy fill:#222221,stroke:#8a8478,color:#ede9e3

Location-Specific Properties

geo (GeoCoordinates)

Latitude and longitude of your business location. This is what ties your structured data to a point on the map. Get these from Google Maps: right-click your location, copy the coordinates.

openingHoursSpecification

Do not use the simple openingHours text property. Use openingHoursSpecification with an array of OpeningHoursSpecification objects. This is more precise and allows you to specify different hours for different days.

priceRange

A simple string like "$", "$$", "$$$", or "$$$$". Google uses this for display in local results. It is a rough indicator, not a precise price list.

Complete Example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "@id": "https://www.example.com/#localbusiness",
  "name": "Example Industries",
  "url": "https://www.example.com",
  "logo": "https://www.example.com/images/logo.png",
  "image": "https://www.example.com/images/storefront.jpg",
  "telephone": "+62-21-555-0100",
  "priceRange": "$$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "Jl. Sudirman No. 45",
    "addressLocality": "Jakarta",
    "addressRegion": "DKI Jakarta",
    "postalCode": "10220",
    "addressCountry": "ID"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": -6.2088,
    "longitude": 106.8456
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "08:00",
      "closes": "17:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": "Saturday",
      "opens": "09:00",
      "closes": "13:00"
    }
  ],
  "areaServed": {
    "@type": "GeoCircle",
    "geoMidpoint": {
      "@type": "GeoCoordinates",
      "latitude": -6.2088,
      "longitude": 106.8456
    },
    "geoRadius": "50000"
  },
  "sameAs": [
    "https://www.linkedin.com/company/example-industries",
    "https://www.facebook.com/exampleindustries",
    "https://g.co/kgs/abc123"
  ]
}
</script>

Multi-Location Businesses

If your business has multiple locations, each location gets its own LocalBusiness schema block on its respective location page. The parent organization uses Organization schema on the main site. Each location references the parent:

"parentOrganization": {
  "@type": "Organization",
  "@id": "https://www.example.com/#organization",
  "name": "Example Industries"
}

This creates a hierarchy: one Organization entity with multiple LocalBusiness children. Google can then associate reviews, content, and signals from each location back to the parent brand.

Key concept: LocalBusiness schema is where your digital identity meets physical geography. The geo coordinates, address, and opening hours create a verifiable, mappable entity that Google can cross-reference with its Maps data, your GBP listing, and third-party citations. This cross-referencing is how entity confidence is built.

Alignment With Google Business Profile

Every data point in your LocalBusiness schema must match your Google Business Profile exactly. Name, address, phone, hours, categories. If your GBP says you close at 17:00 and your schema says 18:00, you have created a conflict. Google resolves conflicts by trusting the source it considers more authoritative, and that might not be your structured data.

Further Reading

Assignment

If your entity has a physical location:

  1. Create a LocalBusiness (or appropriate subtype) schema block with all location-specific properties.
  2. Look up your exact geo coordinates from Google Maps.
  3. Define opening hours using openingHoursSpecification with day-specific entries.
  4. Compare every field against your Google Business Profile listing. Document any discrepancies.
  5. If your entity has no physical location, explain in writing why Organization is the correct type for your use case.