SEO/GEO-Feinschliff: og:image:alt, areaServed, WebSite-Knoten, Team-Descriptions
- og:image:alt (Seitentitel) in meta.php — Social-/AI-Cards + A11y - areaServed (Kulmbach + Landkreis Kulmbach) am SportsClub-JSON-LD-Knoten - WebSite-Knoten auf der Startseite via neuem Helper website_schema(), publisher -> #club - Explizite, Kulmbach-haltige Team-Descriptions (<=155 Zeichen) statt roher Hero-Texte (zweite-mannschaft war 214 Zeichen und wurde im Snippet abgeschnitten) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,10 @@ $clubNode = [
|
|||||||
'latitude' => $club['geo']['lat'],
|
'latitude' => $club['geo']['lat'],
|
||||||
'longitude' => $club['geo']['lng'],
|
'longitude' => $club['geo']['lng'],
|
||||||
],
|
],
|
||||||
|
'areaServed' => [
|
||||||
|
['@type' => 'City', 'name' => $club['address']['city']],
|
||||||
|
['@type' => 'AdministrativeArea', 'name' => 'Landkreis ' . $club['address']['city']],
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
$graph = [
|
$graph = [
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ $scripts = array_merge(['nav.js', 'back-to-top.js'], $meta['scripts'] ?? []);
|
|||||||
<meta property="og:description" content="<?= e($description) ?>">
|
<meta property="og:description" content="<?= e($description) ?>">
|
||||||
<meta property="og:url" content="<?= e($canonical) ?>">
|
<meta property="og:url" content="<?= e($canonical) ?>">
|
||||||
<meta property="og:image" content="<?= e($ogImage) ?>">
|
<meta property="og:image" content="<?= e($ogImage) ?>">
|
||||||
|
<meta property="og:image:alt" content="<?= e($title) ?>">
|
||||||
<meta property="og:locale" content="de_DE">
|
<meta property="og:locale" content="de_DE">
|
||||||
<meta name="twitter:card" content="summary_large_image">
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
<link rel="icon" href="/favicon.ico" sizes="32x32">
|
<link rel="icon" href="/favicon.ico" sizes="32x32">
|
||||||
|
|||||||
@@ -267,6 +267,24 @@ function page_schema(array $breadcrumb, array $faq = []): array
|
|||||||
return $nodes;
|
return $nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebSite-Knoten (für die Startseite): definiert die Site als Entität und
|
||||||
|
* verweist via publisher auf den Club (#club). Keine SearchAction — es gibt
|
||||||
|
* keine Site-Suche.
|
||||||
|
*/
|
||||||
|
function website_schema(): array
|
||||||
|
{
|
||||||
|
$club = json_load('club');
|
||||||
|
return [
|
||||||
|
'@type' => 'WebSite',
|
||||||
|
'@id' => abs_url() . '#website',
|
||||||
|
'url' => abs_url(),
|
||||||
|
'name' => $club['name'],
|
||||||
|
'inLanguage' => 'de-DE',
|
||||||
|
'publisher' => ['@id' => abs_url() . '#club'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Schema-Knoten für eine Mannschafts-Seite: SportsTeam (verweist auf den Club
|
* Schema-Knoten für eine Mannschafts-Seite: SportsTeam (verweist auf den Club
|
||||||
* via #club) + Breadcrump (Start → Fußball → Team) + optional FAQPage.
|
* via #club) + Breadcrump (Start → Fußball → Team) + optional FAQPage.
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ $meta = [
|
|||||||
'title_absolute' => true,
|
'title_absolute' => true,
|
||||||
'description' => 'Dein Sportverein für Fußball und Turnen in Kulmbach: Jugend-, Herren- und Damenfußball, Turnen und Trampolin – seit 1908 im Katzbachtal. Jetzt Mitglied werden!',
|
'description' => 'Dein Sportverein für Fußball und Turnen in Kulmbach: Jugend-, Herren- und Damenfußball, Turnen und Trampolin – seit 1908 im Katzbachtal. Jetzt Mitglied werden!',
|
||||||
'scripts' => ['form.js', 'carousel.js'],
|
'scripts' => ['form.js', 'carousel.js'],
|
||||||
|
'schema' => [website_schema()],
|
||||||
];
|
];
|
||||||
|
|
||||||
component('hero', ['hero' => $home['hero']]);
|
component('hero', ['hero' => $home['hero']]);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ $team = json_load('teams')['damen'];
|
|||||||
|
|
||||||
$meta = [
|
$meta = [
|
||||||
'title' => 'Damenmannschaft – Damenfußball Kulmbach',
|
'title' => 'Damenmannschaft – Damenfußball Kulmbach',
|
||||||
'description' => $team['hero']['text'],
|
'description' => 'Frauen- und Mädchenfußball beim TSV 08 Kulmbach: Ob erfahren oder Wiedereinsteigerin – im Katzbachtal findest du dein Team. Komm zum Probetraining.',
|
||||||
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
||||||
'schema' => team_schema($team, $slug),
|
'schema' => team_schema($team, $slug),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ $team = json_load('teams')['erste-mannschaft'];
|
|||||||
|
|
||||||
$meta = [
|
$meta = [
|
||||||
'title' => '1. Mannschaft – Herrenfußball Kreisklasse Kulmbach',
|
'title' => '1. Mannschaft – Herrenfußball Kreisklasse Kulmbach',
|
||||||
'description' => $team['hero']['text'],
|
'description' => 'Die erste Herrenmannschaft des TSV 08 Kulmbach spielt auf Kreisklasse-Niveau – ambitioniert und mit echtem Vereinsgeist. Komm vorbei und spiel mit.',
|
||||||
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
||||||
'schema' => team_schema($team, $slug),
|
'schema' => team_schema($team, $slug),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ $team = json_load('teams')['zweite-mannschaft'];
|
|||||||
|
|
||||||
$meta = [
|
$meta = [
|
||||||
'title' => '2. Mannschaft – Herrenfußball Kulmbach',
|
'title' => '2. Mannschaft – Herrenfußball Kulmbach',
|
||||||
'description' => $team['hero']['text'],
|
'description' => 'Die zweite Herrenmannschaft des TSV 08 Kulmbach spielt in Spielgemeinschaft mit dem TSV Melkendorf – Fußball mit Spaß für alle, die gern kicken.',
|
||||||
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
'og_image' => $team['hero']['image']['base'] . '-1600.jpg',
|
||||||
'scripts' => (count($team['contact_names'] ?? []) > 1) ? ['contact-slider.js'] : [],
|
'scripts' => (count($team['contact_names'] ?? []) > 1) ? ['contact-slider.js'] : [],
|
||||||
'schema' => team_schema($team, $slug),
|
'schema' => team_schema($team, $slug),
|
||||||
|
|||||||
Reference in New Issue
Block a user