ScanMyGEO
Blog /

JSON-LD for Local Businesses: The Complete Guide

Learn how to add JSON-LD structured data to your local business website. Complete LocalBusiness schema guide with code examples, field explanations, and common mistakes.

If there’s one single change that most improves a local business’s chances of appearing in AI search results, it’s adding JSON-LD structured data to your website. It’s free, it takes about 30 minutes, and it makes your business machine-readable to every AI engine on the internet.

This guide explains what JSON-LD is, walks through every field in the LocalBusiness schema, provides complete code examples you can copy and customize, and covers the mistakes that trip up most businesses.

What Is JSON-LD?

JSON-LD stands for JavaScript Object Notation for Linked Data. It’s a standardized format, defined by Schema.org and endorsed by Google, that lets you describe your business in structured, machine-readable code.

Think of it this way: your website content is written for humans. A visitor can look at your contact page and understand your address, phone number, and hours. But an AI model processing millions of pages can’t reliably extract this information from free-form text. It might confuse a client’s address with yours, miss your phone number because it’s in an image, or misunderstand your hours because they’re written in an unusual format.

JSON-LD solves this by giving AI engines a clean, unambiguous data card for your business. Every piece of information is explicitly labeled: this is the business name, this is the street address, this is the phone number, these are the hours.

Why Does JSON-LD Matter for AI Visibility?

AI search engines like Google AI Overviews, ChatGPT, and Perplexity need structured data to confidently include businesses in their answers. Here’s why:

  1. Accuracy: Structured data eliminates guesswork. AI knows your address is “391 Sutter Street” — not the address of a business you mentioned in a case study.

  2. Completeness: JSON-LD ensures all key business information is available in one place, even if your website spreads it across multiple pages.

  3. Confidence: When an AI model finds structured data that matches information from other sources (Google Business Profile, Yelp, directory listings), it gains confidence that the data is correct.

  4. Discoverability: Google’s own AI Overviews specifically use structured data from websites as a grounding signal. Sites with valid JSON-LD are measurably more likely to appear in AI-generated answers.

The LocalBusiness Schema: Field by Field

The LocalBusiness schema is the primary JSON-LD type for local businesses. Below is every important field, explained:

Required Fields

@context — Always "https://schema.org". This tells parsers you’re using Schema.org vocabulary.

@type — The specific business type. Use "LocalBusiness" as a default, or a more specific subtype like "ProfessionalService", "Restaurant", "Dentist", "AutoRepair", "LegalService", etc. The more specific you can be, the better.

name — Your exact business name. Match this to your Google Business Profile and all directory listings.

address — Your business address, structured as a PostalAddress object with streetAddress, addressLocality (city), addressRegion (state), and postalCode.

telephone — Your primary phone number in international format (e.g., "+1-415-397-2702").

url — Your website URL (e.g., "https://yourbusiness.com").

image — URL to a photo of your business, logo, or storefront. Use a full URL, not a relative path.

openingHoursSpecification — Your business hours, structured as an array of objects specifying dayOfWeek, opens, and closes times.

geo — Your geographic coordinates as a GeoCoordinates object with latitude and longitude. This is critical for local search relevance.

priceRange — A general indicator like "$$" or "$$$". While imprecise, it helps AI engines categorize your business.

description — A 1-2 sentence description of your business. Be specific about what you do and where.

Advanced Fields

sameAs — An array of URLs to your social media profiles and directory listings (LinkedIn, Facebook, Yelp, etc.). This connects your entity across the web.

hasMap — A link to your Google Maps listing.

aggregateRating — Your review rating, structured with ratingValue and reviewCount. Only include this if you have a mechanism for collecting reviews on your own site — don’t fabricate ratings.

areaServed — The geographic areas you serve, as an array of City or State objects.

serviceType or hasOfferCatalog — The specific services you provide.

Complete Code Example

Here’s a complete, production-ready LocalBusiness JSON-LD block for a fictional IT services company. Copy this and replace the values with your own business information:

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Bay Area Tech Solutions",
  "description": "Managed IT services and cybersecurity for small businesses in San Francisco Bay Area. 24/7 support, cloud migration, and network management.",
  "url": "https://bayareatechsolutions.com",
  "telephone": "+1-415-555-0199",
  "email": "[email protected]",
  "image": "https://bayareatechsolutions.com/images/storefront.jpg",
  "logo": "https://bayareatechsolutions.com/images/logo.png",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Market Street, Suite 400",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94105",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 37.7749,
    "longitude": -122.4194
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    }
  ],
  "sameAs": [
    "https://www.linkedin.com/company/bayareatechsolutions",
    "https://www.facebook.com/bayareatechsolutions",
    "https://www.yelp.com/biz/bay-area-tech-solutions-san-francisco"
  ],
  "hasMap": "https://maps.google.com/?cid=1234567890",
  "areaServed": [
    { "@type": "City", "name": "San Francisco" },
    { "@type": "City", "name": "Oakland" },
    { "@type": "City", "name": "San Jose" },
    { "@type": "City", "name": "Berkeley" }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127"
  }
}

How to Add JSON-LD to Your Website

The JSON-LD block goes inside a <script> tag in your HTML. Here’s exactly where to place it:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Your Business Name</title>

  <!-- Other meta tags, CSS, etc. -->

  <!-- JSON-LD Structured Data -->
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "LocalBusiness",
    "name": "Your Business Name",
    "telephone": "+1-415-555-0199"
    // ... rest of your schema
  }
  </script>
</head>
<body>
  <!-- Your page content -->
</body>
</html>

Platform-Specific Instructions

WordPress: Install the “Rank Math” or “Yoast SEO” plugin. Both have structured data settings where you can fill in your business information, and they’ll generate the JSON-LD automatically. For full control, use the “WPCode” plugin to paste custom JSON-LD into your site’s <head>.

Squarespace: Go to Settings → Advanced → Code Injection → Header. Paste your full <script type="application/ld+json"> block there.

Wix: Use the Wix SEO Settings or add custom code via Settings → Custom Code → Head.

Static HTML: Paste the script tag directly into your HTML <head> section.

Astro/Next.js/React: Add the JSON-LD as a script tag in your layout component’s <head> section.

Adding FAQ Schema

FAQPage schema is one of the most powerful structured data types for AI visibility. It explicitly tells AI engines which questions your page answers — mapping directly to how users query AI assistants.

Add this as a separate JSON-LD block on any page that contains FAQ content:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does managed IT support cost?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Managed IT support typically costs $100-$250 per user per month for small businesses, depending on the level of service. This usually includes 24/7 monitoring, help desk support, security updates, and cloud backup management."
      }
    },
    {
      "@type": "Question",
      "name": "How quickly can you respond to IT emergencies?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We provide same-day on-site response for critical issues in the San Francisco Bay Area. Remote support is available within 15 minutes during business hours and within 1 hour outside business hours."
      }
    }
  ]
}

Adding Service Schema

For businesses that offer specific services, add Service schema to connect your service offerings to your business entity:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "serviceType": "Managed IT Support",
  "provider": {
    "@type": "ProfessionalService",
    "name": "Bay Area Tech Solutions",
    "url": "https://bayareatechsolutions.com"
  },
  "areaServed": {
    "@type": "City",
    "name": "San Francisco"
  },
  "description": "24/7 managed IT support including monitoring, help desk, security updates, and cloud backup for small businesses with 10-200 employees.",
  "offers": {
    "@type": "Offer",
    "price": "150.00",
    "priceCurrency": "USD",
    "unitText": "per user per month"
  }
}

Testing Your JSON-LD

Before going live, validate your structured data using these free tools:

Google Rich Results Test (search.google.com/test/rich-results)

  • Paste your page URL or raw JSON-LD code
  • Shows which rich results your page is eligible for
  • Highlights errors and warnings specific to Google’s requirements

Schema.org Validator (validator.schema.org)

  • Validates against the full Schema.org specification
  • Catches issues that Google’s tool might not flag
  • Useful for ensuring your data is valid for all AI engines, not just Google

Google Search Console (search.google.com/search-console)

  • After deploying, check the “Enhancements” section
  • Shows structured data errors across your entire site
  • Monitors ongoing validity as you make changes

Common Mistakes to Avoid

These are the errors we see most often when auditing local business websites:

1. Wrong @type

Using "Organization" instead of "LocalBusiness" or a specific subtype. While Organization is technically valid, it doesn’t trigger local search features. Use the most specific type that fits: ProfessionalService, Restaurant, MedicalBusiness, LegalService, FinancialService, etc.

2. Missing Required Fields

Google requires name, address, and at least one of telephone or url for LocalBusiness schema. Missing any of these triggers validation errors and can cause your structured data to be ignored entirely.

3. Invalid URLs

All URLs in your JSON-LD must be absolute (starting with https://), not relative paths. This is a frequent mistake:

  • Wrong: "image": "/images/logo.png"
  • Right: "image": "https://yourbusiness.com/images/logo.png"

4. Mismatched Information

Your JSON-LD data must match your visible page content. If your structured data says you’re open until 6 PM but your website says 5 PM, Google may penalize or ignore the structured data. Keep everything consistent.

5. Fabricated Ratings

Never include aggregateRating with made-up numbers. Google explicitly penalizes fake review markup. Only include ratings if they come from a legitimate review system on your website.

6. Duplicate or Conflicting Schemas

Having two LocalBusiness schemas on the same page with different addresses or phone numbers confuses search engines. Use one canonical LocalBusiness block per page.

7. Missing Geo Coordinates

Omitting the geo field with latitude and longitude is a missed opportunity. Geographic coordinates are one of the strongest signals for local search relevance. Look up your coordinates on Google Maps (right-click your location → “What’s here?”).

Beyond the Basics: Advanced Tips

Once your core LocalBusiness schema is solid, consider these advanced optimizations:

Multi-location businesses: Create a separate LocalBusiness JSON-LD block for each location, each on its own location-specific page. Don’t try to put multiple locations in one schema block.

Seasonal hours: Use openingHoursSpecification with validFrom and validThrough dates to indicate seasonal or holiday hours.

Multiple service types: Use hasOfferCatalog with an OfferCatalog containing individual Offer items for each service. This gives AI engines a structured menu of what you provide.

Connect to industry schemas: If you’re a healthcare provider, use MedicalBusiness with medicalSpecialty. If you’re a restaurant, use Restaurant with servesCuisine and menu. Industry-specific fields make your entity more precisely defined.

What JSON-LD Looks Like in Practice

Adding structured data to your website is one of the highest-impact, lowest-cost improvements for AI visibility. It takes about 30 minutes to implement, costs nothing, and immediately makes your business machine-readable to every AI engine.

The businesses that appear in AI search results almost universally have structured data on their websites. The businesses that don’t appear almost universally lack it. It’s one of the clearest correlations in AI visibility.

To see how your current structured data (or lack thereof) affects your AI visibility, check your score with a free scan. The scan evaluates 10 real queries against Google AI Overviews and shows you exactly where you stand — and structured data is one of the key factors in your result.

For a deeper look at why businesses disappear from AI search and the full list of factors to fix, read our guide on why your business is invisible to ChatGPT and Gemini. And to understand how this fits into the broader shift from traditional SEO to AI optimization, see AI Search vs Traditional SEO: What Changed in 2026.

Check your AI visibility

Run a free scan to see if Google AI mentions your business.

Free AI Scan