Schema markup for local businesses

Schema markup is structured data that tells search engines and AI tools explicitly what your website content means. Without it, a machine reading your website has to infer whether the text in your header is a business name or a tagline, whether the number in your footer is a phone or a fax, whether the list on your services page is a menu or a product catalog.

With schema, you hand those machines a labeled dataset. For local businesses competing for AI tool recommendations, schema markup is the most direct technical action available. Most local businesses have zero schema on their websites. The ones that do have a structural advantage in AI search citation that will compound over time.

Why local businesses benefit more than most

AI tools are building knowledge graphs of real-world entities. When you ask ChatGPT or Perplexity about a local professional, those tools are not browsing the web fresh. They are drawing from knowledge graphs built from structured data, authoritative citations, and indexed content. Schema markup is the most direct way to insert your entity data into those knowledge graphs.

National brands with large IT teams and content operations have been implementing schema markup for years. Local independent professionals typically have none. The gap is real and, in most markets, still wide open. An independent attorney with proper LocalBusiness, Service, FAQPage, and Person schema on their website is technically superior to the majority of their local competitors from an AI search perspective, regardless of domain authority or link profile.

The other reason local businesses benefit disproportionately from schema: local entity data is less ambiguous when it is structured. A law firm in a small city has a unique name, a specific address, and a specific practice area. Schema markup makes that uniqueness machine-readable in a way that helps AI tools distinguish and confidently recommend your entity from others with similar names or service descriptions.

Start with these before anything else.

LocalBusiness / ProfessionalService

Essential

Where to use it

Your homepage and primary landing page. Establishes the core entity: business name, address, phone, hours, service area.

Required fields

name, url, telephone, address, areaServed

Subtypes and notes

ProfessionalService covers most independent professionals. More specific subtypes: Attorney, Physician, FinancialService, InsuranceAgency, LegalService.

Service

Important

Where to use it

Each service page. Tells Google and AI tools exactly what you offer, who provides it, and where.

Required fields

name, provider, areaServed, description

Subtypes and notes

No specific subtypes required. Use the generic Service type with a detailed description.

FAQPage

High leverage for AI

Where to use it

Any page with Q&A content. The single most direct schema type for AI search citation. Structures your answers for machine extraction.

Required fields

mainEntity (array of Question/Answer pairs)

Subtypes and notes

N/A. Always use FAQPage as the parent type with Question and acceptedAnswer markup inside.

Person

Important for solo practitioners

Where to use it

About page. Establishes the professional person entity, connecting it to the business entity. Important for named professionals who are the primary trust signal.

Required fields

name, jobTitle, url, worksFor

Subtypes and notes

N/A. Use Person with specific professional attributes like hasCredential or memberOf for certifications and associations.

Working JSON-LD templates.

LocalBusiness / ProfessionalService

Add this to your homepage and primary landing pages. Replace placeholder values with your actual business data. Ensure the address format matches your GBP exactly.

{
  "@context": "https://schema.org",
  "@type": "ProfessionalService",
  "name": "Your Business Name",
  "url": "https://yourbusiness.com",
  "telephone": "(555) 555-0100",
  "email": "info@yourbusiness.com",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street, Suite 100",
    "addressLocality": "Your City",
    "addressRegion": "AR",
    "postalCode": "72201",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 34.7465,
    "longitude": -92.2896
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
      "opens": "09:00",
      "closes": "17:00"
    }
  ],
  "areaServed": {
    "@type": "City",
    "name": "Your City"
  },
  "priceRange": "$$"
}

FAQPage

Add this to any page with FAQ content. Include as many Question/Answer pairs as you have real FAQs on the page. Do not add questions in schema that do not appear as visible content on the page.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you offer free consultations?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Initial consultations are free and carry no obligation."
      }
    },
    {
      "@type": "Question",
      "name": "What areas do you serve?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We serve Your City and the surrounding region including [neighboring communities]."
      }
    }
  ]
}

Person (for solo practitioners)

Add this to your about page. The Person schema connects the individual professional entity to the business entity. This matters for AI tools that prioritize named, credentialed professionals in local recommendations.

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Your Name",
  "jobTitle": "Your Professional Title",
  "url": "https://yourbusiness.com/about",
  "email": "you@yourbusiness.com",
  "telephone": "(555) 555-0100",
  "worksFor": {
    "@type": "Organization",
    "name": "Your Business Name",
    "url": "https://yourbusiness.com"
  },
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Your City",
    "addressRegion": "AR",
    "addressCountry": "US"
  }
}

Common mistakes that make schema worthless

Using Organization instead of LocalBusiness

Organization is a generic type. LocalBusiness and its subtypes (ProfessionalService, Attorney, Physician, etc.) are what Google uses for local entity recognition. Using Organization means your schema is technically valid but misses the local signals entirely.

Missing required fields in LocalBusiness

The minimum required fields for LocalBusiness are name, url, and telephone. Omitting these means the schema either fails validation or provides too little data to be useful. Address is technically optional in schema but practically required for local entity recognition.

Adding FAQPage schema for questions that are not on the page

Google's guidelines require that schema markup reflects content that is actually visible on the page. Adding FAQPage schema for questions that exist only in the schema code and not in the visible page content violates guidelines and can trigger manual actions. Every question in your FAQPage schema must appear as visible text on the page.

Inconsistent address format between schema and GBP

If your GBP says '123 Main Street, Suite 100' and your schema says '123 Main St #100,' that inconsistency is a data quality signal Google can read. Use identical formatting across your schema, your GBP, and your website's visible NAP content.

Never testing the implementation

Schema markup errors are common and silent. A missing comma in JSON-LD breaks the entire block. Run every page you add schema to through Google's Rich Results Test before considering it done. A schema block with a syntax error provides exactly zero benefit.

Industry-specific schema notes

Schema.org includes industry-specific subtypes of LocalBusiness and Person that carry additional structured fields relevant to your profession. Using the most specific applicable type gives AI tools and Google more precise entity data.

Medical providers

Use schema type 'Physician' (a subtype of LocalBusiness) for physicians in private practice. Include 'medicalSpecialty' for specific practice areas, 'availableService' for procedures, and 'memberOf' for hospital affiliations. The MedicalOrganization type is available for larger practices.

Attorneys

Use schema type 'Attorney' (a subtype of LocalBusiness). Include 'knowsAbout' for practice areas and 'memberOf' for bar associations. The Person schema for the attorney individually should reference their LegalService business entity.

Financial advisors

Use 'FinancialService' as the business schema type. Include 'serviceType' for specific offerings (retirement planning, investment management). For registered advisors, 'hasCredential' can reference CFP, CFA, or other credentials.

Insurance agents

Use 'InsuranceAgency' as the specific schema type. Include 'areaServed' for your geographic coverage and list individual insurance product types in 'hasOfferCatalog' or 'makesOffer' fields.

How to implement and test

In Next.js (like this website), schema is added as a script tag with the type "application/ld+json" and the JSON content passed via dangerouslySetInnerHTML. This renders the schema in the page HTML where Google and AI tools can find it. Place it before the main page content in the component.

In WordPress, the Yoast SEO and RankMath plugins generate LocalBusiness schema automatically from your site settings. However, they do not generate FAQPage schema from arbitrary FAQ sections unless you use their specific FAQ block types. For more control, add a Custom HTML block with your JSON-LD directly. Both approaches work. Manual JSON-LD gives you more precision.

After implementation, test with Google's Rich Results Test. Input the URL of any page where you added schema. The tool shows you which schema types were detected, what data was extracted, and any validation errors. Fix errors before moving on. A schema block with errors is not just useless; it can trigger crawl warnings that affect how Google treats the page.

For ongoing monitoring, Google Search Console shows schema errors in the Enhancements section once your pages have been crawled. Set up a quarterly review of Search Console's schema reports to catch any new errors introduced by site changes.

Questions about schema markup.

Does schema markup directly improve my Google ranking?

Schema markup does not directly add ranking points in Google's algorithm the way links or content quality do. What it does is make your content and entity data more legible to Google's crawlers and AI systems. This legibility has practical ranking effects: better entity recognition, eligibility for rich results that increase CTR, and improved AI search citation. Think of schema as removing ambiguity rather than adding authority.

What is JSON-LD and how do I add it to my website?

JSON-LD (JavaScript Object Notation for Linked Data) is the format Google recommends for schema markup. It is a block of structured JSON code added inside a script tag in your page's head or body HTML. In Next.js, this is typically added as a script tag with type='application/ld+json' and dangerouslySetInnerHTML containing your JSON schema object. In WordPress, plugins like Yoast SEO or RankMath handle some schema automatically, but manual JSON-LD blocks give you more control.

What is the most important schema type for a local business?

LocalBusiness (or its relevant subtype) is the most important schema type for establishing your entity with Google and AI tools. It confirms your name, address, phone, hours, and service area in machine-readable format. After LocalBusiness, FAQPage is the highest-leverage schema type specifically for AI search visibility, because it structures your answers in the exact format AI tools prefer for citation.

How do I test if my schema markup is working?

Use Google's Rich Results Test (search.google.com/test/rich-results) to test any URL for schema markup. It shows which schema types were found, what data was extracted, and any errors or warnings. For a general schema validity check, use the Schema.org Markup Validator (validator.schema.org). Test your key pages, your homepage, your primary service page, and any pages with FAQ content, after adding or changing schema.

We implement and validate schema for every client.

A free audit identifies what schema is currently on your site, what is missing, and what is implemented incorrectly. One client per market.

Request a free audit