methodology / SEO & Discoverability / #13
H1 tag presence
#13 · Recommended · Web Quality · weighted · SEO & Discoverability · weight 0.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.7 applied to every site type unless overridden below
- Why this weight
- An H1 anchors the page for screen readers and search bots. Modest signal — most sites have one.
Per-site-type overrides
| Site type | Weight | Δ vs base |
|---|---|---|
| E-commerce | 0.9 | +0.2 |
| News / Publisher | 0.9 | +0.2 |
| Personal site | 0.3 | -0.4 |
Site types not listed inherit the base weight.
What this means for your business
Every page should announce, in one obvious sentence, what it's about. When that's missing, Google and skim-reading visitors both lose the thread of what you do.
Plain title: A clear headline on every page
What we measure
An H1 is your page's main headline. Google uses it to understand what the page is about. Missing it forces Google to guess from less reliable signals.
How to improve your score
Add a single `<h1>` tag containing the page's primary topic. Many WordPress themes use `<p class="page-title">` instead — switch to a real heading tag.
Implementation
stale · v1 · seeded — no connector publish yet · source: freshcoat-discovery/src/connectors/seo-schema.ts:scoreH1Presence
Detection method
Parses ctx.html via linkedom and counts <h1> tags. Legacy audit endpoint's seo_h1_count is treated as a fallback only — it misses h1s on SSR sites the linkedom parser handles correctly. ≥1 h1 = pass; 0 h1s with chrome+no-jsonld = suspected stripping (null); 0 h1s otherwise = soft fail.
Detection sources
- Homepage HTML via linkedom (canonical)
- Audit endpoint seo_h1_count (fallback when connector returns null)
Scoring bands · soft ladder
| Score | Condition |
|---|---|
| 100 | ≥1 <h1> in the parsed DOM |
| 30 | 0 h1s, page genuinely lacks one (chrome present + JSON-LD present, or no chrome at all) |
| n/a | 0 h1s, page chrome present, no JSON-LD — UA/IP stripping suspected |
| 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.
N_h1s_via_html_parse- Found N h1 tags by parsing ctx.html directly.
no_h1_in_html- Page has chrome and JSON-LD but no h1 — genuine miss, not stripping.
ua_or_ip_filter_suspected_no_h1_no_jsonld- Page chrome but no h1 + no JSON-LD — likely got the stripped response.
audit_h1_count_zero_defer_to_connector- Upstream said 0 h1s; deferred to the linkedom-direct parse.
Applicability
Required tier — Web Standards floor item. Modern HTML5 sectioning allows multiple h1s; we only require ≥1.
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 |