Im Juni 2025 haben wir die Rechner Zentrale gelauncht – eine Web-App mit über 36 Finanz-Rechnern für Gehalt, Steuern und Sozialleistungen. In dieser Case Study teilen wir unsere Erfahrungen: von der initialen Architektur-Entscheidung bis zur SEO-Strategie für hochvolumige Keywords.
Die Ausgangssituation
Das Problem
Bestehende Brutto-Netto-Rechner im deutschen Markt haben mehrere Probleme:
- Datenschutz: Die meisten senden Nutzerdaten an Server – problematisch bei sensiblen Gehaltsinformationen
- Performance: Langsame, mit Werbung überladene Seiten
- Genauigkeit: Veraltete Steuertabellen oder fehlerhafte Berechnungen
- Mobile UX: Desktop-First-Designs, die auf Smartphones schlecht funktionieren
Unsere Ziele
- Privacy-First: Alle Berechnungen im Browser, keine Datenübertragung
- Top-Performance: 95+ Lighthouse Scores
- SEO-Dominanz: Rankings für Keywords mit 1-10 Mio. monatlichen Suchen
- Skalierbare Architektur: Einfaches Hinzufügen neuer Rechner
Architektur-Entscheidungen
Warum Next.js 16?
Für diese Art von Projekt war Next.js die ideale Wahl:
| Anforderung | Next.js Lösung |
|---|---|
| SEO für 36+ Seiten | Server Components + Static Generation |
| Interaktive Rechner | Client Components mit React 19 |
| Performance | Automatic Code Splitting |
| Developer Experience | TypeScript + App Router |
// Hybride Architektur: Server Component als Wrapper
// app/(rechner)/brutto-netto/page.tsx
import { Metadata } from 'next'
import { BruttoNettoCalculator } from '@/components/calculator/BruttoNettoCalculator'
import { SEOContent } from '@/components/seo/SEOContent'
export const metadata: Metadata = {
title: 'Brutto Netto Rechner 2026 | Kostenlos Nettogehalt berechnen',
description: 'Berechne dein Nettoeinkommen sofort und kostenlos...',
}
// Server Component: SEO-Content wird zur Build-Zeit generiert
export default function BruttoNettoPage() {
return (
<>
<BruttoNettoCalculator /> {/* Client Component */}
<SEOContent type="brutto-netto" /> {/* Server Component */}
</>
)
}Privacy-First-Architektur
Das Kernprinzip: Keine Nutzerdaten verlassen den Browser.
┌─────────────────────────────────────────────────┐
│ Browser │
│ ┌───────────────┐ ┌─────────────────────┐ │
│ │ User Input │───▶│ Calculation Engine │ │
│ │ (Brutto, etc.)│ │ (JavaScript) │ │
│ └───────────────┘ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Result Display │ │
│ │ (Netto, Steuern) │ │
│ └─────────────────────┘ │
│ │
│ ────────────── Keine Daten verlassen ────────── │
└─────────────────────────────────────────────────┘
Vorteile:
- 100% DSGVO-konform ohne Cookie-Banner für Berechnungen
- Instant Ergebnisse ohne Server-Roundtrip
- Funktioniert offline (nach initialem Laden)
- Reduzierte Serverkosten (keine Compute für Berechnungen)
Die Berechnungs-Engines
Struktur
Über 40 spezialisierte Module in /lib/calculations/:
lib/calculations/
├── brutto-netto/
│ ├── index.ts # Main export
│ ├── lohnsteuer.ts # Lohnsteuerberechnung
│ ├── sozialversicherung.ts
│ ├── kirchensteuer.ts
│ └── types.ts
├── elterngeld/
├── arbeitslosengeld/
├── einkommensteuer/
└── ... (35+ weitere)
Beispiel: Lohnsteuer-Berechnung
Die Berechnung folgt §39b EStG:
// lib/calculations/brutto-netto/lohnsteuer.ts
interface LohnsteuerInput {
jahresbrutto: number
steuerklasse: 1 | 2 | 3 | 4 | 5 | 6
kirchensteuer: boolean
bundesland: Bundesland
kinderfreibetraege: number
}
export function calculateLohnsteuer(input: LohnsteuerInput): LohnsteuerResult {
// 1. Zu versteuerndes Einkommen ermitteln
const werbungskosten = 1230 // Pauschbetrag 2026
const sonderausgaben = 36 // Pauschbetrag
const zvE = input.jahresbrutto - werbungskosten - sonderausgaben
// 2. Grundfreibetrag abziehen (§32a EStG)
const grundfreibetrag = 12096 // 2026
if (zvE <= grundfreibetrag) {
return { lohnsteuer: 0, soli: 0, kirchensteuer: 0 }
}
// 3. Tarifliche Einkommensteuer berechnen
const tariflicheSteuer = calculateTarif2026(zvE)
// 4. Steuerklassen-Faktor anwenden
const steuerklassenFaktor = getSteuerklassenFaktor(input.steuerklasse)
const lohnsteuer = tariflicheSteuer * steuerklassenFaktor
// 5. Solidaritätszuschlag (nur über Freigrenze)
const soliFreigrenze = 18130 // 2026
const soli = lohnsteuer > soliFreigrenze ? lohnsteuer * 0.055 : 0
// 6. Kirchensteuer
const kirchensteuerSatz = input.bundesland === 'Bayern' || input.bundesland === 'Baden-Württemberg' ? 0.08 : 0.09
const kirchensteuer = input.kirchensteuer ? lohnsteuer * kirchensteuerSatz : 0
return { lohnsteuer, soli, kirchensteuer }
}Type-Safety für Genauigkeit
TypeScript verhindert Berechnungsfehler:
// lib/calculations/types.ts
// Strikte Typen verhindern ungültige Eingaben
type Steuerklasse = 1 | 2 | 3 | 4 | 5 | 6
type Bundesland =
| 'Baden-Württemberg'
| 'Bayern'
| 'Berlin'
// ... alle 16 Bundesländer
interface BruttoNettoInput {
brutto: number
steuerklasse: Steuerklasse
bundesland: Bundesland
kirchensteuer: boolean
kinderfreibetraege: 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 3.5 | 4
krankenversicherung: 'gesetzlich' | 'privat'
rentenversicherungspflicht: boolean
arbeitslosenversicherungspflicht: boolean
alter: number
}SEO-Strategie für hochvolumige Keywords
Das Keyword-Problem
"Brutto Netto Rechner" hat 1-10 Mio. monatliche Suchen – aber auch massive Konkurrenz. Unsere Strategie:
1. Long-Tail-Cluster: Statt nur auf das Hauptkeyword zu setzen, decken wir 36 verwandte Keywords ab.
2. Keyword-Kannibalisierung vermeiden: Jede Seite hat ein eindeutiges Primary Keyword.
// lib/seo/keyword-map.ts
export const keywordMap: Record<string, KeywordConfig> = {
'brutto-netto': {
primary: 'brutto netto rechner',
secondary: ['gehaltsrechner', 'lohnrechner', 'netto gehalt berechnen'],
avoid: ['einkommensteuer', 'steuerrechner selbstständige'],
searchVolume: '1-10M',
},
einkommensteuer: {
primary: 'einkommensteuerrechner',
secondary: ['steuererklärung berechnen', 'steuer berechnen'],
avoid: ['brutto netto', 'lohnsteuer'],
searchVolume: '100K-500K',
},
elterngeld: {
primary: 'elterngeldrechner',
secondary: ['elterngeld berechnen', 'elterngeld plus rechner'],
avoid: ['kindergeld', 'mutterschaftsgeld'],
searchVolume: '50K-100K',
},
}3. Strukturierte Daten für Rich Snippets:
// lib/seo/schemas.ts
export function buildCalculatorSchema(calculatorType: string) {
return {
'@context': 'https://schema.org',
'@type': 'WebApplication',
name: `${getTitle(calculatorType)} 2026`,
applicationCategory: 'FinanceApplication',
operatingSystem: 'Web',
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'EUR',
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '4.8',
ratingCount: '1247',
},
}
}Content-Struktur für E-E-A-T
Jede Rechner-Seite folgt einer SEO-optimierten Struktur:
1. H1: Hauptkeyword + Jahr (z.B. "Brutto Netto Rechner 2026")
2. Interaktiver Rechner (Above the Fold)
3. H2: Was ist [Thema]? (Definition für Featured Snippets)
4. H2: Wie berechnet sich [Thema]? (Erklärung der Formel)
5. Beispiel-Tabelle (Konkrete Berechnungen)
6. FAQ-Sektion (FAQPage Schema)
7. Quellen-Zitation (E-E-A-T Trust Signal)
Analytics ohne Cookies
Umami Analytics
Wir nutzen das selbst-gehostete Umami für Privacy-Compliant Tracking:
// lib/analytics/umami.ts
export function trackCalculation(
calculatorType: CalculatorType,
input: CalculatorInput
) {
// Anonymisierung: Nur Ranges, keine exakten Werte
const anonymizedData = {
bruttoRange: getBruttoRange(input.brutto), // "3000-4000" statt 3456
steuerklasse: input.steuerklasse,
bundesland: input.bundesland,
// KEINE persönlichen Daten
}
umami.track('calculation', {
calculator: calculatorType,
...anonymizedData,
})
}
function getBruttoRange(brutto: number): string {
if (brutto < 1000) return '0-1000'
if (brutto < 2000) return '1000-2000'
if (brutto < 3000) return '2000-3000'
// ...
return '10000+'
}Business Intelligence ohne Datenschutz-Kompromiss
Was wir tracken (anonymisiert):
- Welche Rechner werden genutzt?
- Welche Gehalts-Ranges sind häufig?
- Welche Steuerklassen dominieren?
- Scroll-Tiefe auf SEO-Content
- B2B-Interest (Klicks auf "Für Unternehmen")
Was wir nicht tracken:
- Exakte Gehaltszahlen
- IP-Adressen
- Geräte-IDs
- Cross-Site-Tracking
Performance-Optimierung
Lighthouse 95+ auf allen Seiten
// next.config.ts
const config: NextConfig = {
experimental: {
optimizeCss: true, // CSS-Optimierung
optimizePackageImports: ['framer-motion', 'lucide-react'],
},
images: {
formats: ['image/avif', 'image/webp'],
},
}Code Splitting für Rechner
Jeder Rechner wird nur geladen, wenn er benötigt wird:
// Lazy Loading für nicht-kritische Rechner
const ElterngeldCalculator = dynamic(
() => import('@/components/calculator/ElterngeldCalculator'),
{
loading: () => <CalculatorSkeleton />,
ssr: false, // Client-only für maximale Performance
}
)Ergebnisse
| Metrik | Ziel | Erreicht |
|---|---|---|
| LCP | < 2.5s | 0.9s ✅ |
| CLS | < 0.1 | 0.02 ✅ |
| INP | < 200ms | 80ms ✅ |
| Lighthouse | > 90 | 95-100 ✅ |
Lessons Learned
Was gut funktioniert hat
- Privacy-First als Feature: "Keine Datenspeicherung" ist ein starkes Verkaufsargument
- TypeScript für Berechnungen: Verhindert Rundungsfehler und falsche Typen
- Keyword-Cluster-Strategie: 36 Seiten ranken besser als 1 überladene Seite
- Server + Client Components: Perfekte Balance zwischen SEO und Interaktivität
Was wir anders machen würden
- Früher auf Mobile-First testen: Einige Slider-UIs mussten nachträglich optimiert werden
- Mehr Unit-Tests für Berechnungen: Steuerrecht ändert sich jährlich
- Internationalisierung von Anfang an: Österreich und Schweiz haben ähnliche Bedürfnisse
Fazit
Die Rechner Zentrale zeigt, dass Privacy-First und Performance-Exzellenz keine Widersprüche sind. Mit der richtigen Architektur (Next.js + Client-Side Computation) und einer durchdachten SEO-Strategie (Keyword-Cluster + Strukturierte Daten) lassen sich auch in umkämpften Märkten Top-Positionen erreichen.
Die Rechner Zentrale ist live: bruttonettorechner.plus
Sie planen eine ähnliche Web-App? Ob Finanz-Tools, Konfiguratoren oder interaktive Rechner – wir entwickeln datenschutzkonforme Lösungen mit Top-Performance. Kontaktieren Sie uns für ein unverbindliches Beratungsgespräch.
Weitere Ressourcen:
Onur Cirakoglu ist Gründer und leitender Entwickler von HEADON.pro. Mit über 8 Jahren Erfahrung in der Webentwicklung spezialisiert er sich auf performante Next.js-Anwendungen, React Native Mobile Apps und komplexe Full-Stack-Lösungen. Seine Expertise umfasst moderne JavaScript-Frameworks, Cloud-Architekturen und SEO-optimierte Webanwendungen. Er berät Unternehmen im Main-Tauber-Kreis und darüber hinaus bei ihrer digitalen Transformation.
Expertise
Das könnte Sie auch interessieren
Weitere Artikel zu ähnlichen Themen
Next.js vs WordPress: CMS-Vergleich 2025
Next.js vs WordPress: Performance, SEO, Kosten und Sicherheit verglichen. Welches System passt zu Ihnen?
WeiterlesenProgressive Web Apps (PWA): Guide 2025
Progressive Web Apps (PWA) verstehen: Vorteile gegenüber Native Apps, Service Workers, Offline-Funktionalität und Installation auf dem Homescreen.
WeiterlesenSSR vs CSR vs SSG: Die richtige Wahl
SSR vs CSR vs SSG erklärt: Welche Rendering-Technologie passt zu Ihrer Website? Verständliche Entscheidungshilfe mit Vor- und Nachteilen.
Weiterlesen