Local business schema markup is structured data, in JSON-LD, that tells Google exactly which real-world business your website represents: its name, address, phone, hours, geo-coordinates, services and the Google Business Profile it belongs with. It does not rank a page by itself. What it does is remove ambiguity, so Google connects the site, the profile and the citations into one entity, and it makes the page eligible for rich results such as hours, review snippets and FAQ drop-downs. This guide covers which type to use, the fields that matter, how to handle multiple locations and services, what not to do, and how to validate it.

Choosing the Type
LocalBusiness is the generic type; almost every business has a more specific subtype that Google understands better. Dentist, Attorney or LegalService, Plumber, Electrician, HVACBusiness, RoofingContractor, HomeAndConstructionBusiness, RealEstateAgent, Restaurant, MedicalClinic, Physiotherapy, AccountingService, AutoRepair, BeautySalon, ProfessionalService. Use the most specific type that is accurate; if none fits, use LocalBusiness. For a business that is also an organisation with multiple locations, the Organization is the parent and each location is a LocalBusiness subtype with its own address. Schema.org’s full hierarchy is under LocalBusiness on schema.org.
The Fields That Matter
Required in practice: @type, name (the real business name, matching the profile exactly), address as a PostalAddress with streetAddress, addressLocality, addressRegion, postalCode and addressCountry, telephone in international format, url, and image. Strongly recommended: geo (latitude and longitude of the actual pin), openingHoursSpecification for each day, sameAs listing the Google Business Profile URL, social profiles and major directory listings, areaServed for service-area businesses, hasMap linking to the Maps listing, and description. For service businesses, add hasOfferCatalog or makesOffer listing each Service, or mark up each service page with its own Service type whose provider is the LocalBusiness. Do not include price or priceRange unless you actually publish prices; leave the field out rather than guess.
Example
A single-location business looks like this in outline: a LocalBusiness subtype with name, image, url, telephone, address, geo, openingHoursSpecification, sameAs and, if relevant, areaServed. Place it in a script tag of type application/ld+json in the head or body of the location page and the contact page. Rank Math, Yoast and Schema Pro generate this from settings; Rank Math’s Local SEO module handles a single location or a multi-location setup with a locations post type, and outputs the sameAs and opening hours from fields you fill in once.
Multiple Locations
Each location gets its own page and its own LocalBusiness markup with that location’s address, phone, hours and geo. The homepage carries Organization markup that names the brand, logo, and sameAs, and can list the locations as subOrganization or department, though a simpler approach that validates cleanly is to keep the Organization on the homepage and the LocalBusiness markup on each location page only. Never put every location’s address on one page in one block; Google cannot tell which one the page is about. Each location page’s markup should point its url to itself and its sameAs to that location’s own Google Business Profile.
Services and FAQs
Service pages should carry Service markup with name, description, provider (the LocalBusiness, by reference to its @id), areaServed and serviceType. FAQPage markup on pages with a genuine question-and-answer section is still supported, though Google now shows the rich result mainly for authoritative government and health sites; it remains useful for entity understanding and for AI answer engines. Review and AggregateRating markup should only be used for reviews collected on your own site; marking up Google reviews as if they were yours violates Google’s guidelines and is one of the most common causes of a manual action on local sites.
What Not to Do
Do not mark up content that is not visible on the page. Do not include a second business’s name or address. Do not use a tracking phone number in schema that differs from the profile. Do not stack multiple LocalBusiness blocks from different plugins; a theme, an SEO plugin and a page builder can each emit one, producing three conflicting entities. Check the page source once and disable the extras. Do not use priceRange with a guess.
Validation
Test with Google’s Rich Results Test for eligibility and the Schema Markup Validator for syntax. Then check Search Console’s enhancement reports after a couple of weeks for errors on live pages. A common failure is a valid block on the staging site that a cache plugin strips or duplicates on the live site, so validate the live URL, not the editor preview.
Frequently Asked Questions
Does schema markup improve local rankings?
Not directly. It removes ambiguity about which business the site represents and makes rich results possible. Sites with clean schema tend to rank better because the entity is clearer, but the markup is a supporting signal, not a lever.
Which schema type should a local business use?
The most specific accurate subtype of LocalBusiness: Dentist, Plumber, Restaurant, Attorney, and so on. Use plain LocalBusiness only when no subtype fits.
Should I include reviews in schema?
Only reviews collected on your own website. Marking up Google or third-party reviews as your own violates Google’s guidelines.
Where should the schema go?
On the location page and contact page for a single location; on each location’s page for multi-location businesses; with Organization markup on the homepage.
Where This Fits
Schema is one of the website checks in the local SEO audit checklist and one of the technical foundations of our local SEO services. It ties the site to the Google Business Profile and to the citations that confirm the same name, address and phone elsewhere; service-area businesses should read service-area business SEO for how areaServed replaces the address.








