WQI.web​qualityindex
Method v1.2.0 86 live / 86 total factors methodology

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.

Same factor, two depths.

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

  1. Homepage HTML via linkedom (canonical)
  2. 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

Ticket
WEBQ-13
Category
SEO & Discoverability
Status
live
Weight
0.7%
Data source
Service cost
Free — HTML parsing
Scoring impl
implemented
Method version
v1.2.0

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

← back to methodology