Local businessschema:what validatorsmiss.

A document can parse cleanly while describing hours, locations, or ratings the page cannot support. We reviewed 20 service-business websites, inspected our own markup, and built a walkthrough that explains each claim before adding it.

The MooseRank strategist comparing an abstract markup document with business-hours evidence, a service van, and a connected identity graph
SyntaxBusiness evidenceGoogle feature rules

The short answer

A parser can read a claim without knowing whether it is true.

Schema is structured information about a page and the things it describes. JSON-LD is one format for expressing it. A successful JSON parse establishes readable syntax; it does not establish the right vocabulary, accurate business facts, or eligibility for a Google search feature.

Google says some structured-data quality requirements are difficult to test automatically. The useful workflow therefore starts with evidence: describe the actual business, connect existing identities, and review the specific feature requirements after the page facts are settled.

01 / Original observation

Twenty homepages. Twenty-five parseable blocks. Further questions remained.

On October 22, 2026, MooseRank collected public server-response HTML from five Long Island handyman providers, five Long Island HVAC providers, five Austin plumbing providers, and five Denver-area electrical providers. Fifteen linked contact pages supplied additional context. MooseRank itself was reviewed separately.

The domains were a convenience sample discovered through public searches, excluding directories and marketing publishers. They were not randomly selected or treated as the top Google results. One plumbing-domain connection failed and was replaced; the downloadable record preserves that attempt. Provider affiliations were not assessed. Collection and source-text comparisons were AI-assisted; aggregation and source hashes were checked programmatically. The sampled business owners did not verify the findings.

16/20Homepages with JSON-LD in the response
25Homepage JSON-LD blocks parsed
0JSON syntax failures in those blocks
14/20Homepages with typed business descriptions

Direct business-node properties appeared on nine homepages for telephone, nine for hours, nine for areaServed, and seven for a street-address property. Own-business aggregate-rating markup appeared on two. These are presence counts, not requirements, quality scores, or findings of policy violations.

One homepage had microdata indicators and none had detected Schema.org RDFa indicators. These other formats were not fully parsed. A homepage without observed JSON-LD might still supply other markup or add it through JavaScript. The study did not inspect Google's rendered version, test rich-result eligibility, or measure rankings.

Inspect the 20 source records and observations

Each record identifies the collected homepage and its scope. Counts inspect direct properties on typed JSON-LD business/organization descriptions, including incomplete ones. They do not resolve linked properties, count nested contact points, or infer that each declaration is a separate company. Exact addresses, phone numbers, full graphs, and raw HTML are omitted from the public dataset.

  1. S01 / handymanthebluewhalehandyman.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    2
    Business declarations
    1
    Hours property
    Observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:13.809894 UTC
  2. S02 / handymananker.services ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    0
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:13.812232 UTC
  3. S03 / handymanwww.huntingtonhandyman.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    1
    Business declarations
    1
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:13.812232 UTC
  4. S04 / handymanrhir.net ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    0
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:13.813453 UTC
  5. S05 / handymanprecisionhomerepairli.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    2
    Business declarations
    1
    Hours property
    Observed
    Coverage property
    Observed

    Server body is an application shell; agreement with rendered visible content was not determined.

    Fetched 2026-10-22 05:22:13.813453 UTC
  6. S06 / HVACwww.acscoolingandheating.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    0
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:14.848459 UTC
  7. S07 / HVACwww.huntingtonairconditioning.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    2
    Business declarations
    2
    Hours property
    Observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:15.494882 UTC
  8. S08 / HVACwww.soundviewhvac.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    1
    Business declarations
    1
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:16.126255 UTC
  9. S09 / HVACseasonsair.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    1
    Business declarations
    2
    Hours property
    Observed
    Coverage property
    Observed

    Opening-hours scope unresolved: routine office hours and emergency availability are described differently.

    Fetched 2026-10-22 05:22:16.208385 UTC
  10. S10 / HVACwww.nhross.com ↗

    Huntington / Long Island, New York

    JSON-LD blocks
    1
    Business declarations
    3
    Hours property
    Observed
    Coverage property
    Observed

    Two emitted business schedules differ; visible live-answering availability does not resolve the intended opening schedule.

    Fetched 2026-10-22 05:22:16.446083 UTC
  11. S11 / plumberwww.touchstoneplumbing.com ↗

    Austin, TX

    JSON-LD blocks
    1
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:19.792967 UTC
  12. S12 / plumberwww.austinsgreatestplumbing.com ↗

    Austin, TX

    JSON-LD blocks
    1
    Business declarations
    1
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:19.794971 UTC
  13. S13 / plumberwww.weplumbatx.com ↗

    Austin, TX

    JSON-LD blocks
    1
    Business declarations
    2
    Hours property
    Observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:19.795968 UTC
  14. S14 / plumberwww.austinplumbing.com ↗

    Austin, TX

    JSON-LD blocks
    1
    Business declarations
    1
    Hours property
    Observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:21.228388 UTC
  15. S15 / electricianwww.redfoxelectric.com ↗

    Denver, CO

    JSON-LD blocks
    4
    Business declarations
    3
    Hours property
    Observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:21.734592 UTC
  16. S16 / electricianwww.welshelectricinc.com ↗

    Denver, CO

    JSON-LD blocks
    2
    Business declarations
    1
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:21.806708 UTC
  17. S17 / electricianwww.chriselectric.com ↗

    Denver, CO

    JSON-LD blocks
    0
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:22.608691 UTC
  18. S18 / electricianwww.tegraelectric.com ↗

    Denver, CO

    JSON-LD blocks
    1
    Business declarations
    0
    Hours property
    Not observed
    Coverage property
    Not observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:22.963751 UTC
  19. S19 / electricianunitedelectricdenver.com ↗

    Denver, CO

    JSON-LD blocks
    2
    Business declarations
    2
    Hours property
    Observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:22:23.623105 UTC
  20. S20 / plumberrootermanofaustin.com ↗

    Austin, TX

    JSON-LD blocks
    2
    Business declarations
    1
    Hours property
    Not observed
    Coverage property
    Observed

    Selected claims reviewed against collected page text; this is not business-owner or Google validation.

    Fetched 2026-10-22 05:23:04.467618 UTC

02 / What required judgment

An hours field needs a meaning, not just a time range.

In record S09, the emitted all-day schedule sat beside public text that distinguished routine weekday hours from emergency availability. That is an unresolved scope question: which kind of availability does the schedule describe? It is not proof that the business is closed when its markup says it is open.

Record S10 contained two different same-brand business schedules in the collected homepage markup. The public live-answering statement did not establish which opening schedule was intended. The internal difference was observable; the correct real-world schedule was not established.

Record S05 illustrates a different limit. Its response included parseable business markup, while the body was essentially a JavaScript application shell. Comparing that server text with the markup could not settle what users would see after rendering. We kept that comparison unresolved.

These observations explain why we did not publish an error percentage. An absent optional property, a reference to another node, a dispatch schedule, and an actual contradiction need different treatment. The useful next action is to inspect the intended meaning with the business owner and page evidence.

03 / Controlled teaching example

Both documents parse. Their claims differ.

Fictional fact set

Example Home Services is a real local-provider identity within this teaching scenario. It travels to customers in Example County, publishes weekday opening hours of 09:00–17:00, has no public street address in the supplied facts, and supplies no rating evidence. This scenario is invented; it is not a claim about a sampled provider.

Unsupported additions

Parseable JSON with claims beyond the fact set

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.com/#business",
  "name": "Example Home Services",
  "url": "https://example.com/",
  "openingHours": "Mo-Su 00:00-23:59",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Example Street",
    "addressLocality": "Example City"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 5,
    "reviewCount": 200
  }
}

The all-day schedule, street address, and rating count exceed the supplied evidence. Their readable syntax cannot make those claims true.

Evidence-constrained draft

Same business identity, fewer unsupported assertions

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://example.com/#business",
  "name": "Example Home Services",
  "url": "https://example.com/",
  "areaServed": "Example County",
  "openingHours": "Mo-Fr 09:00-17:00"
}

This draft keeps the supported identity, coverage, and schedule. Withholding an address means Google's LocalBusiness feature requirements need separate assessment. It is not a Google-approved example.

Our strict JSON parser successfully reads both examples. That is the test performed here. We do not present either as a result from Google's Rich Results Test or the Schema.org validator.

Own-business ratings also have a separate feature restriction: Google does not make self-serving LocalBusiness or Organization review markup eligible for review stars, including reviews embedded through a third-party widget. A syntactically readable rating is not a shortcut around that rule.

04 / Our documented implementation

We removed two availability assertions from MooseRank's graph.

Before this review, MooseRank's public business node included an all-week openingHoursSpecification of 00:00–23:59 and the same all-week schedule under contactPoint.hoursAvailable. The captured homepage and contact text did not state that round-the-clock opening or contact promise.

We could establish what the markup asserted and what the reviewed text did not substantiate. We could not establish actual staff availability from those pages. Our implementation choice was to omit the two assertions pending supported public details, rather than invent a replacement schedule.

  1. RemovedThe two undocumented availability properties.
  2. RetainedThe existing LocalBusiness type, business @id, public contact details, profile references, locality description, and service coverage.
  3. Kept separateGoogle Business Profile settings, which were not changed; real-world availability and Google feature eligibility, which were not independently verified.

The preserved locality-only address is not presented as evidence of a complete physical-address submission for Google's LocalBusiness feature. We did not add a street address, claim a new office, or change the identity just to obtain a cleaner feature test.

The before record includes the source URL, collection time, and source-response hash. The after record contains the implemented business node. A comparison check confirms that only those two availability properties changed. This is a factual cleanup, with no measured ranking or conversion outcome attributed to it.

05 / Choose the statement first

Identity, location, and service are related, but they are different statements.

Organization
Describes an organization. It can be a sensible starting identity when a more specific local branch or business description is not supported.
LocalBusiness
Describes a particular real local business or branch. Use a genuine suitable subtype where available; keep legitimate parent and branch relationships clear.
Service
Describes the offer and links it to its provider. A service-area label describes coverage; it does not establish a physical branch at every place named.

A service-area business does not become an online-only organization merely because it withholds a private street address. Schema.org vocabulary and Google's feature requirements are separate. Google's LocalBusiness guidance requires a physical address for that feature; areaServed describes coverage and does not substitute for it.

Choose the actual business model before considering a search feature. For the separate question of which geographic website pages to build, use our local-page comparison in the next-reading section.

Reusing one stable business @id across pages can connect statements about the same entity. When a website already has markup from a theme, plugin, or custom layout, inspect and reconcile it before adding another business description. Multiple IDs can represent legitimate entities; check meaning and agreement before calling them a conflict.

06 / Interactive walkthrough

Build a small draft and read the reasons.

Use public facts you can support, or load the clearly fictional example. The walkthrough keeps optional claims out until you choose them, preserves an existing identity when supplied, and explains what still needs checking. It does not decide Google eligibility for you.

Interactive / runs in your browser

What can your page actually support?

Enter public facts to create a small review draft with reasons. This walkthrough does not visit your website, check business facts, or run Google's tests. Inputs are not sent to our server or saved by this tool.

1 / Identify the business and service
2 / Decide which claims to include
Complete the required details and confirmation to create a review draft.
  • Add the business name supported by your public page.
  • Use a complete http or https website URL without a query, fragment, or login details.
  • Name one service the business actually provides.
  • Confirm that the entered claims are supported, or that you are reviewing the labeled fictional example.

Why the draft includes—or omits—these claims

  • No street address is emitted. LocalBusiness vocabulary and Google feature eligibility are separate: areaServed does not replace Google's physical-address requirement. Review eligibility separately without inventing or exposing a private address.
  • No opening-hours claim is emitted. A form being available all day does not establish staff, appointment, or emergency availability.
  • No rating, review count, FAQ rich-result claim, map position, or guaranteed search appearance is added.

07 / Validation in layers

Use each check for the question it can answer.

  1. ReadabilityParse the JSON and inspect the delivered page. This catches formatting failures, not business truth.
  2. Vocabulary and relationshipsUse the Schema.org validator to review supported types and properties, then inspect provider, page, and identity connections.
  3. Business evidenceCompare each substantive claim with current public page content and owner-confirmed operations. Resolve office, answering, appointment, and emergency scope explicitly.
  4. Google feature requirementsUse the Rich Results Test for supported features, then Google's URL Inspection when access is available. Passing a tool does not guarantee appearance.

Feature lists also change. Google's May 8, 2026 update states that FAQ rich results stopped appearing starting May 7. Service remains useful Schema.org vocabulary, while Google's current search gallery does not list a standalone Service rich-result feature. Useful visible FAQs and accurate service relationships can remain without a promise of extra search decoration.

Review the graph when hours, services, locations, phone routing, software, or page ownership changes. Record the source of each important claim and give one person responsibility for checking it. The goal is an accurate description that stays connected to the business.

Connect strategy to execution

A priority is only useful when the campaign can act on it.

MooseRank's technical SEO and site foundation connects accurate structured data with crawl access, useful pages, consistent identities, and a working customer path.

As a Long Island SEO company, MooseRank keeps research tied to the services, markets, and customer decisions the business actually wants to win.

Continue by intent

Continue through the SEO strategy system.

Choose the next move

Turn the opportunity set into an accountable plan.

Bring the services, markets, current pages, and search evidence. MooseRank will identify what to build, improve, consolidate, support, or defer.

Straight answers

Common questions

01Must every service-area business use Organization instead of LocalBusiness?

No. LocalBusiness describes a particular real local business or branch, and a suitable subtype can be appropriate. The separate question is whether the published facts meet Google's current feature requirements. Withholding a private street address does not justify inventing one, and areaServed is not a replacement for a physical address in Google's LocalBusiness feature guidance.

02Does repeating the same business @id on several pages create duplicate businesses?

No. Reusing a stable identifier can connect references to the same business. Inspect whether the statements agree and whether genuinely different organizations or branches are being described. A repeated description or multiple legitimate entities is not automatically a conflict.

03Why did you count missing fields without calling them errors?

The study measures what was directly present on selected JSON-LD business nodes. Optional fields may be omitted deliberately, represented through references or other formats, or added after JavaScript renders. Absence under this collection method is not proof that the business or its SEO has a problem.

04Will FAQ or Service markup give my business extra Google search features?

Do not assume that a Schema.org type has a matching Google feature. Google retired FAQ rich results starting May 7, 2026. Service is useful vocabulary for describing an offer and its provider, but it is not a standalone service rich-result feature listed in Google's current gallery. Visible FAQs can still help readers.

05Does this walkthrough publish or verify my business information?

No. It runs in the browser and creates a review draft from your inputs. It does not crawl your website, verify your identity, contact Google, or publish code. Check the facts, reconcile existing markup, and use the appropriate validation tools before implementing the draft.

Primary sources

Documentation reviewed

  1. Google: structured-data quality, accuracy, and testing limits
  2. Google: LocalBusiness feature requirements
  3. Google: review snippets and self-serving review restrictions
  4. Google: May 2026 retirement of FAQ rich results
  5. Google: supported structured-data search features
  6. Schema.org: LocalBusiness vocabulary
  7. Schema.org: Service vocabulary and provider relationships
  8. Schema.org: areaServed describes coverage

Research note: collected October 22, 2026 with AI-assisted collection and source-text review. The 20-provider convenience sample used server-response HTML, with homepage counts and selected supplementary text comparisons. It was not a random sample, rendered Google audit, ranking study, Schema.org validation, or Rich Results Test. The public method and redacted dataset document the scope. MooseRank's own implementation review was separate. Fictional examples and browser-generated drafts are labeled; no ranking lift or guaranteed feature appearance is claimed.

The Moose, Founder of MooseRank

About the author

The Moose

The Moose is the Founder of MooseRank and writes about SEO strategy, AI search visibility, and the evidence businesses should use to make better search decisions.

Meet The Moose and the MooseRank system