# Blog Heading Best Practices

**Last Updated:** 2026-02-14

Guidelines for blog post headings (H1–H3) to optimize SEO, featured snippets, and user experience. Applies to Lexikon, Ratgeber, and Inside Ordio posts.

## Overview

- **H1:** Rendered in PostHeader from meta title (one per page)
- **H2:** Main content sections (8–12 per post)
- **H3:** Sub-sections under H2s where needed
- **TOC:** Auto-generated from H2/H3; enables jump links and scroll spy

## SEO Best Practices

### H1 (Page Title)

- **Location:** PostHeader component (not in content HTML)
- **Source:** `seo-meta.json` title or `post.meta.title` (without " - Ordio")
- **Alignment:** H1 must match title tag for SEO consistency
- **Rule:** One H1 per page; never add H1 in `content.html`

### H2 (Main Sections)

- **Count:** 8–12 H2s for Lexikon/Ratgeber (per CONTENT_OUTLINE requirements)
- **Style:** Prefer question-style for PAA/featured snippets: "Was ist X?", "Welche Arten...?", "Wie wird X versteuert?"
- **Keywords:** Include primary keyword in first H2; vary in subsequent H2s
- **Hierarchy:** H2 → H3 (no skipping levels)

### H3 (Sub-sections)

- **Use when:** 3+ distinct subtopics under an H2; each item 2+ sentences
- **Otherwise:** Use bullet list for brief items (1–2 sentences each)
- **Examples:** "Ziel- und leistungsabhängige Boni" | "Treue- und Sonderboni"; "Vorteile" | "Nachteile"

### Table of Contents (TOC)

- **Auto-generated** from H2/H3 in content
- **IDs:** Added automatically via `add_ids_to_headings()` (slugified from heading text)
- **SEO:** Google may use TOC for jump links in SERPs
- **UX:** Enables quick navigation; scroll spy highlights active section

## User-Friendliness

### Clarity

- Headings should accurately describe section content
- Introductory paragraph before first H2 sets expectations
- Avoid vague labels ("Weitere Informationen", "Sonstiges")

### Scannability

- TOC allows users to jump to relevant sections
- Clear H2 labels reduce cognitive load
- Mix question-style (PAA) and descriptive H2s as appropriate

### Accessibility

- Semantic hierarchy (H2 → H3) supports screen readers
- TOC links use `aria-current="location"` when active
- Heading IDs enable deep linking (`#section-slug`)

## Anti-Patterns

| Avoid | Why |
|-------|-----|
| H1 in content | H1 is in PostHeader; duplicate H1 hurts SEO |
| H4+ in content | TOC uses H2/H3 only; keep structure simple |
| FAQ as H2 in content | FAQs belong in `faqs` array, rendered separately |
| Generic H2s | "Weitere Infos", "Sonstiges" – use descriptive labels |
| Skipping H3 | Use H2 → H3; don't jump H2 → H4 |

## Validation

- **Content flow:** `analyze-content-flow.php` checks heading hierarchy
- **Outline:** CONTENT_OUTLINE.md must list H2s and planned H3s
- **TOC:** Renders when 2+ headings; groups H3s under H2s when >15 items

## References

- [CONTENT_FLOW_GUIDELINES.md](CONTENT_FLOW_GUIDELINES.md) – Flow, definition placement, FAQ separation
- [CONTENT_DEPTH_GUIDELINES.md](CONTENT_DEPTH_GUIDELINES.md) – Section depth, H3 vs list
- [CONTENT_CREATION_WORKFLOW_2026.md](CONTENT_CREATION_WORKFLOW_2026.md) – Outline-first drafting
