Schema.org markup for local SEO: LocalBusiness, hours, reviews and a complete example

The markup that describes your business to Google and to AI, with a ready-to-adapt example

The essentials

  • Definition: structured data is markup (in JSON-LD format) describing a page's content to the engines: here, a business, its details, its hours, its reviews.
  • Type: LocalBusiness or a specific subtype (Restaurant, Dentist, Plumber, Store…).
  • Key properties: name, address, telephone, openingHoursSpecification, geo, url, image, priceRange, sameAs.
  • Effect: understanding by Google and by AI, possible rich results (hours, reviews), consistency with the Google listing.

The Schema.org structured data is a standard vocabulary, recognised by Google, Bing and AI assistants, that lets you describe explicitly what a page contains. For a local business, the LocalBusiness type declares the location: name, address, phone, hours, GPS coordinates, type of activity, reviews. Google uses it to understand the page, connect it to the Google Business Profile listing and, sometimes, show rich results. The markup goes in a JSON-LD script in the <head> of the local page.

Choosing the right type

LocalBusiness works for any business, but a specific subtype is preferable: Google and AI understand the activity better.

BusinessSchema.org type
Restaurant, café, barRestaurant, CafeOrCoffeeShop, BarOrPub
RetailStore and subtypes (ClothingStore, Florist, HardwareStore)
Building tradesPlumber, Electrician, RoofingContractor, HVACBusiness, GeneralContractor
HealthcareDentist, Physician, MedicalClinic, Pharmacy
ServicesLegalService, AccountingService, RealEstateAgent, AutoRepair, BeautySalon
AccommodationHotel, LodgingBusiness
OtherLocalBusiness (generic) or ProfessionalService

The properties to fill in

PropertyExampleImportance
nameThe exact name, identical to the Google listingRequired
address (PostalAddress)Street, postcode, town, countryRequired
telephoneInternational format (+33…)Strongly recommended
urlThe URL of the local pageStrongly recommended
imageA photo of the businessRequired for some rich results
openingHoursSpecificationDays and hours, identical to the listingRecommended
geo (GeoCoordinates)Latitude, longitudeRecommended
priceRange"€€" or a rangeRecommended
sameAsThe URL of the Google listing, social media, directoriesRecommended (entity consistency)
areaServedThe towns or area servedUseful for home-service businesses
aggregateRatingRating and number of reviewsOnly for reviews collected on your own site, not Google's

A complete example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Dupont Plomberie",
  "image": "https://www.dupont-plomberie.fr/images/agence-nantes.jpg",
  "url": "https://www.dupont-plomberie.fr/agences/nantes/",
  "telephone": "+33240000000",
  "priceRange": "€€",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "12 rue des Carmes",
    "postalCode": "44000",
    "addressLocality": "Nantes",
    "addressCountry": "FR"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": 47.2172, "longitude": -1.5534 },
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "08:00", "closes": "18:00" }
  ],
  "areaServed": ["Nantes", "Saint-Herblain", "Rezé"],
  "sameAs": [
    "https://maps.google.com/?cid=XXXXXXXX",
    "https://www.facebook.com/dupontplomberie"
  ]
}
</script>

For a network, each branch page carries its own block with its own details; the home page carries an Organizationblock. CMSs and SEO plugins (Yoast, Rank Math) generate this markup from fields you fill in.

The other types useful to a local business

TypeWhereWhat it brings
OrganizationHome pageOverall identity: logo, contact, social profiles, description
ServiceService pagesDescribes each service and its area (areaServed)
FAQPagePages with questions and answersPossible rich results, easier extraction by AI
EventOpen days, workshopsDisplay in event results
Product with a OfferProduct pagesPrice and availability in the results
BreadcrumbListEvery pageA breadcrumb in the results

Mistakes to avoid

  • Marking up invisible information : everything in the JSON-LD must appear on the page. Google penalises misleading markup.
  • Using aggregateRating with Google reviews : Google forbids reusing its own reviews in markup; reserve that property for reviews collected on your site.
  • A NAP different from the listing : the markup must reproduce exactly the reference NAP .
  • One block for several locations : one block per local page.
  • Forgetting to update the hours or the phone number in the markup after a change.

Check

Google's rich results test and the Schema.org validator flag errors and missing properties. Search Console's "Enhancements" section lists the pages with valid or erroneous structured data. Correct markup has no immediate effect on ranking, but it strengthens the consistency of your entity for Google as for AI, which counts for GEO. It is part of the page template described in structuring your local pages and of check 15 in the local search audit.

Our advice: the sameAs property, carrying the URL of your Google Maps listing and your profiles, is the most under-used. It explicitly links the site, the listing and the social profiles into one entity, exactly what Google and AI assistants are trying to establish.

How GreenRed helps

Rather than juggling several tools, GreenRed's Site health module brings these metrics together in a single dashboard, compares them over time and tells you which actions come first. You can try it free, with no card, from the Pricing.

Frequently asked questions

Does LocalBusiness structured data improve ranking?

Not directly: Google says structured data isn't a ranking factor. It helps it understand the page, connect it to the Google Business Profile listing and can trigger rich results. That clarity indirectly benefits local SEO and citation by AI.

Can you put your Google rating in aggregateRating markup?

No. Google forbids using in markup reviews it collected itself or reviews from third-party sites. The aggregateRating property is reserved for reviews gathered and displayed on your own site, with a genuine collection system.

How do you add structured data on WordPress?

SEO plugins (Yoast, Rank Math, SEOPress) offer a "Local SEO" or "Schema" module where you fill in the business type, address, phone and hours; they generate the JSON-LD. For several locations, some modules allow per-page markup. Check the result with the rich results test.

Should you use Organization or LocalBusiness markup?

Both, in different places: Organization on the home page to describe the company as a whole (logo, contact, social profiles), LocalBusiness (or a subtype) on each location page to describe the physical place with its details and hours. For a single location, LocalBusiness is often enough, since it inherits from Organization.

Boost your organic search

GreenRed centralises the tracking of your rankings, your backlinks and your site's health, and guides you in improving them.

Improve my SEO

Related articles