Google reads your homepage. It can't read your business.
Open your website and you'll see your name, your hours, your phone number, your address in San Diego or Vista or Oceanside. You see a business. Google sees a wall of text and has to guess which line is the phone number and which line is just a number.
Schema markup is how you stop making Google guess. It's a small block of code that sits in your page and labels everything: this is the business name, this is the address, these are the hours, this is the 4.8-star rating. Google trusts labeled data far more than text it has to interpret.
When you skip it, you leave money on the table. The plumber in San Marcos with schema gets the star ratings and hours shown right in search results. The one without it gets a plain blue link. Same service, same town — one of them looks legit at a glance and one doesn't.
What schema actually is (and the copy-paste block you need)
Schema markup — also called structured data or JSON-LD — is a vocabulary from schema.org that Google, Bing, and Apple all agreed to read. For a local business you only need one type to start: LocalBusiness. You drop a script into the <head> of your site and you're done.
Here's a real, working block. Swap in your own details — name, street, city, phone, hours, lat/long — and paste it before the closing </head> tag on every page. Coordinates come straight from Google Maps: right-click your pin, click the numbers to copy.
That single block can produce the hours, the click-to-call, and the map pin you see on the better-looking search results. No plugin subscription, no monthly fee, no agency retainer. It's one file edit.
- "@type": "LocalBusiness" — or get specific: "Plumber", "HVACBusiness", "AutoRepair", "BeautySalon"
- "name", "image", and "url" — your business name, a logo URL, your homepage
- "telephone": "+17605551234" — full international format, the way Google wants it
- "address" — streetAddress, addressLocality (San Diego), addressRegion (CA), postalCode
- "geo" — latitude and longitude pulled from your Google Maps pin
- "openingHoursSpecification" — days and times, so hours show in results
- "priceRange": "$$" and "sameAs" — link your Facebook, Instagram, and Yelp profiles
The four schema types that actually move the needle
You don't need the 800 types schema.org publishes. For a service business in North County, four cover almost everything that shows up as a rich result. Add them in order — LocalBusiness first, the rest as you have the content to justify them.
The rule: only mark up things that are genuinely on the page and genuinely true. Schema for a review you never received is the fastest way to get a manual penalty. Mark up what's real and you'll start seeing star ratings, FAQs, and breadcrumbs in your listings within a few weeks of the next crawl.
- LocalBusiness — name, address, phone, hours, geo. The foundation. Do this first.
- AggregateRating + Review — your real Yelp/Google star average. Gets you the gold stars in results.
- FAQPage — mark up a real FAQ section and the questions can show directly under your listing.
- Service — list what you do (drain cleaning, AC repair, deck staining) so each service is machine-readable.
- BreadcrumbList — shows your site structure in the result instead of a raw URL.
- Organization — your logo and social links, so the right logo shows in the knowledge panel.
What to cut — the schema mistakes that get you penalized
More schema is not better schema. Half the local sites I audit in Carlsbad and Oceanside have either zero structured data or a bloated mess that Google ignores or punishes. The bloat usually comes from a plugin someone installed in 2021 and forgot.
Test everything in Google's Rich Results Test before you trust it. If it throws errors, Google isn't reading it — you've done the work for nothing. Paste your URL, read the warnings, fix them. It takes five minutes and saves you from the next list.
- Fake or self-created reviews — marking up ratings you didn't earn is a manual-action magnet.
- Schema for content that isn't on the page — Google calls this 'invisible' and ignores or penalizes it.
- Five overlapping schema plugins fighting each other — pick one method, JSON-LD, and delete the rest.
- Microdata and RDFa tangled into your HTML — Google prefers clean JSON-LD in the head. Use that.
- Generic "@type": "LocalBusiness" when a specific type exists — use "Electrician" or "Roofer" if it fits.
- Hours and phone in schema that don't match your Google Business Profile — mismatches kill trust signals.
Schema is one leg. Local SEO needs all three.
Schema markup tells Google what your site is about. But ranking for 'electrician Escondido' or 'detailing Carlsbad' takes two more things working alongside it: a dialed-in Google Business Profile and consistent citations across the web.
Your Google Business Profile is free and it's the single biggest local ranking factor. Claim it, pick the right primary category, add real photos, post once a week, answer every review. The schema on your site and the data on your profile should match exactly — same name, same phone, same address, character for character.
Citations are your business listed on Yelp, Bing Places, Apple Maps, Nextdoor, the chamber of commerce. Each one with identical NAP — name, address, phone — is a vote of consistency. Pair that with pages built on the '[service] + [city]' pattern (a 'AC Repair in San Marcos' page, a 'AC Repair in Vista' page) and each page carries its own LocalBusiness and Service schema. That's the full stack.
- Google Business Profile — claimed, correct primary category, weekly posts, every review answered
- Citations — Yelp, Bing, Apple Maps, Nextdoor, chamber — with identical NAP everywhere
- On-page schema — LocalBusiness + Service on every '[service] + [city]' page
- NAP consistency — your name, address, phone match across site, profile, and every directory
- Real reviews — ask happy customers; the AggregateRating schema reflects what's actually there
What this costs — agency rates vs. doing it right once
An SEO agency will fold 'structured data implementation' into a $1,500–$3,000/month retainer and make it sound like rocket science. A freelancer on a marketplace will charge $150–$400 to paste a block they generated from a free tool in ten minutes. The work itself is genuinely small — the markup is the cheap part.
The catch is it only works if the rest of the site is built right: fast pages, clean HTML, mobile-first, the schema matching your real Google Business Profile. Bolting good schema onto a slow, bloated template is lipstick on a 6-second load time.
Circuit Coders builds the whole thing — custom site on Next.js and Vercel, LocalBusiness and Service schema baked into every page, your real hours and reviews wired in — for $499 flat with a 48-hour turnaround. One round of revisions, free mockup before you pay a dollar. If you just need schema added to an existing site, that's a $200 add-on, not a monthly tax.
Want to know if your schema is even working?
Most local businesses in San Diego, Bonsall, and Pala have no idea whether their site has structured data at all. The plumber thinks his web guy 'handled SEO.' He didn't — there's no schema, the hours are wrong, and the Rich Results Test throws four errors.
Send me your URL and I'll run it through Google's tools and tell you exactly what's there, what's broken, and what's missing — no charge, no pitch deck, no monthly contract dangled at the end. You get a straight answer you can act on today.
If you want it fixed, the math is simple: $200 to add schema to your current site, or $499 flat for a fast custom build with the markup, the local pages, and the Google Business Profile setup done right from the start. 48-hour turnaround, free mockup first, one round of revisions. You see it before you pay.