Schema.org Markup Every Small Business Needs

April 9, 2026 · OnePoint Solutions · schema, Schema.org, JSON-LD, AEO, answer engine optimization, SEO, small business, structured data

If you’ve ever wondered why some small business sites get rich snippets in Google — those star ratings, prices, FAQ dropdowns, and business cards that appear directly in the search results — the answer is almost always schema markup. The same markup is now the difference between getting cited by ChatGPT and being invisible to it.

Schema doesn’t change how your site looks to humans. It changes how it looks to machines. And in 2026, machines are increasingly the ones deciding what shows up in search and AI answers.

Here’s the practical version: which schema types every small business website should have, what each one does, and how to write them correctly.

What Schema Actually Is

Schema.org is a shared vocabulary maintained by Google, Microsoft, Yahoo, and Yandex. It defines hundreds of types — LocalBusiness, Recipe, Movie, Event, Product, dozens more — and the properties each type can have.

You add it to your HTML as JSON-LD: a <script type="application/ld+json"> block, usually in the <head>. Search engines and AI assistants read the JSON, extract the facts, and use them to answer questions or render rich results.

The format is simple once you’ve seen it. Here’s a minimal example:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Maple Electric Ltd.",
  "telephone": "+1-604-555-0123"
}
</script>

That’s it. A type, some properties. Now let’s get practical about what every small business should actually publish.

1. LocalBusiness — The Foundation

This is the schema that tells the world what your business is, where it is, and how to reach you. Every small business site needs it on the homepage.

The LocalBusiness type has many subtypes — use the most specific one available. If you’re a dentist, use Dentist. A plumber? Plumber. A restaurant? Restaurant. A category-specific subtype is more useful to AI than the generic LocalBusiness.

Here’s a complete example:

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Maple Plumbing",
  "image": "https://mapleplumbing.ca/logo.png",
  "@id": "https://mapleplumbing.ca/#business",
  "url": "https://mapleplumbing.ca",
  "telephone": "+1-604-555-0123",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1234 Main Street",
    "addressLocality": "Vancouver",
    "addressRegion": "BC",
    "postalCode": "V5T 1A1",
    "addressCountry": "CA"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 49.2827,
    "longitude": -123.1207
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "18:00"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/mapleplumbing",
    "https://www.instagram.com/mapleplumbing",
    "https://maps.google.com/?cid=12345678901234567890"
  ]
}

The sameAs array is critical. It links your business identity to your social profiles and Google Business Profile, which lets AI assistants confirm you’re a single, real entity rather than a hallucination.

2. Service — One Per Service Page

If you offer plumbing, HVAC, and electrical, each service should have its own page, and each page should have its own Service schema block.

Why? AI matches user queries to specific services, not to homepages. Someone searching “emergency plumber” gets matched to your plumbing service page, not your generic about page.

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Emergency Plumbing Service",
  "provider": {
    "@type": "Plumber",
    "name": "Maple Plumbing",
    "@id": "https://mapleplumbing.ca/#business"
  },
  "areaServed": [
    "Vancouver",
    "Burnaby",
    "Richmond"
  ],
  "serviceType": "Emergency Plumbing",
  "description": "24/7 emergency plumbing service for burst pipes, leaks, blocked drains, and water heater failures."
}

Note the @id reference back to the main business — this links the service to the entity, which AI uses to attribute the service to your business specifically.

3. Offer — Pricing in Machine-Readable Form

If you publish prices anywhere on your site, mark them up with Offer schema. This is one of the most underused schema types and one of the most impactful.

AI assistants strongly prefer to cite businesses that publish concrete pricing. “Starting at $499” in body text is ambiguous. The same fact in Offer schema is unambiguous.

You can either nest Offer inside Service or publish it standalone:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Furnace Installation",
  "provider": {
    "@type": "HVACBusiness",
    "name": "Maple HVAC"
  },
  "offers": {
    "@type": "Offer",
    "price": "3499",
    "priceCurrency": "CAD",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-01-01",
    "priceSpecification": {
      "@type": "PriceSpecification",
      "minPrice": "3499",
      "maxPrice": "5499",
      "priceCurrency": "CAD"
    }
  }
}

If your pricing varies, use priceSpecification with minPrice and maxPrice. If you have a flat fee, use a single price value. Either way, get the dollar figure into machine-readable form.

4. FAQPage — The Highest-Citation Schema Type

If you only add one schema type beyond LocalBusiness, make it FAQPage. AI assistants pull citations from FAQ schema more often than from any other content type.

The format is structured but easy to write:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does an emergency plumber cost?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Our emergency plumbing service starts at $185 for the first hour and $95 per hour after. We come out 24/7 across the Greater Vancouver Area."
      }
    },
    {
      "@type": "Question",
      "name": "Do you fix water heaters?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. We repair and replace gas, electric, and tankless water heaters. Replacements start at $1,800 for standard 40-gallon gas units, including removal of the old unit."
      }
    }
  ]
}

Two rules for great FAQ schema:

  1. Question phrasing matters. Write questions the way real customers would type them into ChatGPT. “How much does X cost?” beats “What are your prices?”
  2. Answer the question in sentence one. AI often quotes only the first sentence. Save context for sentence two.

Put FAQ blocks on service pages, not just a global FAQ page. Per-service FAQs match per-service queries.

5. Review and AggregateRating — Credibility

If you have real Google or Facebook reviews, mark up the aggregate rating in your LocalBusiness schema. This produces the star rating you see in search results and is heavily used by AI assistants to gauge credibility.

{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "Maple Bistro",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "247"
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Jane S."
      },
      "datePublished": "2026-03-15",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5"
      },
      "reviewBody": "Best brunch in the city. The eggs benedict was incredible."
    }
  ]
}

Critical: never fake reviews. Pull aggregate values from your real Google Business Profile or Yelp. Google penalizes fake or self-generated review schema and AI assistants are getting better at detecting inconsistency.

6. BreadcrumbList — Site Structure Signals

BreadcrumbList tells search engines and AI how a page sits in your site hierarchy. It’s small, easy to add, and gives you breadcrumb rich results in search.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://mapleplumbing.ca/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Services",
      "item": "https://mapleplumbing.ca/services"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Emergency Plumbing",
      "item": "https://mapleplumbing.ca/services/emergency"
    }
  ]
}

Add to every page that isn’t the homepage. It’s the lowest-effort schema type with the highest hit rate of producing visible improvements.

How to Validate Your Schema

Two free tools you should use every time you add schema:

Google’s Rich Results Test. Paste your URL or code. Confirms whether your schema is valid and which rich results it qualifies for. Available at search.google.com/test/rich-results.

Schema.org Validator. Catches schema errors that Google’s tool sometimes misses. Available at validator.schema.org.

Run both. They take 30 seconds each. They will save you from publishing schema that has typos and silently doesn’t work.

Common Mistakes

Multiple LocalBusiness blocks on one page. Use one. Add a unique @id so other schema can reference it.

Wrong subtype. A dentist marked as MedicalBusiness instead of Dentist. Use the most specific subtype.

Missing @id references. When Service references its provider, use @id to link them: it tells AI “this service belongs to this business.”

Pricing without currency. "price": "499" without "priceCurrency": "CAD" is ambiguous. Always include currency.

Schema that doesn’t match the page content. If your schema says you’re open Sundays but your page says you’re closed, AI will lose trust in your data. Keep them aligned.

Forgetting to update. Schema is set-and-forget unless your business changes. When prices change or you add a service, update the schema. Stale schema produces stale AI answers.

Where Schema Fits Into AEO

Schema is the foundation of Answer Engine Optimization. Without it, AI assistants have to guess at facts about your business by reading prose. With it, they have unambiguous structured data to extract directly.

Combined with a good llms.txt file, explicit AI bot allows in robots.txt, and FAQ-format content, schema turns a generic small business site into one that AI assistants can confidently cite.

Every website OnePoint Solutions builds ships with full schema markup by default — LocalBusiness, Service, Offer, FAQPage, Review, and BreadcrumbList, all properly cross-referenced. It’s not an upsell; it’s part of how a website should be built in 2026.

If you’d like help adding schema to an existing site, or want a complete AEO Audit of where your structured data stands today, reach out. We’ll take a look.