Field Notes
Structured Data in Plain English — and Why Machines Care
Your website speaks human. It says things like "family-owned since 2009" and "serving the East Valley" in a nice font next to a photo of your crew. A person reads that and understands instantly. A machine reads it and has to guess: is "East Valley" a place you serve or the name of the business? Is that string of digits a phone number or a license number? Is this page about a dentist, or an article that mentions one?
Search engines and AI assistants are very good guessers, but guessing is exactly what you don't want when a machine is deciding whether to show your business to someone standing in their kitchen with a burst pipe. Structured data — usually called schema markup — is the translation layer. It's a way of restating the facts on your page in a format machines read natively, so nothing important is left to inference.
This post explains what it actually is, walks through a real example field by field, and covers the handful of rules and mistakes that matter — including the ones where being honest is more useful than being clever.
What JSON-LD actually is (a label maker, not code)
The word "code" scares people off, so let's kill that first. Schema markup is not a program. Nothing runs. Nothing can crash your site. It's closer to the label maker in your office: you're printing tidy, standardized labels — "NAME," "ADDRESS," "HOURS" — and sticking them on facts that already exist on your page.
The standard format is called JSON-LD (JSON for Linked Data). It's a block of labeled facts, wrapped in a <script> tag, sitting invisibly in your page's HTML — usually in the <head> section, though Google accepts it anywhere on the page. Visitors never see it. Browsers ignore it. Crawlers read it eagerly, because it saves them from having to reverse-engineer your web designer's layout choices.
The vocabulary of allowed labels comes from Schema.org, a shared dictionary maintained cooperatively by Google, Microsoft, and others since 2011. When you use the label openingHours, every major search engine — and every AI system that ingests web pages — knows precisely what you mean. That shared dictionary is the whole point.
A LocalBusiness example, field by field
Here's what a complete, honest block looks like for a fictional Mesa plumbing company. Read it once as a whole — notice it's just labeled facts — then walk through what each field tells a machine.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Redline Plumbing Co.",
"url": "https://redlineplumbingaz.com",
"telephone": "+1-480-555-0142",
"address": {
"@type": "PostalAddress",
"streetAddress": "2214 E Main St, Suite 4",
"addressLocality": "Mesa",
"addressRegion": "AZ",
"postalCode": "85213",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 33.4152,
"longitude": -111.8315
},
"openingHours": "Mo-Fr 07:00-18:00, Sa 08:00-14:00",
"areaServed": ["Mesa", "Gilbert", "Chandler", "Queen Creek"],
"sameAs": [
"https://www.facebook.com/redlineplumbingaz",
"https://www.yelp.com/biz/redline-plumbing-mesa"
]
}
</script>
@type: "Plumber"— the single most important line. It tells the machine what kind of thing this page describes. "Plumber" is a subtype of LocalBusiness, so you get everything LocalBusiness implies plus the specificity. More on choosing this below.name— your business name, exactly as it appears everywhere else: your storefront, your Google Business Profile, your invoices. "Exactly" is doing real work in that sentence; variations make machines treat you as possibly-two-businesses.address— broken into labeled parts (street, city, state, ZIP) instead of one blob of text, so nothing has to be parsed or guessed. A machine now knows with certainty which "Main St" in which state.geo— latitude and longitude. Addresses are for humans; coordinates are for machines computing "near me." This removes any ambiguity about where you physically are.openingHours— your hours in a compact standard notation (Mo-Fr, 24-hour times). This is the field a machine consults when someone asks "is there a plumber open right now?" — which is also why letting it go stale is worse than omitting it.areaServed— the cities or regions you actually work in. For service businesses this often matters more than the address: it's your claim to relevance in towns where you have no building.sameAs— links to your other official profiles. This one line quietly does something powerful: it tells machines that the Redline Plumbing on Facebook, the one on Yelp, and the one on this website are the same entity, letting them merge everything they know from all three into one confident picture of you.
Which schema types matter for a local business
LocalBusiness — and its more specific children
LocalBusiness is the workhorse, but Schema.org defines dozens of subtypes: Dentist, Plumber, Attorney, Electrician, Restaurant, HVACBusiness, AutoRepair, and many more. Always use the most specific type that truthfully fits. "Dentist" tells a machine strictly more than "LocalBusiness" does, at zero extra cost. If no subtype fits, plain LocalBusiness is fine — that's better than forcing a wrong one.
Service
Beyond describing the business, you can describe what it does: a Service type for "water heater installation" or "emergency root canal," each with its own name, description, and area served. This is how a machine learns you don't just exist — you do the specific thing someone is asking about. It's most useful when each major service has its own page, with the markup translating that page.
FAQPage — with an honest caveat
FAQPage markup labels question-and-answer content. For years it earned expandable Q&A snippets in Google results, and it became the most over-recommended markup in local SEO. Then in August 2023, Google announced it would show FAQ rich results only for well-known, authoritative government and health websites. For a local business, FAQ markup no longer buys a visual result in Google. It's not harmful — well-structured Q&A remains machine-readable content that other systems can use — but anyone selling it to you today as a Google rich-result tactic is working from a stale playbook. Write genuinely useful FAQs for humans; treat the markup as a minor bonus, not a strategy.
Review markup — the rule people don't want to hear
Here's the honest part. Google's guidelines prohibit what they call "self-serving" review markup: you cannot mark up reviews of your own business on your own website and expect star ratings in search results. Reviews of you, hosted by you, marked up by you — Google explicitly ignores that, and has since 2019. The stars you see in search results for local businesses generally come from third-party platforms marking up reviews collected on their sites. What you can legitimately do: mark up reviews you publish of other things (a product you sell, for instance), and — separately from markup — display real testimonials for your human visitors, which is worth doing anyway. If a vendor promises you review stars via markup on your own site, that's a claim worth walking away from.
Why machines care — twice over
Structured data used to be pitched purely as a Google feature: mark things up, maybe earn a richer-looking search listing. That's still real — rich results for events, products, breadcrumbs, and business details all draw on it. But there's now a second reader, and it may matter more over time.
AI assistants recommending local businesses work from an internal picture of entities: this business, at this location, offering these services, connected to these profiles. That picture is assembled from whatever the machine can read confidently across the web. A page with clean structured data contributes unambiguous facts to that picture. A page without it contributes guesses. When an assistant is deciding whether it knows enough about you to say your name out loud — your hours, your service area, whether you're the same business as that Yelp profile — the pages that stated those facts in machine language are the ones that leave nothing to chance.
Same markup, two audiences: Google's rich results today, and the entity understanding that answer engines retrieve from. You write it once.
Checking your work
Two free validators, two different questions:
- Google's Rich Results Test answers: "Can this markup earn Google rich results, and are any required fields missing?" Paste your URL or the code itself.
- The Schema.org validator answers the broader question: "Is this valid structured data at all?" — including types Google doesn't reward with visual results but other machines still read.
Run both. It takes two minutes, and malformed markup — a stray comma, a misspelled field — is silently ignored rather than flagged anywhere you'd notice. Validation is the only way to know your labels are actually being read.
The five most common mistakes
- The wrong subtype. A law firm marked up as "Organization," a med spa as "Hospital," a plumber as "Store." Wrong labels are worse than vague ones — you're confidently telling machines something false about what you are.
- Markup that contradicts your Google Business Profile. A different phone number, an old suite number, "Company LLC" here and "Company" there. Machines resolve conflicting facts by trusting you less on all of them. Your name, address, and phone should match everywhere, character for character.
- Marking up things that aren't on the page. Services you don't visibly list, an aggregate rating with no reviews shown, hours that appear nowhere a human can see. This violates the fundamental rule — markup translates the page — and it's the category of behavior Google's guidelines treat as spam.
- Stale hours. You changed your Saturday hours in the Business Profile a year ago; the markup still says the old ones. Now the machine has two answers to "are they open?" and no reason to prefer the right one. Schema is set-and-forget only if your facts never change; put it on the same checklist as your profile updates.
- Copy-pasted markup from another business. It happens constantly: a template or a hurried developer ships schema with another company's coordinates, another city's ZIP, someone else's Yelp URL in
sameAs. Because markup is invisible, nobody notices — except every machine that reads it. If you inherited your site, this is worth checking this week.
Do this today
- ☐ View your homepage's source (right-click → "View Page Source") and search for
ld+json— find out whether you have markup at all - ☐ Run your homepage through the Rich Results Test and the Schema.org validator; save the results
- ☐ If markup exists, read it line by line: is every fact yours, current, and visible on the page?
- ☐ Check your
@type— is it the most specific subtype that truthfully fits? - ☐ Compare name, address, and phone in the markup against your Google Business Profile, character for character
- ☐ Confirm
openingHoursmatches your real, current hours — or remove the field until it can - ☐ Add
sameAslinks to your real profiles (Google, Facebook, Yelp, industry platforms) - ☐ If you have review stars promised or implemented on your own site's reviews, ask your vendor to point to the Google guideline that permits it — and drop it when they can't
- ☐ Add "verify schema" to whatever checklist you use when hours, address, or services change
None of this changes what your business is. It changes how legibly your business exists to the machines that increasingly stand between you and your next customer. The facts are already on your page, in human language. Structured data just says them again, clearly, in the other language your readers now speak.
Want to know where your business actually stands?
Apply for a free visibility audit: your rankings, your AI-assistant mentions, and where competitors are ahead. Free, and yours to keep either way.