# SEO Landing Pages Implementation

## Übersicht

Dieses System implementiert SEO-Landing-Pages für die Casino/Bonus-Review-Website mit einer konfigurationsgetriebenen Architektur. Alle Seiten werden über eine zentrale Konfigurationsdatei verwaltet.

## Architektur

### 1. Konfigurationsdatei: `config/landing_pages.php`

Alle Landing-Page-Definitionen werden in dieser Datei gespeichert. Jede Seite definiert:
- `title`: Seitentitel
- `h1`: H1-Überschrift
- `meta_title`: Meta-Title für SEO
- `meta_description`: Meta-Description für SEO
- `intro`: Optionaler Einleitungstext
- `filters`: Filterkriterien für Posts
- `order_by`: Sortierreihenfolge

### 2. Service: `app/Services/LandingPageQueryService.php`

Dieser Service:
- Baut die Datenbankabfragen basierend auf den Filterdefinitionen auf
- Wendet Filter auf JSON-Spalten an (casino_type, bonus_types, payment_methods, etc.)
- Handhabt die Sortierung (rating_desc, newest, rtp_desc, default)
- Ermittelt die aktive Sprache aus Cookies

### 3. Controller: `app/Http/Controllers/LandingPageController.php`

Ein einziger Controller für alle Landing-Pages:
- Extrahiert die Sektion aus der URL
- Lädt die Seiten-Definition aus der Konfiguration
- Ruft den Query-Service auf
- Rendert die View

### 4. View: `resources/views/landing-pages/show.blade.php`

Eine wiederverwendbare Blade-View für alle Landing-Pages:
- Zeigt H1, Intro und aktive Filter
- Rendert Post-Liste mit Pagination
- Verwendet die bestehende `post-item` Komponente

### 5. Routen: `routes/web.php`

Route-Gruppen für jede Sektion:
- `/casinos/` - Casino-Seiten
- `/bonuses/` - Bonus-Seiten
- `/payments/` - Zahlungsmethoden-Seiten
- `/providers/` - Spielanbieter-Seiten
- `/games/` - Spiel-Seiten
- `/sportsbook/` - Wettanbieter-Seiten

## Funktionsweise

### Filterung

Das System filtert Posts basierend auf JSON-Spalten:
- `casino_type`: Array mit Werten wie 'crypto_casino', 'crypto_sportsbook'
- `casino_features`: Array mit Features wie 'mobile_casino', 'crypto_casino', 'live_dealer', etc.
- `bonus_types`: Array mit Bonus-Typen wie 'welcome_bonus', 'deposit_match', etc.
- `payment_methods`: Array mit Zahlungsmethoden-Keys wie 'bitcoin', 'visa', 'mastercard'
- `game_providers`: Array mit Provider-Keys wie 'netent', 'pragmatic-play', 'evolution'
- `sportsbook_types`: Array mit Sportarten wie 'football', 'basketball', etc.
- `kyc_required`: String-Wert wie 'no_kyc'

### Sortierung

Vier Sortieroptionen:
- `default`: Verwendet multi_language_order, dann rating desc, dann published_at desc
- `rating_desc`: Nach Bewertung absteigend
- `newest`: Nach published_at absteigend
- `rtp_desc`: Nach casino_rtp absteigend

## Implementierte URLs

### Casinos (5 Beispiel-Seiten)
- ✅ `/casinos/top-rated/` - Top bewertete Casinos
- ✅ `/casinos/crypto/` - Krypto Casinos
- ✅ `/casinos/new/` - Neue Casinos
- ✅ `/casinos/mobile/` - Mobile Casinos
- ✅ `/casinos/high-rtp/` - Casinos mit hohem RTP

### Bonuses
- ✅ `/bonuses/welcome/` - Willkommensboni
- ✅ `/bonuses/crypto/bitcoin` - Bitcoin Boni

### Payments
- ✅ `/payments/visa/` - Visa Casinos

### Providers
- ✅ `/providers/evolution/` - Evolution Casinos

### Weitere verfügbare URLs

Siehe `config/landing_pages.php` für die vollständige Liste aller definierten Seiten.

## Neue Landing-Pages hinzufügen

### Schritt 1: Konfiguration hinzufügen

Öffnen Sie `config/landing_pages.php` und fügen Sie eine neue Seiten-Definition hinzu:

```php
'casinos' => [
    'meine-neue-seite' => [
        'title' => 'Meine neue Seite',
        'h1' => 'Meine neue Seite',
        'meta_title' => 'Meine neue Seite 2024',
        'meta_description' => 'Beschreibung für SEO',
        'intro' => 'Optionaler Einleitungstext',
        'filters' => [
            'casino_type' => ['crypto_casino'],
            'casino_features' => ['mobile_casino'], // Optional
        ],
        'order_by' => 'default', // oder 'rating_desc', 'newest', 'rtp_desc'
    ],
],
```

### Schritt 2: Fertig!

Die URL `/casinos/meine-neue-seite/` funktioniert automatisch. Keine weiteren Änderungen nötig!

## Verwendete Felder/Relationen

### Post-Modell Felder:
- `active` (boolean): Nur aktive Posts
- `published_at` (datetime): Nur veröffentlichte Posts
- `languages` (array): Sprachfilterung
- `casino_type` (array): Casino-Typ (crypto_casino, crypto_sportsbook)
- `casino_features` (array): Features wie mobile_casino, crypto_casino, live_dealer, etc.
- `bonus_types` (array): Bonus-Typen wie welcome_bonus, deposit_match, etc.
- `payment_methods` (array): Zahlungsmethoden-Keys
- `game_providers` (array): Spielanbieter-Keys
- `sportsbook_types` (array): Sportarten
- `kyc_required` (string): KYC-Status
- `rating` (float): Bewertung für Sortierung
- `casino_rtp` (float): RTP für Sortierung
- `multi_language_order` (array): Globale Sortierreihenfolge

### Annahmen:

1. **JSON-Spalten**: Alle Relationen (payment_methods, game_providers, licenses) sind als JSON-Arrays in der `posts`-Tabelle gespeichert, nicht als separate Pivot-Tabellen.

2. **Sprache**: Standardsprache ist Deutsch ('de'). Die Sprache wird aus dem 'googtrans' Cookie ermittelt.

3. **Casino-Typen**: Das System unterscheidet zwischen 'crypto_casino' und 'crypto_sportsbook' über das `casino_type` Feld.

4. **Sortierung**: Die Standard-Sortierung verwendet `multi_language_order` wenn verfügbar, sonst `rating` desc, dann `published_at` desc.

## Performance

- Eager Loading: Der Query-Service lädt nur die benötigten Daten
- Pagination: Alle Listen sind paginiert (20 pro Seite)
- Indexierung: Stellen Sie sicher, dass JSON-Spalten indiziert sind für bessere Performance

## Fehlerbehebung

### Seite zeigt 404
- Überprüfen Sie, ob die Seiten-Definition in `config/landing_pages.php` existiert
- Überprüfen Sie die URL-Struktur (Sektion/Seite/Unter-Seite)

### Keine Posts angezeigt
- Überprüfen Sie die Filter-Definitionen
- Stellen Sie sicher, dass Posts die entsprechenden Werte in den JSON-Spalten haben
- Überprüfen Sie, ob Posts `active = 1` und `published_at <= now()` haben

### Falsche Sprache
- Überprüfen Sie das 'googtrans' Cookie
- Standard ist Deutsch ('de')

## Nächste Schritte

1. **Weitere Seiten hinzufügen**: Einfach in `config/landing_pages.php` hinzufügen
2. **Filter erweitern**: Neue Filter-Typen können im `LandingPageQueryService` hinzugefügt werden
3. **Sortierung erweitern**: Neue Sortieroptionen können im Service hinzugefügt werden
4. **SEO optimieren**: Meta-Tags und Strukturierte Daten können in der View erweitert werden












