methodology / SEO & Discoverability / #12
Schema.org structured data presence
#12 · Recommended · Web Quality · weighted · SEO & Discoverability · weight 2.7% · impl implemented · method v1.2.0
Web Quality factor
This factor is part of Web Quality — the weighted 0..100 score that sits above Web Standards. Its weight depends on what kind of site is being measured. Web Standards items take priority; this factor only enters the score once Web Standards passes.
- Base weight
- 0.8 applied to every site type unless overridden below
- Why this weight
- Schema.org structured data is how AI assistants and search engines understand pages. Critical for news (Article) and local biz (LocalBusiness).
Per-site-type overrides
| Site type | Weight | Δ vs base |
|---|---|---|
| Blog | 0.5 | -0.3 |
| E-commerce | 1.0 | +0.2 |
| News / Publisher | 1.2 | +0.4 |
| Local business | 1.0 | +0.2 |
| Personal site | 0.3 | -0.5 |
| Media / Streaming | 1.0 | +0.2 |
Site types not listed inherit the base weight.
What this means for your business
Behind the scenes, your pages can carry small tags that tell Google whether you're a restaurant, a dentist, or a law firm — and your hours, prices, and reviews. Without them, Google has to guess, and the rich result with stars and photos goes to a competitor instead.
Plain title: Hidden labels that explain your business to Google
What we measure
Structured data tells Google what kind of business you are — local business, recipe, product, article. With it, Google shows rich results: stars, hours, prices, attorney names. Without it, you get plain blue links.
How to improve your score
Add JSON-LD scripts. For local businesses: `LocalBusiness` schema with name, address, phone, hours, rating. For specific types: `LegalService`, `Restaurant`, `Recipe`, etc. WordPress: Yoast / Rank Math add these automatically when configured.
Implementation
stale · v1 · seeded — no connector publish yet · source: freshcoat-discovery/src/connectors/seo-schema.ts:scoreSchemaPresence
Detection method
Parses ctx.html via linkedom directly. Extracts every <script type="application/ld+json"> block; flattens @graph wrappers; collects all @type values across the flattened nodes. Graded by completeness: Org+WebSite+page-type best, Org-only or WebSite-only mid, no-recognised-types worst.
Detection sources
- Homepage HTML via linkedom (canonical)
- Browser-UA fallback fetch when initial response looks UA-stripped
- Legacy audit endpoint's seo_has_structured_data — only used when connector finds zero blocks
Scoring bands · graded ladder
| Score | Condition |
|---|---|
| 100 | Organization + WebSite + page-specific type (Article/Product/LocalBusiness/etc.) |
| 80 | Organization + WebSite |
| 60 | Organization-only or WebSite-only or page-specific-only |
| 30 | JSON-LD blocks found but no recognised types (vendor schemas / typos) |
| n/a | page chrome present but no h1 + no JSON-LD — UA/IP-stripping suspected (Vercel-style) |
| n/a | no html to parse |
Evidence-key dictionary
What every notes string the connector emits means.
Surfaces in the per-domain dossier evidence column.
org_website_page_specific- Full triple — top score.
org_and_website- Both Org and WebSite found; no page-type.
org_only- Only Organization-family schema.
website_only- Only WebSite schema.
page_specific_only- Only a page-specific type (Article/Product/etc.) — missing the Org/WebSite umbrella.
no_recognised_types- JSON-LD blocks parse, but no @type matches the recognised set.
no_structured_data- Page genuinely lacks JSON-LD.
ua_or_ip_filter_suspected_no_h1_no_jsonld- Page chrome present but no h1 or JSON-LD — we likely got a UA-filtered or IP-filtered response. Excluded from the composite.
Applicability
Variable tier; weighted by site type (news=1.2, ecommerce=1.0, personal=0.3 per the matrix). When the connector can't see the page clearly (suspected stripping), the factor returns null and is excluded from the composite — we say so explicitly rather than penalising the site for a measurement gap.
Changelog
- 2026-04-29 · seed Initial seed from MethodologyRegistry bootstrap.
Facts
Scoring
Scoring formulas are versioned with the methodology. The current method (v1.2.0) maps raw measurements to pass, warn, fail. Factor weights determine how much each contributes to the composite — see the methodology index for the full table.
Cited by these standards
Standards in the Standards Library whose satisfiedBy requirement tree references this factor. Each link goes to the standard's full entry — methodology, scope, and the other factors it relies on.
Version history
| Version | Change | Date |
|---|---|---|
| v1.2.0 | Factor introduced. Status: live. Scoring impl: implemented. | 2026-04-25 |