# Product Updates SEO Best Practices

**Last Updated:** 2025-11-20

## Overview

This document outlines SEO best practices for the Product Updates system, including title tag patterns, meta description optimization, and AEO/GEO considerations.

## Title Tag Best Practices

### Format Standard

**Always use "-" (hyphen) separator, NOT "|" (pipe)**

- ✅ **Correct:** "Ordio Produkt-Updates - Neueste Features & Verbesserungen"
- ❌ **Wrong:** "Ordio Produkt-Updates | Neueste Features & Verbesserungen"

### Title Length

- **Recommended:** 50-60 characters
- **Maximum:** 60 characters (to prevent truncation in search results)
- Place primary keywords near the beginning

### Page-Specific Title Patterns

#### Main Collection Page (`/produkt-updates`)

**Pattern:**

```
"Ordio Produkt-Updates - Neueste Features & Verbesserungen - Produkt-Updates"
```

**Key Requirements:**

- Must NOT depend on `current_month` to avoid duplicate titles with month pages
- Should reflect that it's a collection/overview page
- Use settings.main_page_title if available, otherwise use default fallback
- Default fallback: "Ordio Produkt-Updates - Neueste Features & Verbesserungen"

**Example:**

```php
$page_title_plain = !empty(trim($main_page_title_raw))
    ? strip_tags(str_replace(['*', '**'], '', $main_page_title_raw))
    : "Ordio Produkt-Updates - Neueste Features & Verbesserungen";
$page_title = htmlspecialchars($page_title_plain . " - Produkt-Updates", ENT_QUOTES, 'UTF-8');
```

#### Month Page (`/produkt-updates/[month-slug]`)

**Pattern:**

```
"Ordio Updates [Month Name] - Produkt-Updates"
```

**Example:**

- "Ordio Updates November 2025 - Produkt-Updates"
- "Ordio Updates Oktober 2025 - Produkt-Updates"

**Key Requirements:**

- Include month name and year
- Use "-" separator
- Unique per month

**Example:**

```php
$page_title = "Ordio Updates " . $month_data['month'] . " - Produkt-Updates";
```

#### Individual Feature Page (`/produkt-updates/[feature-slug]`)

**Pattern:**

```
"[Feature Title] - Ordio Produkt-Updates"
```

**Example:**

- "Meet Ordio Novi - Ordio Produkt-Updates"
- "Payroll Plus: Smartes Payroll Accounting - Ordio Produkt-Updates"

**Key Requirements:**

- Feature title first, then brand
- Use "-" separator
- Unique per feature

**Example:**

```php
$page_title = htmlspecialchars($feature_data['title']) . " - Ordio Produkt-Updates";
```

## Meta Description Best Practices

### Format Standard

- **Length:** 155-160 characters (optimal for search result display)
- **Tone:** Du tone (informal "du" pronouns)
- **Content:** Include keywords, user benefits, call-to-action
- **Uniqueness:** Each page must have a unique meta description

### Page-Specific Meta Description Patterns

#### Main Collection Page

**Default:**

```
"Entdecke die neuesten Features und Verbesserungen von Ordio. Alle Updates für deine Schichtplanung, Zeiterfassung und Personalmanagement auf einen Blick."
```

**Key Elements:**

- Keywords: "Features", "Verbesserungen", "Schichtplanung", "Zeiterfassung"
- User benefit: "auf einen Blick"
- Du tone: "deine"
- Length: ~160 characters

#### Month Page

**Pattern:**

```
"[month intro_text] Entdecke neue Features und Verbesserungen für deine Schichtplanung und Zeiterfassung mit Ordio."
```

**Example:**

```
"Dieser Monat: Ordio Updates im November 2025 Entdecke neue Features und Verbesserungen für deine Schichtplanung und Zeiterfassung mit Ordio."
```

**Key Elements:**

- Month-specific intro text
- Keywords: "Features", "Verbesserungen", "Schichtplanung", "Zeiterfassung"
- Du tone: "deine"
- Brand mention: "mit Ordio"
- Length: ~155-160 characters

## Schema.org Markup

### Collection Page (Main Page)

**Type:** `CollectionPage`

**Key Properties:**

- `name`: Should match page title
- `description`: Should match meta description
- `numberOfItems`: Count of months
- `mainEntity`: ItemList of BlogPosting items (month pages)

**Example:**

```json
{
  "@type": "CollectionPage",
  "name": "Ordio Produkt-Updates - Neueste Features & Verbesserungen - Produkt-Updates",
  "description": "Entdecke die neuesten Features und Verbesserungen von Ordio...",
  "numberOfItems": 2
}
```

### Month Page

**Type:** `BlogPosting`

**Key Properties:**

- `headline`: Should match page title (with "-" separator)
- `name`: Should match page title
- `description`: Should match meta description
- `datePublished`: Month's published_date
- `dateModified`: last_updated timestamp

**Example:**

```json
{
  "@type": "BlogPosting",
  "headline": "Ordio Updates November 2025 - Produkt-Updates",
  "name": "Ordio Updates November 2025 - Produkt-Updates",
  "description": "Dieser Monat: Ordio Updates im November 2025..."
}
```

## Open Graph & Twitter Card Tags

### Requirements

- **og:title** and **twitter:title**: Must match page title exactly (with "-" separator)
- **og:description** and **twitter:description**: Must match meta description exactly
- **og:type**: "website" for main page, "article" for month pages
- **og:url**: Absolute canonical URL

### Example (Main Page)

```html
<meta property="og:type" content="website" />
<meta
  property="og:title"
  content="Ordio Produkt-Updates - Neueste Features & Verbesserungen - Produkt-Updates"
/>
<meta
  property="og:description"
  content="Entdecke die neuesten Features und Verbesserungen von Ordio..."
/>
<meta property="og:url" content="https://www.ordio.com/produkt-updates" />
```

### Example (Month Page)

```html
<meta property="og:type" content="article" />
<meta
  property="og:title"
  content="Ordio Updates November 2025 - Produkt-Updates"
/>
<meta
  property="og:description"
  content="Dieser Monat: Ordio Updates im November 2025..."
/>
<meta
  property="og:url"
  content="https://www.ordio.com/produkt-updates/november-2025"
/>
```

## Canonical URLs

### Requirements

- **Main page:** `https://www.ordio.com/produkt-updates`
- **Month page:** `https://www.ordio.com/produkt-updates/[month-slug]`
- **Feature page:** `https://www.ordio.com/produkt-updates/[feature-slug]`
- Always use absolute URLs
- One canonical per page (no duplicates)

## AEO (Answer Engine Optimization) Considerations

### Structured Data

- Use proper Schema.org types (CollectionPage, BlogPosting, Article)
- Include datePublished and dateModified for freshness signals
- Add author and publisher information
- Use ItemList for collection pages

### Content Structure

- Clear H1 tags matching page purpose
- Descriptive meta descriptions with keywords
- Internal linking between related pages
- Breadcrumb navigation

## GEO (Generative Engine Optimization) Considerations

### Title Optimization

- Include primary keywords early in title
- Use natural language (not keyword stuffing)
- Include brand name for recognition
- Make titles descriptive and informative

### Meta Description Optimization

- Answer user intent (what will they find?)
- Include relevant keywords naturally
- Provide clear value proposition
- Use du tone for German audience

### Content Freshness

- Update last_updated timestamp regularly
- Use datePublished for month pages
- Include dateModified in schema markup

## Common Pitfalls to Avoid

### ❌ Duplicate Titles

**Problem:**

- Main page and month page have identical titles
- Causes SEO issues and confusion

**Solution:**

- Main page title must NOT depend on current_month
- Use unique collection-focused title for main page

### ❌ Using "|" Instead of "-"

**Problem:**

- Inconsistent separator usage
- Less SEO-friendly

**Solution:**

- Always use "-" (hyphen) separator
- Standardize across all pages

### ❌ Generic Meta Descriptions

**Problem:**

- Same description for all pages
- Missing keywords and user benefits

**Solution:**

- Create unique descriptions per page
- Include relevant keywords
- Focus on user benefits

### ❌ Missing Schema Markup

**Problem:**

- No structured data
- Missing rich snippet opportunities

**Solution:**

- Use CollectionPage for main page
- Use BlogPosting for month pages
- Use Article for feature pages
- Include all required properties

## Testing & Validation

### Automated Testing

Run the test script to validate:

```bash
python3 scripts/test-produkt-updates-seo.py
```

**Checks:**

- Separator usage ("-" vs "|")
- Duplicate title detection
- JSON settings validation

### Manual Testing

1. **Browser Testing:**

   - Check page titles in browser tab
   - Verify meta tags in DevTools
   - Test canonical URLs

2. **Schema Validation:**

   - Use Google Rich Results Test
   - Validate JSON-LD structure
   - Check for errors

3. **SEO Tools:**
   - Google Search Console
   - Screaming Frog SEO Spider
   - Ahrefs / SEMrush

## References

- [Google Search Central - Title Tags](https://developers.google.com/search/docs/appearance/title-link)
- [Schema.org - CollectionPage](https://schema.org/CollectionPage)
- [Schema.org - BlogPosting](https://schema.org/BlogPosting)
- [Open Graph Protocol](https://ogp.me/)
- [Twitter Cards](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)
