---
title: "More than one `<h1>` in a route's page + layouts (lint/multiple-h1)"
description: "lint/multiple-h1: Multiple h1 elements blur the page topic for search engines and make heading navigation confusing for screen-reader users."
canonical: https://void-design.vercel.app/rules/lint/multiple-h1
lastModified: 2026-09-16
---

# More than one `<h1>` in a route's page + layouts

`lint/multiple-h1` · severity **warn** · category Lint · detected by `void lint` and `void audit`

## Why it matters

Multiple h1 elements blur the page topic for search engines and make heading navigation confusing for screen-reader users.

## How to fix it

Keep exactly one `<h1>` per route (usually in the page) and use `<h2>`+ for sections; logos in layouts shouldn't be h1.

## Example

```tsx
<h1>Pricing</h1>
<section><h2>Enterprise</h2></section>
```

## More lint rules

`void lint` reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.

- `dynamic-metadata-streaming` Request-time `generateMetadata` without `htmlLimitedBots` — [lint/dynamic-metadata-streaming](https://void-design.vercel.app/rules/lint/dynamic-metadata-streaming)
- `missing-lang` Root `<html>` without `lang` — [lint/missing-lang](https://void-design.vercel.app/rules/lint/missing-lang)
- `jsonld-missing` No JSON-LD structured data — [lint/jsonld-missing](https://void-design.vercel.app/rules/lint/jsonld-missing)
- `sitemap-lastmod-now` Sitemap uses `new Date()` for `lastModified` — [lint/sitemap-lastmod-now](https://void-design.vercel.app/rules/lint/sitemap-lastmod-now)
- `jsonld-deprecated-type` JSON-LD type that no longer produces rich results — [lint/jsonld-deprecated-type](https://void-design.vercel.app/rules/lint/jsonld-deprecated-type)
- `route-js-budget` Route first-load JS over budget (from `.next` build output) — [lint/route-js-budget](https://void-design.vercel.app/rules/lint/route-js-budget)
- `animate-undefined` `animate-*` class with no matching `--animate-*` theme variable or `@keyframes` — [lint/animate-undefined](https://void-design.vercel.app/rules/lint/animate-undefined)
- `random-in-render` `Math.random()` / `Date.now()` / `new Date()` evaluated in a component render body — [lint/random-in-render](https://void-design.vercel.app/rules/lint/random-in-render)

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