LocalBusiness Schema Generator — Strengthen Local Signals
Generate clean LocalBusiness JSON‑LD for location pages. Clarify NAP, hours, geo, and profiles to improve understanding and consistency across your site.
Why many location pages underperform
Pain points we solve
- Inconsistent NAP (name, address, phone) across locations and pages.
- Opening hours are missing or formatted inconsistently.
- Location pages lack canonical URLs and geo coordinates.
- Hand‑written JSON‑LD is hard to keep consistent across many locations.
How SwiftSchema helps
Solution
The LocalBusiness generator ensures the essentials are present and correctly formatted: a structured PostalAddress, international telephone, canonical URL, and openingHoursSpecification.
It supports geo coordinates and sameAs for official profiles, producing copy‑ready JSON‑LD for each location page, or you can use a subtype (e.g., Restaurant) when appropriate.
How it works
How it works
- Choose LocalBusiness (or a more specific subtype) in the generator below.
- Enter the business name and a full PostalAddress (street, city, region, postal code, country).
- Add telephone (international format) and the canonical URL of the location page.
- Provide openingHoursSpecification entries for each day range; add geo coordinates and sameAs profiles when available.
- Copy JSON or Script, paste on the location page, and validate in the Rich Results Test.
Use once per location. Validate. Ship.
What is LocalBusiness structured data?
LocalBusiness is the Schema.org umbrella for physical businesses that serve customers in person. It captures your precise name, address, phone number, hours, geo coordinates, pricing expectations, and official profiles. Google, Apple, and other discovery platforms rely on these details to confirm that your site, Business Profile, and citation data all refer to the same entity. When every location page publishes a consistent LocalBusiness object, you reduce ambiguity and show that each page is real, maintained, and valuable — exactly what “thin content” reviews look for.
The markup also acts as a base for more specific subtypes (Restaurant, Store, Dentist). Even if you use a subtype, you can still reference the LocalBusiness guide to ensure the common properties (NAP, hours, sameAs) are complete. LocalBusiness is the connective tissue that ties your on-page details, map pins, and review feeds together.
Why local markup still matters
- Trust and consistency: Search engines cross-check the data in LocalBusiness against Business Profiles, map data, and user reports. Consistency boosts confidence, while conflicting information can suppress visibility.
- Service clarity: Properties like priceRange,servesCuisine, orsameAsgive quick context about your offerings. Thin pages without these signals feel generic.
- Automation-friendly: When structured data mirrors the visible contact section, you can automate quality checks, inventory updates, and auditing across hundreds of locations.
- Eligibility for limited features: While Google limits LocalBusiness-rich results, certain experiences (like “places” knowledge cards) still lean on structured addresses and hours.
Local SEO success depends on more than schema, but schema is one of the few levers you fully control. Treat it as part of your location governance.
Essential properties to include
- name: Use the exact storefront or legal name for the location. If each branch adds a neighborhood descriptor (“SwiftSchema Dental – North Loop”), mirror that in the on-page H1 and signage.
- address: Provide a completePostalAddresswithstreetAddress,addressLocality,addressRegion,postalCode, andaddressCountry. Include suite numbers. Avoid PO boxes for customer-facing locations.
- telephone: Use international format (+1-512-555-0101). If you use call tracking, dedicate a static number for organic listings so schema, citations, and signage match.
- url: Canonical URL of the location page. Essential for tying the JSON-LD to the right content.
- openingHoursSpecification: Use 24-hour time strings, grouped logically (Mon-Fri vs Sat-Sun). IncludevalidFrom/validThroughfor seasonal schedules if you can automate updates.
- geo: Latitude/longitude coordinates, ideally pulled from your mapping system for accuracy.
- image: Publish high-quality exterior/interior shots to prove the business is real.
- sameAs: Link to official profiles (GBP, Yelp, social). This closes the loop for entity reconciliation.
- aggregateRating/review: Only include if you collect first-party reviews on the page and comply with Google’s review schema policies.
- priceRange: Simple string (“$$”, “$$$”) that sets expectations; align with what users see on GBP.
Write these fields into your location-data source of truth so editors aren’t guessing.
Preparing content for location pages
- Audit your NAP data: Pull data from your CRM/locator to confirm each location’s name, address, phone, and hours. Resolve discrepancies before publishing schema.
- Gather media assets: Collect photos, logos, and optional virtual tours. Verify you have usage rights.
- Document services and attributes: For multi-service locations (e.g., branches offering EV charging), record those details so you can mention them in the body copy and, when applicable, hasOfferCatalogorserviceType.
- Capture geo coordinates: Use the same lat/long across all systems (locator, GBP, schema). Round to four or five decimals for precision without overkill.
- List official profiles: Maintain a sheet of URLs for GBP, Facebook, Yelp, etc., to feed sameAs.
- Plan review strategy: Decide whether to include aggregate ratings. If yes, ensure reviews are first-party and appear on the page.
- Define multi-location hierarchy: Determine whether each page references a parent Organization or Region via isPartOf. Document breadcrumb structure accordingly.
With this prep, each location page can deliver 750+ words of unique value: service descriptions, team bios, testimonials, neighborhood tips, and structured data that all reinforce authenticity.
Implementation workflow inside SwiftSchema
- Choose LocalBusiness (or the most specific subtype available) in the generator.
- Enter the location name, canonicalurl, and contact info. If using a subtype, ensure the@typelist includes both (e.g.,["Restaurant","LocalBusiness"]).
- Input the full PostalAddress exactly as displayed on the page. Keep abbreviations consistent with postal standards (e.g., “Suite 200”).
- Add telephone, optionalfaxNumber, andcontactPointentries if you have dedicated support lines.
- Configure openingHoursSpecification. For 24/7 operations, specify each day with00:00–23:59rather than writing “24/7”.
- Provide geocoordinates,imagearray, andpriceRange. If multiple images exist, include up to 10 high-quality URLs.
- Attach sameAsprofile links and optionalhasMapwith Google Maps URL.
- When relevant, extend the schema with amenityFeature,acceptsReservations,menu, orhasOfferCatalog.
- Export the JSON-LD and place it on the location page alongside BreadcrumbList and WebPage markup. Validate using the Rich Results Test and keep a log of validator URLs for audits.
Troubleshooting and QA
- Address mismatches: If Search Console reports conflicting info, compare your schema to GBP data. Update both simultaneously to avoid trust issues.
- Hours not updating: Automate holiday/special hours via CMS fields. Editors forgetting to change JSON-LD is a common issue. Consider referencing the same structured data feed for on-page and schema hours.
- Duplicate content: Ensure each location page contains unique descriptive paragraphs, not just the schema. Highlight staff, neighborhoods, parking tips, etc., to avoid thin pages.
- Tracking numbers: If marketing swaps phone numbers for campaigns, ensure the schema and on-page primary number remain consistent. Use contactPointfor additional lines.
- Geo precision errors: Use decimal degrees, not truncated integers. Double-check lat/long orientation (latitude first, positive for North).
- Review policy violations: Do not mark up third-party review widgets. Use AggregateRating only for reviews you host and moderate.
Implement automated QA: scripts that compare schema address to on-page text, verify numbers use E.164 format, and confirm hours cover every day of the week.
Maintenance and scaling
Local data changes frequently: hours shift, branches relocate, and service offerings expand. Establish a governance process where any operational change triggers schema updates. Keep
For multi-location brands, store master data in a centralized system (CMS, spreadsheet, or PIM) and feed SwiftSchema via bulk copy/paste or API. Track each location’s schema status in a CSV that lists word count, data sources, last review date, and validator URL. When launching new locations, create a checklist that includes generating LocalBusiness schema alongside GBP verification, signage, and locator updates.
If you sunset a location, remove or redirect the page, update your locator, and delete the schema to avoid misleading crawlers. Historical context (e.g., “This branch moved”) can remain on a blog post but should not be marked as an active LocalBusiness.
Common Errors & Fixes
- Incomplete addresses: provide the full PostalAddress fields.
- Mixed hour formats: use 24‑hour HH:MMstrings for opens/closes.
- Missing canonical URL: link the JSON‑LD to the specific location page URL.
- Reused schema across locations: generate distinct JSON-LD per branch with unique NAP data.
- Forgotten sameAs links: keep profile URLs updated to reinforce entity authority.
Required properties
nameaddress.streetAddressaddress.addressLocalityaddress.addressRegionaddress.postalCodeaddress.addressCountrytelephone
Recommended properties
urlimageopeningHoursSpecification.opensopeningHoursSpecification.closesopeningHoursSpecification.dayOfWeekgeo.latitudegeo.longitudepriceRangesameAs[]aggregateRating.ratingValueaggregateRating.ratingCount
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "ACME Bike Repair",
"image": [
"https://example.com/images/acme-bike-repair.webp"
],
"url": "https://example.com/locations/downtown",
"telephone": "+1-555-555-1234",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday"
],
"opens": "09:00",
"closes": "18:00"
}
],
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
}
}