Audit aller 23 indexierbaren Routen (lokaler Crawl) und Fixes: - Descriptions auf ~130-160 Zeichen; Turnen-Disziplinseiten hatten den kurzen Hero-Teaser als Description, jetzt eigene SERP-Texte - Titles: team-erste gekürzt, sportheimbuchung ohne doppelten Brand - h1->h3-Sprünge behoben: visually-hidden h2 aus JSON-Section-Titeln (sportheimbuchung, partner-werden), sichtbarer choice.title auf mitglied-werden; historie bekommt Breadcrumb-Schema - Neuer Helper img_intrinsic_attrs() liefert width/height aus der Bilddatei (PNG via getimagesize, SVG via viewBox) für Partner-Grid- und Banner-Slider-Logos — kein Layout-Shift mehr Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
28 lines
968 B
PHP
28 lines
968 B
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* Turnen → Wettkampfturnen. Inhalt: data/turnen.json (disciplines.wettkampfturnen).
|
||
* Struktur: Hero → Gruppen/Trainingszeiten → CTA.
|
||
*/
|
||
$slug = 'turnen/wettkampfturnen';
|
||
$d = json_load('turnen')['disciplines']['wettkampfturnen'];
|
||
|
||
$meta = [
|
||
'title' => 'Wettkampfturnen in Kulmbach',
|
||
'description' => 'Leistungsorientiertes Gerätturnen mit Training und Wettkämpfen – Wettkampfturnen beim TSV 08 Kulmbach im Mäximum Gym. Trainingszeiten und Kontakt im Überblick.',
|
||
'og_image' => 'img/hero/hero-1600.jpg',
|
||
'schema' => page_schema([
|
||
['name' => 'Startseite', 'slug' => ''],
|
||
['name' => 'Turnen', 'slug' => 'turnen'],
|
||
['name' => 'Wettkampfturnen', 'slug' => $slug],
|
||
]),
|
||
];
|
||
|
||
component('hero', ['hero' => $d['hero']]);
|
||
component('group-schedule', [
|
||
'location' => $d['location'] ?? [],
|
||
'lead' => $d['lead'] ?? '',
|
||
'groups' => $d['groups'] ?? [],
|
||
]); |