
Short answer: To use schema markup for local SEO, add one LocalBusiness JSON-LD block (using the most specific subtype, such as Dentist or Plumber) to your homepage or each location page. Include your exact name, address, phone, URL, opening hours, geo coordinates and profile links, matching your Google Business Profile and the visible page word for word. Test it with the Rich Results Test and update it whenever your details change.
This guide is for local business owners, web developers and SEOs who want to add local business schema correctly, without plugins guessing on their behalf. I will explain what local schema does and does not do, which type and properties to use, give you a full JSON-LD template you can adapt, cover service-area and multi-location businesses, and list the mistakes I find most often when I audit local sites.
What local business schema does (and does not do)
Schema markup is structured data in the Schema.org vocabulary that states facts about your business in a format machines read without guessing: this is a dental clinic, at this address, open these hours, with this phone number. For local SEO it does three useful things:
- Confirms your NAP. It gives Google a clean, consistent copy of your name, address and phone, which supports the consistency it looks for across your website, Google Business Profile and local citation directories.
- Connects your entity. sameAs links to your profiles, plus a clear type and location, help search engines and AI assistants tie your website to the right real-world business.
- Feeds business details. Hours, price range, menu links and departments can be read directly rather than parsed from text.
What it does not do: it does not move you into the map pack on its own. Map rankings come mainly from your Business Profile, distance, relevance and prominence. Google’s LocalBusiness documentation also says it does not guarantee that features using structured data will appear. And it cannot get you review stars for your own business: Google’s review snippet guidelines say pages where a business controls reviews about itself, using LocalBusiness or Organization markup, are ineligible for the star review feature. I see that last point ignored constantly.
Pick the right type
Google asks you to use the most specific LocalBusiness subtype possible. Schema.org has dozens, including Dentist, LegalService, AutomotiveBusiness, FoodEstablishment, HomeAndConstructionBusiness and MedicalBusiness, many with further subtypes underneath.
| Business | Type I would use | Notes |
|---|---|---|
| Dental clinic | Dentist | Add MedicalBusiness details only if they are true |
| Restaurant or cafe | Restaurant or CafeOrCoffeeShop | Add servesCuisine, menu and acceptsReservations |
| Plumber or electrician | Plumber or Electrician | Both sit under HomeAndConstructionBusiness |
| Law firm | LegalService | Check bar advertising rules for any claims you add |
| Car workshop | AutoRepair | Under AutomotiveBusiness |
| Online-only business with no customer-facing address | Organization, not LocalBusiness | LocalBusiness implies a physical place customers can relate to |
If no subtype fits, use LocalBusiness itself. Do not stack unrelated types to cover more searches.
Your competitors are in the map pack. Are you?
See what is keeping you out of the local results.
The properties that matter
Google requires only name and address. In practice I include these on every local business:
- @id: a stable identifier such as https://example.com/#business, so other markup on the site can reference the same entity.
- name, address, telephone, url: exactly as on your Business Profile and visible contact details.
- geo: latitude and longitude with at least five decimal places, as Google specifies.
- openingHoursSpecification: real customer hours, with seasonal or holiday changes using validFrom and validThrough.
- image and logo: a real photo of the premises and your logo.
- priceRange: a short range, for example “Rs 2,000 to 15,000”, only if you are comfortable showing it.
- sameAs: links to your official profiles (Facebook, Instagram, LinkedIn, relevant directories).
- areaServed: the cities or areas you cover, particularly for service-area businesses.
- hasMap: the Google Maps link for your listing.
Leave out aggregateRating and review for reviews of your own business. They will not produce stars, and marking up reviews that are not visible on the page breaks Google’s guidelines.
A JSON-LD template you can adapt
This is the structure I use. The business is illustrative; replace every value with your real details and delete anything you cannot fill truthfully.
LocalBusiness JSON-LD template (Dentist example)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dentist",
"@id": "https://www.example.com/#business",
"name": "Johar Family Dental",
"url": "https://www.example.com/",
"telephone": "+92-21-0000-0000",
"image": "https://www.example.com/images/clinic-front.jpg",
"logo": "https://www.example.com/images/logo.png",
"priceRange": "Rs 2,000 to 150,000",
"address": {
"@type": "PostalAddress",
"streetAddress": "Shop 4, Block 13, Main University Road",
"addressLocality": "Karachi",
"addressRegion": "Sindh",
"postalCode": "75290",
"addressCountry": "PK"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 24.91234,
"longitude": 67.12345
},
"hasMap": "https://maps.google.com/?cid=0000000000000000000",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
"opens": "11:00",
"closes": "21:00"
}
],
"areaServed": ["Gulistan-e-Johar", "Gulshan-e-Iqbal", "Karachi"],
"sameAs": [
"https://www.facebook.com/example",
"https://www.instagram.com/example"
]
}
</script>Put it in the page head or body; Google reads either. On WordPress, use your SEO plugin’s local settings if they output the specific type you need, or add the block through a header code plugin or your theme. Make sure only one source outputs LocalBusiness, so you do not end up with two conflicting blocks.
You can build a first draft with my schema markup generator and then edit it by hand. My broader guide to schema markup covers the other types you will use alongside it.
Where to put it: homepage, location pages and service areas
One location
Add the LocalBusiness block to the homepage, or to the contact page if that is where your address and map are most prominent. Keep it on one page rather than every page; other pages can reference the same @id from Organization or WebSite markup.
Several locations
Give each real branch its own location page with its own LocalBusiness block, its own address, phone, hours and geo, and its own Business Profile. Name branches consistently (“Brand, Gulshan” and “Brand, DHA”). On the homepage, use Organization markup for the brand and, if you like, link branches with department or parentOrganization. My guide to multi-location local SEO covers the page structure.
Service-area businesses
If customers do not visit you and your address is hidden on your Business Profile, do not publish a full street address in schema that you hide everywhere else. Use areaServed for the areas you cover and include the address level you show publicly. The details have to be consistent with what customers see; I explain the wider setup in service-area business local SEO.
Local schema implementation checklist
- Choose the most specific type: Dentist, Plumber, Restaurant and so on, not just LocalBusiness.
- Copy NAP from your master record: the same name, address and phone as your Business Profile.
- Give the business an @id: a stable URL with a fragment, used everywhere you reference it.
- Add geo with five or more decimals: taken from your actual map pin.
- Add real opening hours: including holiday and Ramadan changes when they apply.
- Add sameAs profile links: only official profiles you control.
- Add areaServed: especially if you travel to customers.
- Skip self-serving review markup: no aggregateRating for your own business.
- Match visible content: every value should also appear on the page or be obviously true.
- Remove duplicates: check that the theme or a plugin is not outputting a second LocalBusiness block.
- Test it: run the Rich Results Test and the Schema Markup Validator.
- Monitor it: check Search Console’s enhancement reports after Google recrawls the page.
- Set a reminder to update: new phone, new hours or a move means updating schema the same day as your profile.
Ticks are saved in your browser, so you can work through it page by page.
Testing and maintaining your markup
- Rich Results Test (search.google.com/test/rich-results) shows whether Google can read the markup and flags errors and warnings for features it supports.
- Schema Markup Validator (validator.schema.org) checks the markup against the full Schema.org vocabulary, including properties Google does not use for rich results.
- View the live page source after caching and minification plugins run, because they sometimes break or strip JSON-LD.
- Use URL Inspection in Search Console to confirm Google sees the structured data on its last crawl.
Then treat schema as part of your NAP routine. When I audit local sites, outdated schema (an old phone number or last year’s hours) is more common than missing schema, usually because someone updated the Business Profile and footer but forgot the code. Run your listings through the NAP consistency checker at the same time.
Mistakes I see on local schema
- Review stars markup for your own testimonials, which is ineligible and can trigger a manual action for spammy structured data.
- Keyword-stuffed name fields such as “Best Dentist Karachi | Johar Family Dental”, which do not match the real business name.
- Two or three LocalBusiness blocks from the theme, an SEO plugin and a page builder, each with different details.
- The same LocalBusiness block on every location page, all pointing to head office.
- Geo coordinates for the city centre instead of the actual premises.
- Schema for areas you do not serve, or fake addresses to target other neighbourhoods.
Schema is one part of a complete local setup. If you are starting from scratch, my guide to local SEO for beginners puts it in order with your profile, citations and reviews.
Frequently asked questions
Does LocalBusiness schema help you rank in the map pack?
Not directly. Map pack rankings depend mainly on your Google Business Profile, relevance, distance and prominence. Schema supports consistency and helps Google understand your site, which is useful, but it is not a shortcut into the pack.
Which schema type should a local business use?
The most specific LocalBusiness subtype that describes what you do, such as Dentist, Plumber, Restaurant or AutoRepair. Use plain LocalBusiness only when no subtype fits, and Organization if you have no customer-facing location.
Can I add review stars to my own business with schema?
No. Google’s review snippet guidelines say pages where a business controls reviews about itself, using LocalBusiness or Organization markup, are not eligible for the star review feature. Focus on collecting real Google reviews instead.
Should I put LocalBusiness schema on every page?
No. Put it on the homepage or contact page for a single location, or on each branch’s own location page for multiple locations. Other pages can reference the business through its @id.
JSON-LD or microdata for local schema?
JSON-LD. Google recommends it, it is easier to maintain because it sits in one block rather than spread through the HTML, and it is the format most sites now use.
Sources
- Google Search Central, “Local business (LocalBusiness) structured data” (accessed 2026).
- Google Search Central, “Review snippet (Review, AggregateRating) structured data” (accessed 2026).
- HTTP Archive, “Web Almanac 2024: Structured Data chapter” (2024).
- Schema.org, “LocalBusiness” type definition (accessed 2026).
If you would like your local schema, Business Profile and location pages checked together, my local SEO services include a structured data review as part of every local audit.
Request received
Thank you! Saad will contact you within the next 24 hours.
Keep an eye on your phone and inbox.
