Schema markup is the highest-leverage SEO fix a small business can ship in an afternoon. We've run hundreds of audits and we still find sites with zero structured data on the homepage. Their competitor, ranking three spots above them, has a clean LocalBusiness block, three FAQs, and a star rating that shows up right in the search results. That's not luck. That's twenty minutes of work the other shop did and you didn't.
This post is the version we wish someone had handed us in 2018. What schema is, why it matters more in 2026 than it ever has, the three types most small businesses actually need, and paste-ready JSON-LD blocks for each. Swap your details in. Validate. Ship. You can be done before lunch.
What schema markup actually is
Schema markup is a small block of code you drop into your website that tells search engines what your page is about, in a language they can read directly. The format Google prefers is JSON-LD - a JavaScript-style snippet that lives inside a <script> tag in your HTML. It does not change how your page looks to a human visitor. It only changes how Google, Bing, and the AI search systems understand it.
Without schema, a search engine reads your homepage and has to guess. Is "Mike's" a coffee shop, a plumber, or someone's name? Is "$129" the price of a service or a phone number? Is that paragraph an FAQ or a product description? With schema, you tell it explicitly. Name. Address. Phone. Hours. Price. Service area.
The schema vocabulary lives at schema.org and is co-maintained by Google, Microsoft, Yandex, and others. Google publishes a separate document - the Search Central structured data guidelines - listing which schema types qualify for which rich result features. Not every schema type produces a visible upgrade in search results. The three we cover below are the ones that almost always do for small businesses.
Why it matters more in 2026
Schema went from "nice to have" to "you're losing customers without it" for a few reasons that compound on each other.
The first is rich results in Google. When your page has the right schema, Google can show extras directly in the search listing: star ratings under your title, FAQ accordions that expand inline, a price-and-availability block on a product, your phone and hours next to your business name. These take up more real estate and push competitors down the page. Click-through rates jump 20-30% in our own audits when a client adds them.
Then there's AI search. ChatGPT Search, Google AI Overview, Perplexity, and Gemini all rely on structured data when deciding which sources to cite. When a customer asks ChatGPT "what's the best physical therapy clinic in Boulder for cyclists," the systems with clean LocalBusiness schema and rich FAQ data get pulled into the answer. Sites with no schema get skipped. We watch this pattern shift week-to-week in our AI Visibility Tracker.
Voice search is the third reason and the one nobody talks about. "Hey Google, what time does Mike's Bike Shop close?" That answer comes directly from your openingHours property. No schema, no answer - or worse, a wrong answer pulled from somewhere else on the internet that nobody at your business controls.
Google still hosts a free Rich Results Test for a reason. Schema is one of the few SEO signals you fully control. The page either has it or doesn't. The validator either passes it or doesn't. No mystery.
The three schema types most small businesses need
Skip the encyclopedia. There are hundreds of types in the schema.org vocabulary. Most small businesses need exactly three:
- LocalBusiness - on your homepage and contact page. Tells Google who you are, where, when you're open, how to reach you.
- FAQPage - on your homepage, service pages, and any post that answers customer questions. Eligible for the FAQ rich result.
- Product - on every product page if you sell anything. Drives the price, availability, and review-stars rich result.
Below is paste-ready JSON-LD for each one. Replace the placeholder values with your real information. Drop the entire <script> block into the <head> section of your page (or anywhere in the body - JSON-LD works either way). Then validate.
LocalBusiness schema (paste-ready)
This is the single most important block for any business with a physical location or a defined service area. If you only ship one schema this week, ship this.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Your Business Name",
"image": "https://yourdomain.com/storefront.jpg",
"@id": "https://yourdomain.com/#localbusiness",
"url": "https://yourdomain.com",
"telephone": "+1-555-123-4567",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Boulder",
"addressRegion": "CO",
"postalCode": "80302",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.014984,
"longitude": -105.270546
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00",
"closes": "16:00"
}
],
"sameAs": [
"https://www.facebook.com/yourbusiness",
"https://www.instagram.com/yourbusiness",
"https://www.linkedin.com/company/yourbusiness",
"https://g.page/yourbusiness"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "127"
}
}
</script>
A few notes on the properties that trip people up:
priceRangeaccepts$,$$,$$$, or$$$$- or a literal range like "$50-$200". Pick whichever feels honest.sameAsis the property that links your website to your social profiles and Google Business Profile (use theg.pageshort link). This is one of the most underused signals for entity resolution. Fill it out.aggregateRatingshould reflect the reviews you actually display on your site. Don't fabricate a rating to chase stars - Google will catch it and the manual action is brutal.- If your industry has a more specific type, use it instead of
LocalBusiness. Common ones:Dentist,Restaurant,MedicalBusiness,LegalService,HomeAndConstructionBusiness,Plumber,AutoRepair. The vocabulary list is at schema.org/LocalBusiness.
FAQPage schema (paste-ready)
FAQPage schema turns the question-and-answer block on your page into a Google rich result that expands inline beneath your search listing. Two important things to know in 2026: Google narrowed FAQ rich-result eligibility in mid-2023 to government and authoritative health sites for the visible accordion, but the schema itself still helps with AI search citation, voice search, and entity understanding for everyone else. So ship it anyway. The cost is one block of code. The upside is real.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a typical session cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Initial consultations are $150 and run 60 minutes. Follow-up sessions are $120 and run 45 minutes. We accept most major insurance plans and offer cash-pay packages of 4 sessions for $440."
}
},
{
"@type": "Question",
"name": "What areas do you serve?",
"acceptedAnswer": {
"@type": "Answer",
"text": "We serve Boulder, Louisville, Lafayette, Erie, and Longmont in person at our Pearl Street office. Telehealth appointments are available to anyone licensed in Colorado."
}
},
{
"@type": "Question",
"name": "Do I need a doctor's referral to book?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Colorado is a direct-access state, which means you can book directly with us without a referral. If your insurance requires one for reimbursement we'll help you get it after your first session."
}
}
]
}
</script>
A few rules that keep your FAQ block clean:
- The questions and answers in the schema must match what's actually visible on the page. Hidden FAQs are a violation and get filtered out.
- Write answers customers would actually want. The pricing question is the #1 thing people search for. Answer it directly. Don't hide behind "contact us for a quote."
- Three to five questions per page is the sweet spot. Ten is overkill. One isn't worth the trouble.
- Use sentence case in the question text, the way a person would actually type it into search.
If you publish a related post, link it: see our breakdown of Local schema for service-area businesses for the matching Google Business Profile setup.
Product schema (paste-ready)
If you sell a product online, every product page should ship with Product schema. This is what powers the price, availability, and star-rating snippets in Google search results, and it's what most AI shopping assistants read when deciding which products to recommend.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Heritage Stone-Ground Whole Wheat Flour",
"image": [
"https://yourdomain.com/products/whole-wheat-flour-1x1.jpg",
"https://yourdomain.com/products/whole-wheat-flour-4x3.jpg",
"https://yourdomain.com/products/whole-wheat-flour-16x9.jpg"
],
"description": "Cold stone-ground whole wheat flour milled in small batches from heritage Turkey Red wheat. 5 lb resealable bag. Mills to a fine, even texture for everyday baking.",
"sku": "FLOUR-WW-5LB",
"brand": {
"@type": "Brand",
"name": "Your Brand Name"
},
"offers": {
"@type": "Offer",
"url": "https://yourdomain.com/products/whole-wheat-flour",
"priceCurrency": "USD",
"price": "14.99",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "84"
}
}
</script>
The properties that matter most:
imageshould be three URLs at different aspect ratios (1:1, 4:3, 16:9). Google uses whichever one fits the layout slot it has open.availabilityis a URL, not a string. Valid values includehttps://schema.org/InStock,https://schema.org/OutOfStock,https://schema.org/PreOrder, andhttps://schema.org/BackOrder.priceValidUntilis required if you ever discount. Set it to the end of the current year if your pricing is stable.aggregateRatingonly shows up if you have actual reviews on the page. If you don't, omit the block entirely. Fake ratings get manual actions.
For a multi-variant product (sizes, colors), wrap the offers in a ProductGroup instead. We'll cover that in .
The path of least resistance: ClearGrade's Schema Generator
Hand-coding three blocks for one page is fine. Hand-coding three blocks for forty pages is a Saturday you'll never get back. We built a Schema Generator inside the ClearGrade portal that builds custom JSON-LD for your business in about thirty seconds.
You enter your business name, address, phone, hours, social URLs, and a couple of FAQs. The generator produces three validated, paste-ready blocks - LocalBusiness, FAQPage, and (if you sell products) Product. You copy them. Drop them in. Done.
On the platform tier we go a step further: we ship the embed code into your site for you and re-measure your AI Visibility, Map Pack, and Google search rankings every week to confirm the schema actually moved the needle. That's the wedge - we don't hand you a 100-page PDF with "implement structured data" buried on page 47. We ship the schema, then prove the lift.
Validate before you ship: a checklist
Five steps. Run through them every single time. Catching a typo in the validator takes ten seconds. Catching it after Google has spent four weeks ignoring your block takes a month.
- Paste the page URL into Google's Rich Results Test. This tells you which rich result types your page is eligible for and flags any errors or warnings. Green check marks across the board is the bar.
- Run the same URL through the Schema.org Validator. This is stricter than Google's tool and catches vocabulary issues Google's tool ignores. Treat warnings as worth fixing.
- View your live page source and confirm the JSON-LD is actually there. Sounds dumb. We catch this in audits constantly - the developer added the script to a staging template, not production.
- Verify every value matches what's visible on the page. Hidden FAQs, fake ratings, and prices that don't appear on the page are the most common reasons Google filters your schema out of the rich result.
- Re-check after one week in Google Search Console. Open the Enhancements report. Each schema type gets its own card. Errors here are the truth - Rich Results Test is a preview, Search Console is what Google actually saw when it crawled.
Ship the LocalBusiness block first. It has the biggest immediate payoff, your competitors most often skip it, and AI search systems use it to decide whether you're a real business worth citing. Then add FAQPage to your homepage and your top three service pages. Add Product schema if you sell anything. By Friday afternoon you'll have rich results eligibility on every page that matters.
ClearGrade's Schema Generator at https://cleargradeai.com builds custom JSON-LD for your business in 30 seconds + we ship the embed code on the platform tier.