The plumber who copy-pasted the wrong template
A home services contractor asked his developer to 'add the schema markup thing' after reading that it helped with search visibility. What landed on the site was a LocalBusiness schema block copied from a restaurant template, complete with a 'servesCuisine' field and a menu URL. It validated without errors because the JSON was syntactically fine — it just described the wrong kind of business. This is the most common failure mode in structured data work: syntactically valid JSON-LD that's semantically nonsense, because the person adding it didn't understand what each property actually claims.
What JSON-LD is and where it lives
JSON-LD is a way of embedding machine-readable facts about a page directly in its HTML, using the vocabulary defined at schema.org. It sits inside a script tag with the type application/ld+json, usually placed in the page head or just before the closing body tag. Nothing in it is visible to a human visitor — it exists purely for crawlers, search engines, and AI systems to parse without having to guess meaning from visual layout.
- The script tag format: a script element with type="application/ld+json" containing a single JSON object or an array of objects
- The @context property, almost always set to https://schema.org, which tells parsers which vocabulary you're using
- The @type property, which names the specific schema — LocalBusiness, Restaurant, Attorney, Product, Article, and hundreds of others each with their own expected fields
- Nested objects for things like address, which use their own @type such as PostalAddress
The core block most small business sites actually need
Before reaching for anything exotic, most small businesses need exactly one well-built entity block on the homepage: a LocalBusiness type (or a more specific subtype like Restaurant, Dentist, or AutoRepair where one exists) with name, address, telephone, openingHoursSpecification, and a url field pointing back to the canonical page. Get this one block right — matching the exact NAP data used everywhere else on the web — before adding anything else.
- Pick the most specific @type available for your business rather than defaulting to generic LocalBusiness — schema.org's type hierarchy has dozens of specific business types
- Fill in address as a nested PostalAddress object with streetAddress, addressLocality, addressRegion, and postalCode as separate fields, not one combined string
- Use openingHoursSpecification as an array of objects, one per day or day-range, with dayOfWeek, opens, and closes in 24-hour time format
- Add a sameAs array listing your verified social profiles and directory listings
- Validate the block before deploying, using a schema testing tool, not just by eyeballing the JSON
FAQPage and Article schema — where people get tripped up
FAQPage schema is powerful because it can make individual question-and-answer pairs eligible for rich display in search results, but it only applies to content that's genuinely visible on the page as a question and its answer — not hidden accordion content stuffed with keywords that don't match what's shown to a visitor. Google and other engines have explicitly warned against markup that doesn't match visible content, and mismatches can get a site's rich results suppressed entirely, not just for that one page.
Structured data is a promise to the machine about what's on the page — break that promise and the machine stops trusting the rest of your markup too.
Debugging a broken implementation
When schema doesn't seem to be having any effect, the checklist is almost always the same: confirm the JSON actually parses (a single missing comma breaks the entire block silently in some renderers), confirm the script tag isn't being stripped by a caching layer or minifier, confirm the @type matches an actual schema.org type and isn't a typo, and confirm the data in the schema matches what's visibly on the page. None of this requires a framework or a library for a typical small business site — it's plain JSON hand-written or generated from a simple template, checked into version control alongside the rest of the page.
This is exactly the kind of implementation detail NetWebMedia handles as part of ongoing site work — see https://netwebmedia.com/services.html for the full scope, or run a page through the free audit at https://netwebmedia.com/free-audit.html to see whether existing schema on a site is valid and consistent with what's visible.
Does your business show up when AI answers?
ChatGPT, Claude, Perplexity and Google's AI Overviews are already answering the questions your customers ask. The $49 AI Visibility Scan shows you where you're cited, where you're invisible, and the three changes that move you first — a written report in your inbox within 48 hours. If nothing in it is actionable, you don't pay.
Run the $49 AI Visibility Scan →Share this article
Comments
Leave a comment