---
title: "Missing <main>, <nav> or <article> landmarks (geo/landmarks)"
description: "geo/landmarks: Markdown converters (Cloudflare Markdown for Agents, reader modes), agents and screen readers use landmarks to separate main content from…"
canonical: https://void-design.vercel.app/rules/geo/landmarks
lastModified: 2026-09-16
---

# Missing <main>, <nav> or <article> landmarks

`geo/landmarks` · severity **warn** · category AI search · detected by `void geo` and `void audit`

## Why it matters

Markdown converters (Cloudflare Markdown for Agents, reader modes), agents and screen readers use landmarks to separate main content from navigation and boilerplate.

## How to fix it

Wrap page content in one <main>, primary navigation in <nav aria-label>, and article bodies in <article>.

## Example

```tsx
<body>
  <header><nav aria-label="Primary">…</nav></header>
  <main id="main"><article><h1>{post.title}</h1>…</article></main>
  <footer>…</footer>
</body>
```

## References

- https://web.dev/articles/ai-agent-site-ux
- https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/

## More ai search rules

`void geo` reports 41 rules in this category. Generative-engine optimisation: whether AI crawlers that don't run JavaScript see the same content, valid and visible JSON-LD, an explicit AI robots policy, llms.txt, Markdown mirrors and answer-first writing.

- `jsonld-not-visible` Structured data values don't appear on the page — [geo/jsonld-not-visible](https://void-design.vercel.app/rules/geo/jsonld-not-visible)
- `entity-name-mismatch` Brand name differs across og:site_name, JSON-LD and title — [geo/entity-name-mismatch](https://void-design.vercel.app/rules/geo/entity-name-mismatch)
- `article-date-missing` Article has no machine-readable or visible date — [geo/article-date-missing](https://void-design.vercel.app/rules/geo/article-date-missing)
- `article-author-missing` Article author missing or malformed — [geo/article-author-missing](https://void-design.vercel.app/rules/geo/article-author-missing)
- `thin-content` Article main content under 150 words — [geo/thin-content](https://void-design.vercel.app/rules/geo/thin-content)
- `answer-first` Opening paragraph doesn't state the answer concisely — [geo/answer-first](https://void-design.vercel.app/rules/geo/answer-first)
- `no-citations` Long content with no outbound links to sources — [geo/no-citations](https://void-design.vercel.app/rules/geo/no-citations)
- `no-statistics` Long content with no quantified facts — [geo/no-statistics](https://void-design.vercel.app/rules/geo/no-statistics)

Detected by `void geo` and `void audit`. Explain it in a terminal: `void rules geo/landmarks`
