---
title: "Page doesn't have exactly one visible <h1> in the server HTML (seo/h1-count)"
description: "seo/h1-count: Google uses the first visible h1 as a title-link source and Bing expects the h1 to reflect the title; agents and Markdown converters use…"
canonical: https://void-design.vercel.app/rules/seo/h1-count
lastModified: 2026-09-16
---

# Page doesn't have exactly one visible <h1> in the server HTML

`seo/h1-count` · severity **error** · category SEO · detected by `void seo` and `void audit`

## Why it matters

Google uses the first visible h1 as a title-link source and Bing expects the h1 to reflect the title; agents and Markdown converters use it as the document title.

## How to fix it

Render one <h1> per page on the server, describing the page topic. Use h2–h6 for sections and don't put the logo in an h1.

## References

- https://developers.google.com/search/docs/appearance/title-link
- https://about.ads.microsoft.com/en/blog/post/october-2025/optimizing-your-content-for-inclusion-in-ai-search-answers

## More seo rules

`void seo` reports 60 rules in this category. What search engines need from the raw response: status codes, titles and descriptions in <head>, self-referencing canonicals, one h1, crawlable links, Open Graph, icons, robots.txt and a sitemap with real dates.

- `canonical-broken` Canonical points to a URL that returns 4xx/5xx — [seo/canonical-broken](https://void-design.vercel.app/rules/seo/canonical-broken)
- `canonical-conflict` Canonical target redirects, is noindex, or canonicalises elsewhere — [seo/canonical-conflict](https://void-design.vercel.app/rules/seo/canonical-conflict)
- `canonical-not-self` Canonical points to a different URL — [seo/canonical-not-self](https://void-design.vercel.app/rules/seo/canonical-not-self)
- `head-js-mutation` JavaScript changes canonical, robots, title or description after load — [seo/head-js-mutation](https://void-design.vercel.app/rules/seo/head-js-mutation)
- `h1-title-mismatch` <h1> and <title> share little wording — [seo/h1-title-mismatch](https://void-design.vercel.app/rules/seo/h1-title-mismatch)
- `heading-skip` Heading levels skip (h2 → h4) or headings are empty — [seo/heading-skip](https://void-design.vercel.app/rules/seo/heading-skip)
- `img-alt-missing` <img> without an alt attribute — [seo/img-alt-missing](https://void-design.vercel.app/rules/seo/img-alt-missing)
- `img-alt-quality` Alt text is a filename, a generic word, or overly long — [seo/img-alt-quality](https://void-design.vercel.app/rules/seo/img-alt-quality)

Detected by `void seo` and `void audit`. Explain it in a terminal: `void rules seo/h1-count`
