Poor heading structure
No H1, multiple H1s, or skipped levels, so agents can't build an outline of your page.
HTML headings (<h1> through <h6>) form a tree that describes how your page is organised: an H1 is the page topic, H2s are top-level sections, H3s are sub-sections, and so on. Agents read this tree to understand what the page covers and where to find specific information. "Poor heading structure" means the tree is broken: no H1 at all, multiple competing H1s, or jumping from H1 straight to H4 without the levels in between.
Agents extract structure before content. They look for the H1 to label the page topic, then walk H2s to enumerate sections, then drill into H3s when answering specific questions. A page with no H1 has no topic from the agent's perspective. A page with five H1s ("About", "Products", "Reviews", "Contact", "Blog") looks like five separate pages stitched together, and the agent does not know which one is the answer. Clean heading structure makes you findable; broken structure makes you invisible.
Heading structure is the cheapest readability fix on this list: it's pure HTML, no infrastructure changes, fixable in an afternoon. The payoff: agents start citing specific sections of long pages ("according to Acme's seasoning guide…"), FAQ schema starts working (it depends on H2/H3 to delineate questions), and accessibility scores improve as a side-effect. Skipping this fix costs every long-form page on your site.
Open the page and run the following in your browser console: `Array.from(document.querySelectorAll("h1, h2, h3, h4, h5, h6")).map(h => h.tagName + ": " + h.textContent.trim().slice(0, 60))`. Read the output as an outline. There should be exactly one H1, and the levels should never skip (H1 → H2 → H3, never H1 → H3). If the outline is empty, has multiple H1s, or has gaps, the structure is broken.
One <h1> per page, naming the page topic. Use <h2> for top-level sections, <h3> for sub-sections under each H2, <h4> for further nesting. Don't pick heading levels for visual styling; pick them for semantics, then style with CSS. If you need a small heading visually, use a class, not <h6>.
The reference snippet above is platform-agnostic. Below are the concrete steps for the four most common stacks plus a generic fallback for any other host.
Next.js
In React/Next.js components, the heading tags are just JSX (<h1>, <h2>, …). The trap is reusing components across pages and ending up with no H1 anywhere, since every page is wrapped in <Layout> which ships an <h2 class="page-header">. Audit your top-level page.tsx files: each should render exactly one <h1> and the rest should be <h2>/<h3>. Avoid heading components that auto-pick a level; pick explicitly.
WordPress
WordPress's classic editor uses <h1> for the post title and lets authors choose H2–H6 in the body. The Block Editor (Gutenberg) is similar: the post title block is the H1, and Heading blocks default to H2. Two common breakages: theme builders that wrap everything in <h2> for SEO-by-mistake reasons, and authors who skip levels for visual reasons. Audit your theme's single.php / the_title() output and your editor's heading-level defaults.
Shopify
Liquid templates emit headings the same way HTML does. Shopify's default Dawn theme uses <h1> for product titles and the page title; collection sections often use <h2>. The common breakage is theme customisations that swap <h1> for <h2> "for ranking reasons." Don't. Open Edit code and grep for <h1; every product, collection, page, and article template should emit exactly one. For long descriptions, encourage merchants to use the rich-text editor's heading dropdown rather than bolding text.
Webflow
Webflow Designer has explicit heading-level controls in the element settings; every text element can be set to H1, H2, …, H6, or paragraph. Audit your templates: the page should have exactly one H1 (typically the page title or hero copy), and all other headings should be H2 or below. CMS Collection items default to H2; promote one to H1 on detail templates and demote anything that competes with it on list templates.
Static HTML / any stack
Hand-author the heading tree in your HTML or markdown. Markdown's # / ## / ### map directly to H1 / H2 / H3. Most static-site generators preserve the tree; the typical breakage is layouts that hard-code an <h1>Site Name</h1> in the header so every page ends up with two H1s. Demote the site-name heading to <p> or use CSS to style it without an H tag.
- Two <h1>s on the same page: one in the site header ("Acme"), one as the page title. Demote the site-name to a paragraph or use a logo image with alt text.
- No <h1> at all because the layout uses <h2> for the page title and <h1> never appears. Every content page needs exactly one <h1>.
- Skipping levels (<h1> → <h3>) for visual reasons. The level is semantic, the visual is CSS. Use a class to make an <h2> look smaller, do not switch it to <h4>.
- Using headings as styled labels (<h3>Total: $79</h3>). Headings are for hierarchy, not emphasis. Use <strong>, <p class="label">, or a definition list.
- Generic H2s that repeat on every page ("About", "FAQ", "Contact"). Make them page-specific so the outline tells the agent what this page is about.
Run the console outline check above and confirm: exactly one H1, no skipped levels, headings are descriptive. Run lighthouse → Accessibility, and heading-related warnings should be gone. Run a fresh AgentSpeed scan; the readability score will move up because heading-derived signals (text-ratio, structure) improve together.
Can I have more than one <h1> with HTML5 sectioning elements?
The HTML5 spec technically allows multiple H1s inside <article> / <section>, but agents and screen readers do not implement the sectioning algorithm consistently. The portable rule is one H1 per page. Use H2 for everything else.
Does the H1 have to match the <title>?
No, but they should describe the same thing. <title> is for the browser tab and external citations; <h1> is for the visible page top. They can differ in tone: a blog post title might be playful in <h1> ("How I learned to stop worrying and love cast iron") and informational in <title> ("Cast iron seasoning guide | Acme").
What about heading levels inside reusable components (cards, sidebars)?
Use <h2> or <h3> for the component label depending on where it sits in the page outline. Avoid components that hard-code <h1>; pass the level in as a prop if the component is reused at different depths.
Free scan, no signup. The score page is permanent and citable, so you can link it from your team's remediation ticket alongside this guide for “Poor heading structure”.