Headings (<h1> to <h6>) give the page an outline. The H1 is the main headline; H2s are main sections; H3s are sub-sections. This guide covers the heading checks in Site crawl and audit reports.
| Where | Check name | Flagged when |
|---|---|---|
| Site crawl | Missing H1 (warning) | A page that returns 200 has no <h1> element in its HTML |
| Site crawl | Multiple H1 tags (notice) | A page has more than one <h1> |
| Audit, On-page | One H1 heading (Critical) | The page has no H1 or more than one |
| Audit, On-page | Keyword in H1 | The audit keyword is not in any H1 (Keyword Score audits) |
The crawler reads the HTML the server sends. With Render JavaScript on, only the start page is rendered; other pages are read as plain HTML.
Find the affected pages in the app
- Site crawl: open the crawl in Site crawl › Issues › Missing H1 or Multiple H1 tags lists the affected URLs (the first 20). Export gives all of them.
- Audit report › On-page (open it from Audits): the value under One H1 heading shows the H1 text found, separated by
|when there are several, or “No H1”. - To see the headings yourself, open the page, press Ctrl+U and search for
<h1.
Missing H1
How we detect it
The crawler counts <h1> elements in the HTML of every page that returns 200. Zero means Missing H1 (warning). The audit shows One H1 heading with “The page has no H1 heading.”
Why it matters
The H1 tells Google and visitors the main topic at a glance, and screen readers use it to find the start of the content.
Common causes
- If the page shows a big headline → it is styled text (
div,p,span), not an H1. - If a page builder is used → its heading widgets are set to H2 everywhere.
- If the page has no visible title → a “Disable title” / “Hide title” option is on.
- If the heading appears only after load → it is injected by JavaScript.
Fix: basic
- Open the page in the editor.
- If the theme shows the page title as the H1, make sure the title is filled in and not hidden (turn off Disable Title / Hide Title).
- Otherwise add a heading at the top of the content and set its level to H1 (see Platform steps).
- Write it about the page topic, for example “Emergency Plumber in Leeds”. Keep it under about 70 characters.
- Save or publish.
Fix: expert
A clean outline in HTML:
<main>
<h1>Emergency Plumber in Leeds</h1>
<p>Fast, fixed-price plumbing repairs, 24/7.</p>
<h2>What we fix</h2>
<h3>Burst pipes</h3>
<h3>Blocked drains</h3>
<h2>Areas we cover</h2>
</main>
Shopify: change the title wrapper in the template section (for example sections/main-product.liquid):
<h1 class="product__title">{{ product.title | escape }}</h1>
Platform steps
WordPress (block editor)
- Theme title hidden? Open the page settings sidebar (Astra, Kadence, GeneratePress: theme settings panel) and turn off Disable Title.
- Or add a Heading block at the top, select it and set the level to H1 in the block toolbar.
- Click Update.
WordPress page builders
- Elementor: select the main heading widget › Content › HTML Tag › H1. Check Page settings (gear) › Hide Title if you rely on the theme title.
- Divi: in the Heading/Text module, set the main title to H1 (Design › Heading Text styles follow the level).
- Beaver Builder / Bricks / Oxygen: heading element › Tag › h1.
Shopify
- Product, collection and page titles are H1 in most themes. If not, in Shopify admin open Online Store › Themes › … › Edit code, find the section and use the Liquid snippet above.
- For custom sections, choose the heading option that outputs H1 if the theme offers one.
Webflow
- Open the site from the Webflow dashboard in the Designer, select the main heading › Settings panel › Tag › H1 › Publish.
Wix
- Open the site from the Wix dashboard in the Editor, select the text › Edit Text › Heading 1 theme style (newer editors: SEO & accessibility › Semantic tag › H1) › Publish.
Squarespace
- In your Squarespace account, open the page, edit the text block, select the headline, choose Heading 1 › Save.
Verify the fix
- Ctrl+U on the live page and search
<h1: exactly one match. - Clear page and CDN caches if the old HTML still shows.
- In Site crawl, open the crawl › Crawl again, then Compare: Missing H1 should be under Fixed issues.
Automation
Assisted: detection is automatic; changing a heading level needs WordPress admin (block/page builder data), Shopify Admin API (theme files) or the Webflow API, and theme edits may need code access.
Multiple H1 tags
How we detect it
The crawler counts <h1> elements on every page that returns 200. More than one is Multiple H1 tags (notice). Scanner lines: This page has multiple H1 tags, Don’t use more than one H1 tag on the same page.
Why it matters
Google can handle several H1s, so this is a notice. One clear H1 still gives the page one obvious topic and a clean outline for screen readers.
Common causes
- If every page has two → the logo is wrapped in
<h1>in the header and the page title is H1. - If the home page has many → a slider or hero uses H1 for each slide.
- If blog listing pages have many → each post title in the list is H1.
- If a sidebar or footer has one → a widget heading uses H1.
Fix: basic
- Find every H1: Ctrl+U and search
<h1. - Keep the one that describes the page (usually the page or product title).
- Slider/hero slides: set each slide heading to H2, except one H1 on the page.
- Blog lists: set post titles in listings to H2 (Elementor Posts widget › Title HTML Tag › H2).
- Widgets: set widget headings to H2 or H3.
- Keep the visual size with styling, not the tag (see Fix: expert).
Fix: expert
List all H1s from the browser console (F12 › Console):
[...document.querySelectorAll('h1')].map(h => h.outerHTML.slice(0, 120))
Logo in H1: edit the child theme header.php (WordPress) or sections/header.liquid (Shopify) and keep the class so the style stays:
<!-- before -->
<h1 class="site-title"><a href="/">Smith Plumbing</a></h1>
<!-- after -->
<div class="site-title"><a href="/">Smith Plumbing</a></div>
Keep an H2 looking big:
.hero h2 { font-size: 2.5rem; line-height: 1.2; }
Many themes use H1 for the logo only on the home page; check the home page and an inner page.
Platform steps
WordPress
- Theme header: copy
header.phpinto the child theme, apply the change above, Update File (Appearance › Theme File Editor) or upload by SFTP. - Elementor: select each extra heading › HTML Tag › H2 › Update.
Shopify
- In Shopify admin › Online Store › Themes › … › Edit code › sections/header.liquid: replace the
h1around the logo with adiv› Save.
Webflow / Wix / Squarespace
- Select each extra H1 and change its tag or style to Heading 2, then publish.
Verify the fix
- Ctrl+U and search
<h1: one match. - In Site crawl, Crawl again, then Compare: Multiple H1 tags should be under Fixed issues.
Automation
Assisted: same access as Missing H1; theme header changes need theme-file access (WordPress admin or SFTP, Shopify Admin API themes).
One H1 heading
How we detect it
The audit counts the H1s on the audited page. Exactly one passes. None or more than one is Critical. The value lists the H1 texts separated by |.
Why it matters
One clear H1 tells search engines and readers the main topic of the page.
Common causes
- If the value says “No H1” → see Missing H1 above.
- If it shows several texts → see Multiple H1 tags above.
Fix: basic
- No H1: follow Fix: basic under Missing H1.
- Several H1s: follow Fix: basic under Multiple H1 tags.
Fix: expert
Use the snippets under Missing H1 and Multiple H1 tags.
Platform steps
All platforms
- Use the platform steps under Missing H1 or Multiple H1 tags.
Verify the fix
- Click Run again on the audit in Audits. One H1 heading should say “The page has exactly one H1.”
Automation
Assisted: same access as Missing H1.
Keyword in H1
How we detect it
In Keyword Score audits, the check looks for the keyword inside any H1 (lower-case match). Scanner lines also check H2s: No keyword found in H2 tags, At least one H2 tag should contain a relevant keyword.
Why it matters
The H1 is the first heading people read. It should match what they searched for, which confirms relevance to Google too.
Common causes
- If the H1 is generic (“Welcome”, “Our Services”) → it was never optimised.
- If it uses a synonym → the check needs the exact phrase.
Fix: basic
- Rewrite the H1 to contain the exact keyword near the start (pick the keyword with Keyword research if you don’t have one yet): “kitchen fitters Manchester” → “Kitchen Fitters in Manchester – Design, Supply and Fit”.
- Keep it natural and under about 70 characters.
- Use the keyword or a close variation in one H2, for example “Why choose our kitchen fitters in Manchester”.
- Don’t put the keyword in every heading.
Fix: expert
No code needed beyond editing the heading text.
Platform steps
All platforms
- Edit the H1 text in the page editor (see Missing H1 platform steps for where).
Verify the fix
- Click Run again on the audit in Audits. Keyword in H1 should say “The H1 contains …”.
Automation
Assisted: wording needs a person; writing needs WordPress admin, Shopify Admin API or the Webflow API.
H2 to H6 heading lines
How we detect it
The classic audit scanner checks each heading level and writes lines such as Page should contain at least one H2 tag, Some H2 tags do not have a discernible text, Keep H2 tag length between … characters, Some H3 tags length is too long and This page didn’t use … tags. In ”+” audits, Lighthouse may also flag Heading elements are not in a sequentially-descending order (you can run the same check in PageSpeed Insights or Lighthouse).
Why it matters
Sub-headings split the page into sections people can skim and Google can match to specific searches. Empty headings confuse screen readers and add nothing.
Common causes
- If there are no H2s → the page is one long block of text.
- If headings are empty → page builders leave empty headings in hidden mobile/desktop sections, or a heading holds only an icon.
- If lengths are off → whole sentences used as headings, or one-word headings.
- If levels jump (H2 then H4) → levels picked for font size.
Fix: basic
- At least one H2: split the content into sections, each starting with an H2 that says what it covers (“Our process”, “Prices”, “FAQs”).
- No discernible text: delete the empty heading or put real text in it.
- Length: aim for about 20 to 60 characters; move long explanations into the paragraph below.
- Order: use H3 under H2 and H4 under H3.
Fix: expert
Find empty headings in the browser console:
[...document.querySelectorAll('h1,h2,h3,h4,h5,h6')].filter(h => !h.textContent.trim()).map(h => h.outerHTML.slice(0, 120))
Platform steps
WordPress (Elementor)
- Open Navigator (Ctrl+I), find the empty heading widget (also in sections hidden on mobile or desktop) and delete it › Update.
Shopify / Webflow / Wix / Squarespace
- Edit the section or text block, set headline levels to Heading 2 / Heading 3 in order, remove empty headings, publish.
Verify the fix
- Run the console snippet again: it should return an empty list.
- Click Run again on the audit in Audits and check the On-page heading lines.
Automation
Assisted: same access as Missing H1.
Common questions
Is having two H1 tags a ranking problem?
Google says it can handle several H1s, so it is a notice, not an error. One clear H1 is still best practice: it gives the page one obvious topic and helps screen readers.
My H1 is the logo. Is that OK?
No. A logo H1 repeats the brand on every page, so no page gets a topical H1. Change the logo wrapper to a div or p and give each page its own H1.
Should the H1 be the same as the title tag?
It can be similar but doesn't have to match. The title is written for search results; the H1 is the headline people see on the page. Both should contain the main topic.
Why does the crawl say Missing H1 when I can see a heading on the page?
The visible heading is probably styled text (a p, div or span with big font), not an h1 element, or it is added by JavaScript after the page loads. The crawler reads the HTML the server sends.
Related articles
- Fix: title tags and meta descriptions
- Fix: content — word count, keyword placement and readability
- Crawl a whole website
- Read your audit score and report
Still need help?
Ask in the chat inside the app, or send us a message on the contact page. You can also browse all help topics.