A local business page describes a business someone can visit: a street address, opening hours, a phone number. The markup is LocalBusiness — or better, its most specific applicable subtype — and the reward is a local listing: the knowledge panel with hours, directions and the call button.

What is required

  • name — the business's real-world name, exactly as it appears on the sign and in your Google Business Profile. Variants ("Example Café – Best Coffee in Town") read as keyword stuffing.
  • address — a structured PostalAddress with street, locality, region, postal code and country as separate properties. An address as one comma-separated string is readable by a person and only a guess to a parser.

What earns the fuller panel

  • openingHoursSpecification — structured hours, not a sentence. A human reads "Mon–Fri 9–6"; a parser does not. Structured hours are what let "open now" queries include you.
  • geo — latitude and longitude, which disambiguate an address a geocoder gets wrong. New developments, complex campuses and side entrances are the usual victims.
  • telephone — with the country code.
  • priceRange — the ₹/₹₹/₹₹₹ scale shown in the panel.
  • image and url — a real photograph, and the canonical URL of this location's page.

Pick the most specific type that fits

Restaurant, Store, ProfessionalService, MedicalBusiness and dozens more are all subtypes of LocalBusiness. The specific type carries information the generic one cannot — a Restaurant can declare servesCuisine and accept reservations. Use the most specific true claim; fall back to LocalBusiness only when nothing narrower fits.

An example

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Example Kitchen",
  "address": {"@type": "PostalAddress",
              "streetAddress": "12 Mill Road",
              "addressLocality": "Coimbatore",
              "addressRegion": "TN",
              "postalCode": "641001",
              "addressCountry": "IN"},
  "geo": {"@type": "GeoCoordinates",
          "latitude": 11.0168, "longitude": 76.9558},
  "telephone": "+91-422-000-0000",
  "servesCuisine": "South Indian",
  "priceRange": "₹₹",
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "09:00", "closes": "22:00"
  }],
  "url": "https://example.com/locations/mill-road",
  "image": "https://example.com/img/mill-road-front.jpg"
}

The mistakes that muddle listings

The markup on every page. LocalBusiness markup belongs on the location's own page — one location, one page. Stamping it sitewide from a footer template tells Google every page IS the business, and none of them wins.

Multiple branches in one block. Each branch is its own LocalBusiness on its own page, with its own address and hours.

Markup that disagrees with the Business Profile. Name, address and phone should match what Google already believes; the disagreement costs trust in both.

Checking your page

Validate the block and the address structure with the structured data validator, then run the complete page audit — the panel also depends on the page being indexable and the images fetchable, which are questions about the page rather than the markup.