# Blog SEO/AEO/GEO Optimization Guide

**Last Updated:** 2026-01-15

Comprehensive guide to blog SEO, AEO (AI Engine Optimization), and GEO (Generative Engine Optimization) implementation, including meta tags, schema markup, sitemap strategy, and validation procedures.

## Overview

This guide documents the complete SEO/AEO/GEO optimization implementation for the Ordio blog, including:

- **Meta Tag Optimization**: Title and description optimization with smart truncation
- **AEO/GEO Meta Tags**: AI-friendly meta tags for better AI engine visibility
- **Enhanced Schema Markup**: JSON-LD schema with speakable, articleBody, and enhanced properties
- **Sitemap Strategy**: Separate blog sitemap with proper priorities and changefreq
- **LLMS.txt Integration**: Blog content in AI crawler files

## Meta Tag Optimization

### Title Tags

**Requirements:**

- All titles must end with " - Ordio" (not "| Ordio Blog" or "| Ordio")
- Optimal length: 50-60 characters
- Smart truncation at word boundaries
- Preserve " - Ordio" suffix during truncation

**Implementation:**

```php
// Function: optimize_blog_title() in blog-meta-generator.php
$title = optimize_blog_title($raw_title, 60);
```

**Page-Specific Patterns:**

- **Index Page**: "Schichtplanung & HR-Management: Praktische Tipps & Ratgeber - Ordio"
- **Category Pages**:
  - Lexikon: "HR-Lexikon: Arbeitsrecht & Personalwesen einfach erklärt - Ordio"
  - Ratgeber: "HR-Ratgeber: Praktische Tipps für Schichtplanung & Personalverwaltung - Ordio"
  - Inside Ordio: "Inside Ordio: Produkt-Updates & Neuigkeiten aus dem Team - Ordio"
- **Post Pages**: "{Post Title} | {Category} - Ordio"

### Meta Descriptions

**Requirements:**

- Optimal length: 150-160 characters
- Benefit-driven and user-friendly
- Include call-to-action when appropriate
- Smart truncation at sentence boundaries

**Implementation:**

```php
// Function: optimize_blog_description() in blog-meta-generator.php
$description = optimize_blog_description($raw_description, 150, 160);
```

**Page-Specific Patterns:**

- **Index Page**: "Entdecke praktische Tipps zur Schichtplanung, Zeiterfassung und HR-Management. Von Arbeitsrecht bis Personalverwaltung: Alles was du wissen musst. Jetzt entdecken!"
- **Category Pages**: Category-specific optimized descriptions (see categories.json)
- **Post Pages**: Enhanced excerpts with CTAs ("Jetzt lesen!" or "Mehr erfahren!")

## AEO/GEO Meta Tags

### AI-Ready Tag

All blog pages include `AI-ready: true` to signal AI engines that content is optimized for AI consumption.

### Citation Format

Post pages include structured citation format for AI attribution:

```html
<meta name="citation-format" content="Laut Ordio Blog-Artikel \"{Title}\"
({Category}, Stand {Year}). Quelle: {URL}">
```

### Content-Type

Specifies the type of content for AI engines:

- `blog-post`: Individual blog posts
- `blog-category`: Category archive pages
- `blog-index`: Blog index page

### Content-Purpose

Describes the purpose of the content with keywords:

- **Index**: "Praktische Tipps und Ratgeber zu Schichtplanung, Zeiterfassung und HR-Management"
- **Category**: Category-specific purpose statements
- **Post**: "Umfassender Artikel zu {Title} mit praktischen Tipps und rechtlichen Grundlagen"

### Target-Audience

Specifies the target audience segments:

- **Index/Categories**: "Gastronomie, Einzelhandel, Gesundheitswesen, Handwerk, KMU"
- **Posts**: Similar audience segments based on content

### Primary-Keywords

Comma-separated primary keywords for AI engines:

- **Index**: "Schichtplanung, Zeiterfassung, HR-Management, Personalverwaltung, Arbeitsrecht"
- **Categories**: Category-specific keywords
- **Posts**: Keywords from topics array

### Geographic-Coverage

All pages include: `geographic-coverage: Deutschland, DACH-Region`

## Enhanced Open Graph Tags

### Standard OG Tags

All pages include:

- `og:type`: article (posts) or website (index/categories)
- `og:url`: Canonical URL
- `og:title`: Optimized title
- `og:description`: Optimized description
- `og:image`: Featured image or default
- `og:site_name`: Ordio
- `og:locale`: de_DE

### Enhanced OG Tags

Additional tags for better social media previews:

- `og:image:width`: 1200
- `og:image:height`: 630
- `og:image:type`: image/webp
- `og:image:secure_url`: HTTPS URL for image

## Schema Markup Enhancements

### Article Schema

**Enhanced Properties:**

- `speakable`: SpeakableSpecification for voice search
  ```json
  {
    "@type": "SpeakableSpecification",
    "cssSelector": ["article p:first-of-type"],
    "xpath": ["/html/body/article/p[1]"]
  }
  ```
- `articleBody`: Full text content (plain text)
- `keywords`: Enhanced with semantic keywords
- `inLanguage`: Explicitly set to "de-DE"

### CollectionPage Schema

**Enhanced Properties:**

- `numberOfItems`: Total number of posts in collection
- `pagination`: Pagination schema for multi-page archives

### BreadcrumbList Schema

All pages include proper breadcrumb schema matching visible breadcrumbs.

## Robots Meta Tags

### Current Configuration

- **Index Page**: `index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1`
- **Category Pages**: `index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1` (changed from `noindex, follow`)
- **Post Pages**: `index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1`

**Note:** Category pages changed from `noindex, follow` to `index, follow` because they contain valuable content.

## Sitemap Strategy

### Separate Blog Sitemap

**File:** `v2/pages/sitemap-blog.xml.php`

**URL:** `https://www.ordio.com/sitemap-blog.xml`

**Contents:**

- Blog index page (priority: 0.9, changefreq: weekly)
- Category pages (priority: 0.8, changefreq: weekly)
- All blog posts (priority: 0.7, changefreq: monthly)

**Lastmod:** Uses `modified_date` if available, otherwise `publication_date`

### robots.txt Integration

Added to `robots.txt`:

```
Sitemap: https://www.ordio.com/sitemap-blog.xml
```

### sitemap.txt Integration

Added blog URLs to `html/sitemap.txt`:

- Blog index: `https://www.ordio.com/insights/`
- Category pages: `https://www.ordio.com/insights/{category}/`
- All blog posts: `https://www.ordio.com/insights/{category}/{slug}/`

## LLMS.txt Integration

### llms.txt

Added blog section with:

- Blog index overview
- Category pages (Lexikon, Ratgeber, Inside Ordio)
- Top 10-15 posts following ACAO format

### llms-full.txt

Added complete blog section with:

- Blog index overview
- All category pages
- All blog posts (complete archive)

**Format:** ACAO (Action, Context, Advantage, Outcome) pattern

## Validation Scripts

### SEO Meta Validation

**Script:** `v2/scripts/blog/validate-seo-meta.php`

**Checks:**

- Title lengths (50-60 chars)
- Description lengths (150-160 chars)
- All titles end with " - Ordio"

**Usage:**

```bash
php v2/scripts/blog/validate-seo-meta.php
```

### Schema Validation

**Script:** `v2/scripts/blog/validate-schema.php`

**Checks:**

- JSON-LD syntax validity
- Required schema fields present
- Schema structure correctness

**Usage:**

```bash
php v2/scripts/blog/validate-schema.php
```

### Sitemap Validation

**Script:** `v2/scripts/blog/validate-sitemap.php`

**Checks:**

- XML syntax validity
- URL format correctness
- lastmod date format (YYYY-MM-DD)
- changefreq values
- priority values (0.0-1.0)
- Expected URLs present

**Usage:**

```bash
php v2/scripts/blog/validate-sitemap.php
```

### Meta Tags Testing

**Script:** `v2/scripts/blog/test-meta-tags.php`

**Checks:**

- Required OG tags present
- Enhanced OG tags present
- AEO/GEO tags present
- Twitter Card tags present

**Usage:**

```bash
php v2/scripts/blog/test-meta-tags.php
```

## Manual Testing Checklist

### Google Rich Results Test

1. Test index page: https://search.google.com/test/rich-results?url=https://www.ordio.com/insights/
2. Test category page: https://search.google.com/test/rich-results?url=https://www.ordio.com/insights/lexikon/
3. Test post page: Select a sample post URL

**Verify:**

- Article schema validates
- BreadcrumbList schema validates
- All required fields present
- URLs are absolute and correct
- Dates are ISO 8601 format

### Social Media Previews

**Facebook:**

- URL: https://developers.facebook.com/tools/debug/
- Test: Index, category, and post pages
- Verify: OG tags render correctly, images display

**Twitter:**

- URL: https://cards-dev.twitter.com/validator
- Test: Index, category, and post pages
- Verify: Twitter Card tags render correctly

**LinkedIn:**

- URL: https://www.linkedin.com/post-inspector/
- Test: Index, category, and post pages
- Verify: OG tags render correctly

### Sitemap Submission

1. **Google Search Console:**

   - Submit: `https://www.ordio.com/sitemap-blog.xml`
   - Monitor indexing status
   - Check for errors

2. **Verify Accessibility:**

   ```bash
   curl -I https://www.ordio.com/sitemap-blog.xml
   ```

3. **Validate XML:**
   - Use online XML validator
   - Check all URLs are accessible
   - Verify lastmod dates are correct

## Best Practices

### Title Optimization

- ✅ Always end with " - Ordio"
- ✅ Keep within 50-60 characters
- ✅ Include primary keyword at beginning
- ✅ Make titles unique and descriptive
- ❌ Don't use "| Ordio Blog" or "| Ordio"
- ❌ Don't exceed 60 characters

### Description Optimization

- ✅ Keep within 150-160 characters
- ✅ Include primary keyword naturally
- ✅ Be benefit-driven and user-friendly
- ✅ Add call-to-action when appropriate
- ❌ Don't exceed 160 characters
- ❌ Don't use generic descriptions

### AEO/GEO Optimization

- ✅ Include all required AEO/GEO tags
- ✅ Use structured citation format for posts
- ✅ Specify content-type correctly
- ✅ Include target-audience segments
- ✅ Add primary keywords
- ❌ Don't skip AI-ready tag
- ❌ Don't omit citation-format for posts

### Schema Markup

- ✅ Include speakable property for posts
- ✅ Add articleBody when available
- ✅ Enhance keywords with semantic terms
- ✅ Include numberOfItems for collections
- ✅ Maintain proper @graph structure
- ❌ Don't skip required fields
- ❌ Don't use invalid date formats

### Sitemap Management

- ✅ Submit to Google Search Console
- ✅ Keep sitemap updated automatically
- ✅ Use proper priorities and changefreq
- ✅ Include all blog URLs
- ✅ Format dates as YYYY-MM-DD
- ❌ Don't forget to submit after updates
- ❌ Don't use invalid XML syntax

## Files Modified

### Core Files

- `v2/config/blog-meta-generator.php` - Meta tag generation with AEO/GEO tags
- `v2/config/blog-schema-generator.php` - Enhanced schema markup
- `v2/pages/blog/index.php` - Index page meta overrides
- `v2/pages/blog/category.php` - Category page meta (uses generator defaults)
- `v2/pages/blog/post.php` - Post page meta (uses generator defaults)
- `v2/data/blog/categories.json` - Category meta data

### Sitemap Files

- `v2/pages/sitemap-blog.xml.php` - Blog sitemap generator
- `robots.txt` - Sitemap reference
- `html/sitemap.txt` - Blog URLs
- `html/llms.txt` - Blog section
- `html/llms-full.txt` - Complete blog section

### Validation Scripts

- `v2/scripts/blog/validate-seo-meta.php` - SEO meta validation
- `v2/scripts/blog/validate-schema.php` - Schema validation
- `v2/scripts/blog/validate-sitemap.php` - Sitemap validation
- `v2/scripts/blog/test-meta-tags.php` - Meta tags testing

## Related Documentation

- [SEO Analysis](SEO_ANALYSIS.md) - Previous SEO analysis
- [SEO Gaps](SEO_GAPS.md) - SEO gap analysis
- [Blog Template Patterns](TEMPLATE_PATTERNS_ANALYSIS.md) - Template patterns
- [Testing Checklist](TESTING_CHECKLIST.md) - Testing procedures

## Maintenance

### Regular Tasks

1. **Monthly:**

   - Run validation scripts
   - Check Google Search Console for errors
   - Review sitemap indexing status
   - Update llms.txt dates

2. **Quarterly:**

   - Review meta tag performance
   - Analyze AEO/GEO tag effectiveness
   - Update schema markup if needed
   - Review sitemap priorities

3. **When Adding New Posts:**
   - Ensure meta tags are generated correctly
   - Verify schema markup includes all properties
   - Check sitemap includes new post
   - Update llms.txt if needed

## Support

For questions or issues with SEO/AEO/GEO optimization:

1. Run validation scripts to identify issues
2. Check Google Search Console for errors
3. Review this guide for best practices
4. Test with Google Rich Results Test
5. Verify social media previews
