<?php require_once __DIR__ . '/seo_bootstrap.php'; $lang = seo_normalize_lang(isset($_GET['lang']) ? $_GET['lang'] : 'fr'); $slug = isset($_GET['slug']) ? trim((string)$_GET['slug']) : ''; $spot = seo_find_spot($slug); if ($spot === null) { seo_render_404($lang); exit; } $zoneLabel = seo_zone_label($spot['zone']); $sports = seo_format_sports($lang, $spot['sports']); $type = seo_format_type($lang, $spot['type']); $level = seo_format_level($lang, $spot['level']); $title = sprintf(seo_i18n($lang, 'spot_title'), $spot['name'], $sports !== '' ? $sports : 'glisse'); $desc = sprintf(seo_i18n($lang, 'spot_meta'), $spot['name'], $zoneLabel); $canonical = seo_absolute_url('/' . $lang . '/spot/' . rawurlencode($spot['slug']) . '/'); $body = '<h1>' . seo_h($spot['name']) . '</h1><dl class="seo-dl">'; $body .= '<dt>' . seo_h(seo_i18n($lang, 'zone_label')) . '</dt><dd><a href="' . seo_h(seo_absolute_url('/' . $lang . '/zone/' . rawurlencode($spot['zone']) . '/')) . '">' . seo_h($zoneLabel) . '</a></dd>'; if ($sports !== '') { $body .= '<dt>' . seo_h(seo_i18n($lang, 'sports_label')) . '</dt><dd>' . seo_h($sports) . '</dd>'; } if ($type !== '') { $body .= '<dt>' . seo_h(seo_i18n($lang, 'type_label')) . '</dt><dd>' . seo_h($type) . '</dd>'; } if ($level !== '') { $body .= '<dt>' . seo_h(seo_i18n($lang, 'level_label')) . '</dt><dd>' . seo_h($level) . '</dd>'; } $body .= '</dl>'; $query = array('spot' => $spot['id']); if ($spot['zone'] !== '') { $query['zone'] = $spot['zone']; } $body .= seo_cta_button($lang, $query); $jsonLd = array('@context' => 'https://schema.org', '@type' => 'SportsActivityLocation', 'name' => $spot['name'], 'url' => $canonical, 'description' => $desc); seo_render_layout(array( 'lang' => $lang, 'title' => $title, 'description' => $desc, 'canonical' => $canonical, 'hreflang_path' => '/spot/' . $spot['slug'] . '/', 'body_html' => $body, 'json_ld' => $jsonLd, ));