# Comparison Pages Quick Reference


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

Quick lookup guide with copy-paste code snippets, templates, and patterns for creating comparison pages.

## Table of Contents

1. [Template Selection](#template-selection)
2. [Meta Tags Templates](#meta-tags-templates)
3. [Schema Templates](#schema-templates)
4. [Image Path Patterns](#image-path-patterns)
5. [Component Includes](#component-includes)
6. [Common Code Snippets](#common-code-snippets)
7. [Alpine.js Patterns](#alpinejs-patterns)

## Template Selection

### Available Templates

- **`compare_template_details.php`** - For pages with competitor Details section
- **`compare_template_nodetails.php`** - For pages without competitor Details section

### When to Use Each Template

**Use `compare_template_details.php` when:**
- Competitor has notable features/integrations to showcase
- Competitor has special characteristics or differentiators
- You want to showcase competitor capabilities in detail
- Example: Clockin (has integrations like DATEV, features like digital forms)

**Use `compare_template_nodetails.php` when:**
- Competitor is well-known and doesn't need feature breakdown
- Competitor details are less relevant to the comparison
- You want simpler, cleaner competitor column
- Example: Personio (well-known HR software)

### Quick Copy Command

```bash
# For pages with Details section:
cp v2/pages/compare_template_details.php v2/pages/compare_{competitor}.php

# OR for pages without Details section:
cp v2/pages/compare_template_nodetails.php v2/pages/compare_{competitor}.php
```

## Meta Tags Templates

### Complete Head Section

```php
<!-- individuelle meta tags für diese Seite -->
<title>{Competitor} Alternativen: Vergleich & Bewertung 2025 - Ordio</title>
<meta name="description" content="{Competitor} Alternativen im Vergleich 2025: Ordio vs {Competitor}. [Focus/Use Case] für [Target Audience]. Finde die beste [Category]-Alternative." />
<meta name="keywords" content="{Competitor} Alternativen, {Competitor} Vergleich, {Competitor} [Feature], {Competitor} Kosten, Ordio vs {Competitor}, [Category] Software" />
<meta name="author" content="Ordio GmbH">
<meta name="robots" content="index, follow" />
<meta name="apple-mobile-web-app-title" content="{Competitor} Alternativen 2025 - Ordio">
<meta name="theme-color" content="#ffffff">

<!-- additional meta tags & css  -->
<?php
$aosScript = "true";
$swiperScript = "false";
include '../base/head.php';
?>

<link rel="canonical" href="https://www.ordio.com/alternativen/{competitor}-vergleich">
<link rel="stylesheet" href="/v2/css/comparison-pages.css?v=<?php echo filemtime($_SERVER['DOCUMENT_ROOT'] . '/v2/css/comparison-pages.css'); ?>" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="/v2/css/comparison-pages.css"></noscript>

<!-- Preload LCP image (competitor logo) -->
<link rel="preload" href="/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp" as="image" fetchpriority="high">

<meta property="og:type" content="website">
<meta property="og:title" content="{Competitor} Alternativen: Vergleich & Bewertung 2025 - Ordio">
<meta property="og:description" content="{Competitor} Alternativen im Vergleich 2025: Ordio vs {Competitor}. [Description]">
<meta property="og:url" content="https://www.ordio.com/alternativen/{competitor}-vergleich">
<meta property="og:image" content="https://www.ordio.com/v2/img/content/ordio-alternativen.webp">
<meta property="og:image:alt" content="{Competitor} Alternativen Vergleich - Ordio vs {Competitor}">
<meta property="og:site_name" content="Ordio">
<meta property="og:locale" content="de_DE">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{Competitor} Alternativen: Vergleich & Bewertung 2025 - Ordio">
<meta name="twitter:description" content="{Competitor} Alternativen im Vergleich 2025: Ordio vs {Competitor}. [Description]">
<meta name="twitter:image" content="https://www.ordio.com/v2/img/content/ordio-alternativen.webp">
```

## Schema Templates

### Complete Schema Graph

```php
<script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "WebPage",
            "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#webpage",
            "url": "https://www.ordio.com/alternativen/{competitor}-vergleich",
            "name": "{Competitor} Alternativen: Vergleich & Bewertung 2025 - Ordio",
            "description": "{Competitor} Alternativen im Vergleich 2025: Ordio vs {Competitor}. [Description]",
            "inLanguage": "de-DE",
            "dateModified": "<?php echo ordio_get_page_last_modified_iso(); ?>",
            "isPartOf": {
                "@id": "https://www.ordio.com/#website"
            },
            "about": {
                "@id": "https://www.ordio.com/#organization"
            },
            "primaryImageOfPage": {
                "@type": "ImageObject",
                "@id": "https://www.ordio.com/v2/img/content/ordio-alternativen.webp",
                "url": "https://www.ordio.com/v2/img/content/ordio-alternativen.webp",
                "caption": "{Competitor} Alternativen Vergleich - Ordio vs {Competitor}",
                "description": "Detaillierter Vergleich zwischen Ordio und {Competitor}"
            }
        },
        {
            "@type": "Article",
            "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#article",
            "headline": "{Competitor} Alternativen: Vergleich & Bewertung 2025 - Ordio",
            "description": "{Competitor} Alternativen im Vergleich 2025: Ordio vs {Competitor}. Preise, Funktionen & Bewertungen.",
            "datePublished": "<?php echo ordio_get_page_published_iso('2025-01-01T00:00:00+01:00'); ?>",
            "dateModified": "<?php echo ordio_get_page_last_modified_iso(); ?>",
            "author": {
                "@type": "Organization",
                "@id": "https://www.ordio.com/#organization",
                "name": "Ordio GmbH"
            },
            "publisher": {
                "@type": "Organization",
                "@id": "https://www.ordio.com/#organization",
                "name": "Ordio GmbH",
                "logo": {
                    "@type": "ImageObject",
                    "url": "https://www.ordio.com/wp-content/uploads/2022/07/ordio.png"
                }
            },
            "mainEntityOfPage": {
                "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#webpage"
            },
            "image": {
                "@type": "ImageObject",
                "url": "https://www.ordio.com/v2/img/content/ordio-alternativen.webp"
            }
        },
        {
            "@type": "Table",
            "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#comparison-table",
            "about": "Detaillierter Vergleich zwischen Ordio und {Competitor}",
            "description": "Vergleich der wichtigsten Features, Preise und Bewertungen zwischen Ordio und {Competitor}",
            "mainEntity": [
                {
                    "@type": "Product",
                    "name": "Ordio",
                    "image": "https://www.ordio.com/v2/img/content/ordio-alternativen.webp",
                    "brand": {
                        "@type": "Brand",
                        "name": "Ordio"
                    },
                    "offers": {
                        "@type": "Offer",
                        "price": "89",
                        "priceCurrency": "EUR",
                        "priceSpecification": {
                            "@type": "UnitPriceSpecification",
                            "price": "89",
                            "priceCurrency": "EUR",
                            "unitText": "pro Standort pro Monat"
                        }
                    },
                    "aggregateRating": {
                        "@type": "AggregateRating",
                        "ratingValue": "4.9",
                        "bestRating": "5",
                        "ratingCount": "55"
                    }
                },
                {
                    "@type": "Product",
                    "name": "{Competitor}",
                    "image": "/v2/img/alternativen/{competitor}-logo.webp",
                    "brand": {
                        "@type": "Brand",
                        "name": "{Competitor}"
                    },
                    "offers": {
                        "@type": "Offer",
                        "price": "{price}",
                        "priceCurrency": "EUR",
                        "priceSpecification": {
                            "@type": "UnitPriceSpecification",
                            "price": "{price}",
                            "priceCurrency": "EUR",
                            "unitText": "pro User pro Monat"
                        }
                    },
                    "aggregateRating": {
                        "@type": "AggregateRating",
                        "ratingValue": "{rating}",
                        "bestRating": "5",
                        "ratingCount": "{count}"
                    }
                }
            ]
        },
        {
            "@type": "SoftwareApplication",
            "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#competitor-software",
            "name": "{Competitor}",
            "description": "{Competitor description}",
            "applicationCategory": "BusinessApplication",
            "operatingSystem": "Web Browser",
            "offers": {
                "@type": "Offer",
                "price": "{price}",
                "priceCurrency": "EUR",
                "priceSpecification": {
                    "@type": "UnitPriceSpecification",
                    "price": "{price}",
                    "priceCurrency": "EUR",
                    "unitText": "pro User pro Monat"
                }
            },
            "aggregateRating": {
                "@type": "AggregateRating",
                "ratingValue": "{rating}",
                "bestRating": "5",
                "ratingCount": "{count}"
            }
        },
        {
            "@type": "BreadcrumbList",
            "@id": "https://www.ordio.com/alternativen/{competitor}-vergleich#breadcrumb",
            "itemListElement": [
                {
                    "@type": "ListItem",
                    "position": 1,
                    "name": "Home",
                    "item": "https://www.ordio.com"
                },
                {
                    "@type": "ListItem",
                    "position": 2,
                    "name": "Alternativen",
                    "item": "https://www.ordio.com/alternativen"
                },
                {
                    "@type": "ListItem",
                    "position": 3,
                    "name": "{Competitor}",
                    "item": "https://www.ordio.com/alternativen/{competitor}-vergleich"
                }
            ]
        },
        {
            "@type": "FAQPage",
            "mainEntity": [
                {
                    "@type": "Question",
                    "name": "{Question 1}",
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": "{Answer 1}"
                    }
                },
                {
                    "@type": "Question",
                    "name": "{Question 2}",
                    "acceptedAnswer": {
                        "@type": "Answer",
                        "text": "{Answer 2}"
                    }
                }
            ]
        },
        {
            "@type": "Product",
            "@id": "https://www.ordio.com/#product",
            "name": "Ordio",
            "description": "Zeiterfassung und Schichtplanung für Unternehmen",
            "brand": {
                "@type": "Brand",
                "name": "Ordio"
            },
            "aggregateRating": {
                "@type": "AggregateRating",
                "ratingValue": "4.9",
                "bestRating": "5",
                "worstRating": "4",
                "ratingCount": "55"
            }
        }
    ]
}
</script>
```

## Image Path Patterns

### Hero Logo (Comparison Page)

```php
<img src="/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp"
     srcset="/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp 160w,
             /v2/img/alternativen/{competitor}-vergleich-logo-320w.webp 320w"
     sizes="(max-width: 640px) 160px, 160px"
     alt="{Competitor}"
     class="max-h-8 max-w-full object-contain"
     width="160"
     height="32"
     fetchpriority="high">
```

### Comparison Column Logo

```php
<img src="/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp"
     srcset="/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp 160w,
             /v2/img/alternativen/{competitor}-vergleich-logo-320w.webp 320w"
     sizes="(max-width: 640px) 160px, 160px"
     alt="{competitor}"
     class="max-h-8 max-w-full object-contain"
     width="160"
     height="32"
     fetchpriority="high">
```

### Carousel Logo

```php
<img src="/v2/img/alternativen/{competitor}-logo-64w.webp"
     srcset="/v2/img/alternativen/{competitor}-logo-64w.webp 64w,
             /v2/img/alternativen/{competitor}-logo-128w.webp 128w"
     sizes="(max-width: 640px) 64px, 64px"
     alt="{Competitor} Logo"
     class="max-w-full max-h-full object-contain transition-transform group-hover:scale-105"
     loading="lazy"
     width="64"
     height="64">
```

## Component Includes

### Header

```php
<?php
$headerwidth = "w-full";
include '../base/header.php';
?>
```

### CTA Buttons (Hero)

```php
<?php
$ctaPositionLeft = 'true';
$ctaButtonsAOS = 'false';
$ctaButtonsLight = 'yes';
$showCallbackButton = 'yes';
include '../base/include_ctabuttons.php';
?>
```

### CTA Buttons (Section)

```php
<?php
$ctaPositionLeft = 'false';
$ctaButtonsAOS = 'false';
$ctaButtonsLight = 'yes';
$showCallbackButton = 'yes';
include '../base/include_ctabuttons.php';
?>
```

### Ordio Comparison Content

```php
<?php include '../components/ordio_comparison_content.php'; ?>
```

### Comparison Carousel

```php
<?php include '../base/compare_carousel.php'; ?>
```

### Footer

```php
<?php
$color_fill = '#fff';
$color_background = '#fbfbfb';
$rotate = '0';
$margin_bottom = 'mb-24';
include '../base/footer.php';
?>
```

### Lead Capture Popup

```php
<?php include '../components/lead-capture-popup.php'; ?>
```

## Common Code Snippets

### Hero Section Heading

```php
<h1 class="text-5xl sm:text-7xl font-gilroybold leading-[102%] tracking-[-1.5px]">
    {Competitor} Alternativen: <span class="text-ordio-blue">Vergleich</span> & <span class="text-ordio-blue">Bewertung</span> 2025
</h1>
```

### Comparison Section Heading

```php
<h2 class="text-5xl sm:text-7xl font-gilroybold leading-[102%] tracking-[-1.5px] mb-6 inline-block p-1 text-[#333333]">
    Ordio vs. {Competitor}
    <br><span class="block sm:inline text-2xl sm:text-4xl font-inter500 font-normal align-middle">Funktionsvergleich im Überblick</span>
</h2>
```

### Star Rating Display

```php
<div class="flex text-yellow-400 star-svg">
    <svg class="w-5 h-5" viewBox="0 0 20 20" fill="#facc15"><path d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/></svg>
    <svg class="w-5 h-5" viewBox="0 0 20 20" fill="#facc15"><path d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/></svg>
    <svg class="w-5 h-5" viewBox="0 0 20 20" fill="#facc15"><path d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/></svg>
    <svg class="w-5 h-5" viewBox="0 0 20 20" fill="#facc15"><path d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/></svg>
    <svg class="w-5 h-5 relative" viewBox="0 0 20 20">
        <!-- Background (empty) star -->
        <path fill="#d1d5db" d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z"/>
        <!-- Partial fill (e.g., 90% for 4.9 rating) -->
        <path fill="#facc15" d="M10 15l-5.878 3.09 1.123-6.545L.489 6.91l6.572-.955L10 0l2.939 5.955 6.572.955-4.756 4.635 1.123 6.545z" clip-path="inset(0 10% 0 0)"/>
    </svg>
</div>
<span class="ml-2 text-white text-sm font-medium">4.9</span>
```

### Rating Distribution Bar

```php
<div class="rating-row">
    <span class="star-label text-gray-600">5★</span>
    <div class="flex-1 rating-bar-bg bg-gray-200 rounded-full mx-3">
        <div class="rating-bar-container">
            <div class="rating-bar-fill bg-gray-500 rounded-full" style="width: 98%" data-percentage="98%"></div>
            <div class="rating-tooltip" role="tooltip" aria-label="5-Star Rating: 98%">98%</div>
        </div>
    </div>
    <span class="count-label text-gray-600">53</span>
</div>
```

### FAQ Item

```php
<details class="bg-white rounded-lg p-6 [&>summary::-webkit-details-marker]:hidden [&>summary::marker]:content-none group">
    <summary class="font-inter600 text-lg cursor-pointer flex items-center justify-between hover:text-ordio-blue transition-colors duration-200">
        <span>{Question}</span>
        <svg class="w-5 h-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
        </svg>
    </summary>
    <div class="mt-4 text-gray-600 transition-all duration-300 ease-in-out">
        <p class="mb-4">{Answer}</p>
    </div>
</details>
```

### Comparison Grid Container

```php
<div class="comparison-grid" x-data="{ ordioDetailsHeight: 0 }" @height-changed="ordioDetailsHeight = $event.detail.height">
    <!-- Ordio Column -->
    <div class="bg-white rounded-2xl shadow-lg border border-gray-100 overflow-hidden ordio-card comparison-card">
        <!-- Content -->
    </div>
    <!-- Competitor Column -->
    <div class="bg-white rounded-2xl shadow-lg border border-gray-100 overflow-hidden personio-card comparison-card">
        <!-- Content -->
    </div>
</div>
```

### Pricing Card

```php
<div class="bg-gray-50 rounded-lg p-4">
    <div class="flex justify-between items-start mb-2">
        <div>
            <h5 class="font-medium text-gray-900 mb-1">{Plan Name}</h5>
            <p class="text-xs text-gray-500">{Description}</p>
        </div>
        <div class="text-right">
            <span class="text-2xl font-bold text-ordio-blue">{Price}</span>
            <p class="text-sm text-gray-600">{Period}</p>
        </div>
    </div>
</div>
```

## Alpine.js Patterns

### Height Synchronization

```php
<div x-data="{ ordioDetailsHeight: 0 }" @height-changed="ordioDetailsHeight = $event.detail.height">
    <!-- Content that dispatches height-changed events -->
</div>
```

**In component:**

```php
<div x-data="{ open: false }" x-init="
    $nextTick(() => {
        $dispatch('height-changed', { height: $el.offsetHeight });
    });
    $watch('open', () => {
        $nextTick(() => {
            setTimeout(() => {
                $dispatch('height-changed', { height: $el.offsetHeight });
            }, 350);
        });
    });
">
```

### Mobile Carousel

```php
<div x-data="{ activeSlide: 1, slides: 4 }" class="sm:hidden">
    <div class="flex transition-transform duration-500"
         :style="'transform: translateX(-' + (100 * (activeSlide - 1)) + '%)'">
        <!-- Slides -->
    </div>
    <div class="flex justify-center space-x-2 mt-6">
        <button @click="activeSlide = 1"
                :class="activeSlide === 1 ? 'bg-white' : 'bg-white bg-opacity-50'"
                class="h-11 w-11 rounded-full"></button>
        <!-- More buttons -->
    </div>
</div>
```

### Scroll-Based Timer

```php
<div x-data="{
    scrolled: false,
    time: 0,
    formattedTime() {
        const minutes = Math.floor(this.time / 60);
        const seconds = this.time % 60;
        return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
    },
    init() {
        window.addEventListener('scroll', () => {
            this.scrolled = window.scrollY > 100;
        });
        setInterval(() => {
            this.time += 1;
        }, 1000);
    }
}" x-init="init()">
    <div x-text="formattedTime()">00:00</div>
</div>
```

## Copy Patterns

### Competitor Intro

```
{Competitor} ist eine {Category}-Software für {Primary Use Case}. {Neutral description of what it does}. Viele Unternehmen suchen nach {Competitor} Alternativen, die {Additional Need X} und {Additional Need Y} bieten.
```

### Ordio Differentiation

```
Ordio bietet {Unique Value Prop} und richtet sich speziell an {Target Audience}. Mit {Feature X}, {Feature Y} und {Feature Z} löst du {Problem} effizienter als {Competitor}.
```

### Feature Comparison

```
Während {Competitor} {X} bietet, geht Ordio weiter: {Y + Z}. Das bedeutet für dich: {Benefit}.
```

### FAQ Answer Pattern

```
{Direct answer}. {Competitor} {neutral fact}. Ordio hingegen fokussiert auf {Y}, weil {Reason}. So kannst du {Outcome} ohne {Pain Point}.
```

## Validation Quick Checks

### Schema Validation

1. Copy JSON-LD from page source
2. Paste into [Google Rich Results Test](https://search.google.com/test/rich-results)
3. Verify no errors
4. Check all required fields present

### Image Validation

```bash
# Check if all variants exist
ls -la v2/img/alternativen/{competitor}-*.webp

# Verify image dimensions
file v2/img/alternativen/{competitor}-vergleich-logo-160w.webp
```

### Performance Check

1. Open page in Chrome DevTools
2. Run Lighthouse audit
3. Check LCP < 2.5s
4. Verify CLS < 0.1
5. Check image preload in Network tab

### Accessibility Check

1. Run axe DevTools extension
2. Check color contrast (WCAG AA)
3. Test keyboard navigation
4. Verify screen reader compatibility

## Common Replacements

### Competitor Name Placeholders

- `{Competitor}` → Full name (e.g., "awork")
- `{competitor}` → Lowercase slug (e.g., "awork")
- `{competitor-slug}` → Hyphenated slug (e.g., "awork")

### URL Patterns

- Page URL: `/alternativen/{competitor}-vergleich`
- Image path: `/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp`
- Schema ID: `https://www.ordio.com/alternativen/{competitor}-vergleich#{type}`

### Date Patterns

- Published: `ordio_get_page_published_iso('2025-01-01T00:00:00+01:00')`
- Modified: `ordio_get_page_last_modified_iso()`

## Troubleshooting Quick Fixes

### Images Not Loading

```php
// Check path is correct
echo $_SERVER['DOCUMENT_ROOT'] . '/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp';

// Verify file exists
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/v2/img/alternativen/{competitor}-vergleich-logo-160w.webp')) {
    echo 'File exists';
}
```

### Schema Validation Errors

```php
// Validate JSON syntax
$schema = json_decode($schemaJson);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'JSON Error: ' . json_last_error_msg();
}
```

### Column Height Mismatch

```php
// Ensure Alpine.js is loaded
// Check browser console for Alpine errors
// Verify height-changed events are dispatched
```
