We are live·Founding pricing - 50% off, locked for lifeClaim 50% off →
SEOGraphySEOGraphy
AboutHow It WorksPricingBlogLearnFree SEO ToolsFree AI Tools
Log inStart free
AboutHow It WorksPricingBlogLearnFree SEO ToolsFree AI ToolsLog inStart free
Learn/Local SEO/LocalBusiness schema: telling search engines exactly who and where you are
Local SEO·07/Aug/2026·8 min read

LocalBusiness schema: telling search engines exactly who and where you are

Structured data is the one place you can state your identity in machine-readable form with no ambiguity. Here is the LocalBusiness markup that matters and the mistakes that quietly invalidate it.

Key takeaways

  • ✓LocalBusiness markup is not a direct ranking factor - it removes ambiguity, and confidence drives which listing gets shown.
  • ✓Use the most specific schema.org subtype that fits, exactly as you would a Business Profile category.
  • ✓Never stamp one location block site-wide. Each location page needs its own markup.
  • ✓Self-serving aggregateRating on your own reviews is an explicit guideline violation.
  • ✓Structured data fails silently. Validate the rendered output after every deploy that touches a location template.

Everything else in local SEO involves inference. Google reads your pages, your citations, and your reviews, and infers what business you are and where. Structured data is the one channel where you state it directly, in a format built for machines.

That does not make it a ranking factor in the simple sense. LocalBusiness markup does not push you up the map pack on its own. What it does is remove ambiguity - and in a system where confidence drives which listing gets shown, removing ambiguity is worth doing.

Pick the most specific type

Schema.org gives LocalBusiness a deep subtype tree: Dentist, Plumber, Restaurant, AutoRepair, LegalService, and dozens more. Use the most specific type that fits, exactly as you would with a Business Profile category. Falling back to the generic LocalBusiness when a precise subtype exists throws away the clearest relevance statement available to you.

If nothing fits well, use LocalBusiness rather than forcing a bad subtype. A wrong type is worse than a general one.

The properties that carry weight

A minimal but genuinely useful LocalBusiness block covers:

  • name - matching your canonical NAP string exactly, and matching your Business Profile.
  • address as a nested PostalAddress - street, locality, region, postal code, country as separate properties, never one flat string.
  • telephone - the real NAP number, not a tracking number.
  • url - the canonical URL of the location page.
  • geo as a GeoCoordinates pair - useful for service-area businesses in particular.
  • openingHoursSpecification - structured, not prose, and kept in step with your Business Profile.
  • sameAs - your Business Profile URL and your primary social and directory listings. This is the property that explicitly ties the entities together.
  • priceRange, image, and areaServed where they genuinely apply.

Use JSON-LD in a script tag rather than microdata in the HTML. It is what Google recommends, it survives template edits far better, and it is readable by a human reviewing it six months later.

The mistakes that invalidate the whole block

Structured data fails quietly. The page renders fine, nothing looks broken, and the markup is simply ignored. The common causes:

  • Marking up content that is not on the page. Google requires the structured data to reflect visible content. An address in JSON-LD that appears nowhere on the page is a guideline violation.
  • The same block on every page. A multi-location site that stamps the head office markup site-wide tells search engines every page is the head office. Each location page needs its own.
  • Address as a single string. PostalAddress exists so the components can be parsed. Flattening it defeats the point.
  • Self-serving aggregateRating. Marking up your own average review score, from reviews you collected yourself, has been an explicit violation for years. Reviews on your Business Profile are already counted; do not restate them here.
  • Drift. Hours change on the Business Profile and nobody updates the JSON-LD. Six months later the two disagree, which is worse than having no markup at all.

Service-area businesses

If you travel to customers and have no public premises, do not publish a full street address you do not want shown. Model it with areaServed - as named places or a GeoCircle around your base - and keep the address minimal or omitted, consistent with how the Business Profile is configured.

The rule is consistency: if the Business Profile hides the address, the schema should not broadcast it.

Validate before and after every deploy

Markup is generated by templates, and templates get edited. A change to a location page component can strip a required property without anyone noticing, and the failure is invisible in the browser.

Validate the rendered output - not the source template - after every deploy that touches a location page, and check a real URL from each location template rather than assuming one sample covers the rest.

⚡ Try it inline

Validate your LocalBusiness markup

Extract and check the structured data on any live URL, so you can confirm the rendered JSON-LD is intact and complete.

Open full tool →
Loading tool…

Where this pays off next

Structured data is becoming more valuable rather than less, because the systems consuming it have multiplied. AI assistants answering "who does emergency electrical work near me" are pulling from the same entity graph that structured data feeds. An unambiguous, consistent, machine-readable statement of who and where you are is now doing work in places that did not exist a few years ago.

Checklist

LocalBusiness schema DOs & DON'Ts

DO

  • ✓

    Use the most specific schema.org subtype available

    Dentist, Plumber, AutoRepair, LegalService. Fall back to the generic LocalBusiness only when no subtype genuinely fits - a wrong type is worse than a general one.

  • ✓

    Nest the address as a PostalAddress with separate components

    Street, locality, region, postal code, and country as distinct properties. The type exists so the parts can be parsed independently.

  • ✓

    List your Business Profile and primary directory URLs in sameAs

    This is the property that explicitly ties the website entity to the profile entity, instead of leaving the link to be inferred.

  • ✓

    Give every location page its own markup block

    Location-specific name, address, hours, geo, and URL. This is what makes each page a distinct entity rather than a variant.

  • ✓

    Validate the rendered output after every deploy touching location templates

    Check a real URL from each template, not the source file. Structured data fails silently and the page looks perfectly fine in a browser.

DON'T

  • ×

    Don't mark up an address that appears nowhere on the visible page

    Structured data must reflect visible content. Invisible markup is a guideline violation and a common reason a block is ignored entirely.

  • ×

    Don't stamp one location's markup site-wide

    A multi-location site outputting the head office block on every page tells search engines every page is the head office.

  • ×

    Don't add self-serving aggregateRating from your own reviews

    It's been an explicit violation for years. Reviews on your Business Profile are already counted - restating them in your own markup isn't.

  • ×

    Don't publish a street address the Business Profile deliberately hides

    For a service-area business, model coverage with areaServed or a GeoCircle and keep the schema consistent with the profile configuration.

  • ×

    Don't let the markup drift out of step with the profile

    Hours change on the profile and nobody updates the JSON-LD. Six months later your own sources contradict each other, which is worse than no markup.

One location is straightforward. The next lesson covers what changes when there are twenty of them.

Free eBook

Grab The SEO Blueprint.

How to get found on Google, get cited by AI, and attract customers on autopilot - a practical guide for business owners and entrepreneurs.

  • Keyword research and on-page SEO tactics
  • Technical SEO and link building strategies
  • A 90-day SEO action plan

No spam. Unsubscribe any time. Your email is safe with us.

The SEO Blueprint - free eBook by Shammika Munugoda
Quick quiz · 5 questions

LocalBusiness schema - quick check

5 randomized questions drawn from a pool of 11. Different every time you take it. Takes about two minutes.

Founding pricing

Lock in 50% off for life.

SEOGraphy is live. Subscribe before 31 October and keep 50% off for the lifetime of your plan - the discount never expires, the offer does.

Claim 50% off forever
← PreviousLocal link building and reviews: how prominence is actually earnedNext →Multi-location SEO and how map pack rankings are actually decided
Keep learning

More in Local SEO

How to optimise your Google Business Profile for the map pack

9 min read
→

NAP consistency and local citations: the trust layer under your rankings

8 min read
→

Local keyword research and service-area pages that do not cannibalise

10 min read
→

Skip the writing. Keep the SEO.

SEOGraphy drafts, illustrates, and publishes articles that follow the playbook above - automatically.

Try SEOGraphy free →
SEOGraphySEOGraphy

AI-powered blog writing with auto-generated images and one-click WordPress publishing.

Product

  • How It Works
  • Pricing
  • Roadmap
  • Changelog
  • Join Waitlist

Learn

  • Technical SEO
  • On-Page SEO
  • Off-Page SEO
  • Keyword Research
  • All Guides →

Free SEO Tools

  • HTTP Status Checker
  • Page Title Checker
  • Robots.txt Checker
  • Broken Link Checker
  • All Free Tools →

Free AI Tools

  • Blog Post Generator
  • AI Introduction Writer
  • AI Conclusion Writer
  • FAQ Generator
  • All Free AI Tools →

Company

  • About
  • Blog
  • Help
  • Support
  • Testimonials
DocsFeature RequestsPrivacyTermsCookie PolicyDPASecurityStatus

© 2026 SEOGraphy. All rights reserved.

Made in Melbourne 🇦🇺. Built by Apptimistic