# Paid Landing Page Variations

**Last Updated:** 2026-02-26

Dynamic content variations for `/gastro` and `/schichtbetriebe` paid landing pages. Ads manager can customize hero content via URL parameters for different campaigns.

## Overview

- **Default content:** Current page content when no `lp_` parameters are present
- **Variation content:** When `lp_*` params are present, they override defaults
- **SEO:** Canonical always points to base URL; `noindex, follow` when params present

## Parameter Reference

| Parameter | Purpose | Max length | Example |
|-----------|---------|------------|---------|
| `lp_h1` | Main H1 headline (line 1) | 80 chars | `Personalplanung in der Gastro` |
| `lp_h1_sub` | H1 subline (blue span) | 60 chars | `In Minuten statt Stunden` |
| `lp_title` | Page title (meta) | 70 chars | `Personalplanung Gastro \| Ordio` |
| `lp_desc` | Meta description | 160 chars | `EIN PERSONALPLAN...` |
| `lp_subhead` | Hero subheadline | 100 chars | `Die Personalsoftware...` |
| `lp_body` | Hero body paragraph | 200 chars | `Dienstplanung, Zeiterfassung...` |
| `lp_bullet1` | Bullet 1 | 80 chars | `Klare Prozesse...` |
| `lp_bullet2` | Bullet 2 | 80 chars | `Volle Kontrolle...` |
| `lp_bullet3` | Bullet 3 | 80 chars | `Für Cafés, Bars...` |

## Base URLs

- **Gastro:** `https://www.ordio.com/gastro`
- **Schichtbetriebe:** `https://www.ordio.com/schichtbetriebe`

## Google Ads Setup

### Option 1: Final URL with parameters

Append params directly to the Final URL:

```
https://www.ordio.com/gastro?lp_h1=Zeiterfassung+fuer+Restaurants&lp_subhead=Deine+Betriebe+entlasten
```

### Option 2: Tracking template with ValueTrack

Use custom parameters in the tracking template:

```
{lpurl}?lp_h1={_lp_h1}&lp_subhead={_lp_subhead}
```

Assign `{_lp_h1}` and `{_lp_subhead}` at campaign, ad group, or ad level.

### URL encoding

- Spaces: use `+` or `%20`
- Special chars (ä, ö, ü, ß): URL-encode (e.g. `%C3%A4` for ä)

## Example URLs for Testing

| URL | Expected |
|-----|----------|
| `/gastro` | Default gastro content |
| `/gastro?lp_h1=Test+Headline` | Only H1 changes |
| `/gastro?lp_h1=H1&lp_subhead=Sub&lp_bullet1=B1` | Multiple overrides |
| `/gastro?p=monthly` | Pricing period works; default content |
| `/gastro?utm_source=google&lp_h1=Test` | UTM + lp params both preserved |
| `/schichtbetriebe?lp_h1=Zeiterfassung+Test` | Schichtbetriebe variation |

## SEO Behavior

- **Canonical:** Always `https://www.ordio.com/gastro` or `https://www.ordio.com/schichtbetriebe` (no params)
- **Robots when params present:** `noindex, follow` to avoid duplicate content indexing
- **Schema:** Uses dynamic title/description when variation; base URL in schema

## Security

- All params: `strip_tags`, `trim`, length limit
- Output: `htmlspecialchars` (XSS prevention)
- Plain text only; no HTML in parameters

## Implementation

- **Helper:** `v2/helpers/paid-landing-variations.php`
- **Pages:** `v2/pages/paid_nonbrand.php` (gastro), `v2/pages/paid_schichtbetriebe.php` (schichtbetriebe)

## Related

- [LANDING_PAGE_REDIRECTS.md](../landing-page-redirects/LANDING_PAGE_REDIRECTS.md) – QSA preserves params
- `.cursor/rules/paid-landing-variations.mdc` – Cursor rule for edits
