# Blog SEO Title Standards

**Last Updated:** 2026-03-17

Canonical standards for blog post SEO titles. All titles must follow this format for consistency and to maximize keyword space in SERPs.

## Format

**Standard:** `{Primary Keyword + modifiers}` (H1) and `{Primary Keyword + modifiers} - Ordio` (title tag)

- **H1:** No brand suffix – matches content focus
- **Title tag:** Includes ` - Ordio` suffix to differentiate from H1 (avoids duplicate H1/title SEO flags)
- No `Lexikon` or `Ratgeber` unless semantically part of the topic
- **50 characters for keyword phrase** – Google often truncates displayed titles at ~50–55 chars and may omit the brand suffix. We optimize for keyword visibility; " - Ordio" is added in HTML but not counted toward the displayed limit.

## Do's and Don'ts

### Do

- Put primary keyword near the beginning
- Use descriptive modifiers (e.g. "Formular & Fristen", "Definition & Berechnung")
- **Lexikon:** Use colon (`: `) as separator between term and descriptor (e.g. `Arbeitsorganisation: Definition, Ziele & Methoden`)
- Use en-dash (–) or hyphen (-) within modifiers for readability
- Keep titles unique per page
- Use natural, compelling language

### Don't

- Use `| Lexikon` or `| Ratgeber` (wastes ~10–15 chars)
- Use pipe (`|`) as separator
- Exceed 50 characters for keyword phrase (Google truncates displayed titles at ~50–55 chars)
- Keyword stuff
- Use generic titles ("Blog Post", "Artikel")
- **Lexikon:** Use en-dash (` – `) as term separator (use colon instead)
- **Lexikon:** Use only "Definition" or "Überblick" as descriptor (add 1–2 modifiers)
- **Lexikon:** Incomplete legal refs like "(§ 77" or "(§ 106" (use full form e.g. "(§ 77 BetrVG)")

## Lexikon Title Format

**Standard:** `[term]: [descriptor]` or `[term] (abbrev): [descriptor]` or `[term] 2026: [descriptor]`

- **Separator:** Colon + space (`: `), not en-dash (` – `)
- **Descriptor:** Specific, not generic-only. Avoid "Definition" or "Überblick" alone – add modifiers (e.g. "Definition, Form & Wirkung", "Definition, Arten & Beispiele")
- **Legal refs:** Complete format `(§ XX Gesetz)` e.g. `(§ 77 BetrVG)`, `(§ 106 GewO)`
- **Script:** `normalize-lexikon-titles.php` for batch separator/§ fixes; outputs suggestions for generic titles

## Examples

**Good:**

- `Arbeitsbescheinigung: Formular & Fristen`
- `Zeiterfassung per App: So funktioniert digitale Zeiterfassung`
- `Lohnabrechnung erstellen: Schritt für Schritt erklärt`

**Bad:**

- `Arbeitsbescheinigung: Formular & Fristen | Lexikon` (has category)
- `Zeiterfassung` (too short, no suffix)
- `Zeiterfassung | Ratgeber | Ordio | Blog` (pipe, multiple segments)

## Character Limit and Truncation

- **Keyword phrase:** Max 50 characters (truncate at word boundary)
- **Full HTML title:** Keyword phrase + ` - Ordio` (8 chars) = up to 58 chars total
- **Rationale:** Google displays ~50–55 chars in SERPs and often omits the brand suffix. We optimize the keyword phrase to fit the displayed area; the brand suffix is added for HTML/OG but not counted toward truncation.
- **Script:** `optimize_blog_title()` in `v2/config/blog-meta-generator.php` applies truncation

## Scripts

| Script | Purpose |
|--------|---------|
| `audit-seo-titles.py` | Extract all titles, analyze patterns, generate report |
| `normalize-seo-titles.php` | Batch normalize titles in seo-meta.json |
| `normalize-lexikon-titles.php` | Lexikon: en-dash→colon, fix § refs, suggest generic-title improvements |
| `sync-meta-to-posts.php` | Sync seo-meta.json to post JSON files |
| `validate-seo-meta.php` | Validate meta tags for all page types |
| `analyze-seo-meta.php` | Analyze SEO meta quality, generate report |

## Data Sources

- **Primary:** `v2/data/blog/seo-meta.json`
- **Fallback:** Post JSON `meta.title`
- **Auto:** `optimize_blog_title()` when neither source provides a title

## H1 Alignment

**H1 matches the title tag content** (without the brand suffix) for SEO consistency.

- **H1:** `get_blog_post_h1_title($post)` – no brand suffix (e.g. "Human Resources: Definition, Aufgaben & Abgrenzung")
- **Title tag:** Same phrase + ` - Ordio` (e.g. "Human Resources: Definition, Aufgaben & Abgrenzung - Ordio")
- **Rationale:** Differentiating title from H1 avoids duplicate H1/title SEO flags from crawlers while keeping brand recognition in SERPs

**Best practice for new posts:**

- Set `meta.title` to the full SEO title (e.g. "Primary Keyword: Modifiers") – no brand suffix
- The H1 uses `meta.title` as-is – no separate H1 field needed
- **Cards and summaries** use `meta.title` when available – via `load_blog_post_summary()` and `get_blog_post_h1_title()` in ResourceCard/RelatedPosts
- Keep `post.title` in sync with `meta.title` (without brand suffix). Run `sync-meta-to-posts.php` after updating `seo-meta.json`

## See Also

- [SEO Best Practices 2026](guides/SEO_BEST_PRACTICES_2026.md)
- [AEO/GEO Best Practices 2026](AEO_GEO_BEST_PRACTICES_2026.md)
- [SEO/GEO/AEO Checklist](SEO_GEO_AEO_CHECKLIST.md)
