{{-- Données structurées schema.org décrivant l'établissement. Invisibles à l'écran : elles servent à Google, Bing et aux assistants pour comprendre qui vous êtes, où vous êtes et ce que vous proposez. --}} @php $centre = config('site.centre'); $seo = config('site.seo'); $legal = config('site.legal'); $reviews = config('site.reviews'); $data = [ '@context' => 'https://schema.org', '@type' => 'SelfStorage', '@id' => url('/').'#etablissement', 'name' => 'BOX 137', 'alternateName' => 'Box 137 Chauny', 'description' => 'Location de box et containers de stockage à Chauny (Aisne). Site sécurisé, ' .'accessible 24h/24 et 7j/7, sans engagement, pour les particuliers et les professionnels.', 'url' => url('/'), 'telephone' => collect(config('site.contacts'))->pluck('phone_link')->all(), 'email' => config('site.email'), 'image' => filled($seo['share_image']) && file_exists(public_path($seo['share_image'])) ? asset($seo['share_image']) : null, 'logo' => file_exists(public_path(config('site.logo'))) ? asset(config('site.logo')) : null, 'priceRange' => $seo['price_range'], 'currenciesAccepted' => 'EUR', 'address' => [ '@type' => 'PostalAddress', 'streetAddress' => $centre['street'], 'postalCode' => $centre['postal_code'], 'addressLocality' => $centre['city'], 'addressRegion' => $seo['region'], 'addressCountry' => $seo['country'], ], 'areaServed' => collect($seo['area_served']) ->map(fn (string $place) => ['@type' => 'Place', 'name' => $place]) ->all(), 'openingHoursSpecification' => collect($seo['opening_hours']) ->map(fn (array $slot) => [ '@type' => 'OpeningHoursSpecification', 'dayOfWeek' => $slot['days'], 'opens' => $slot['opens'], 'closes' => $slot['closes'], ]) ->all(), 'sameAs' => collect(config('site.social'))->pluck('url')->values()->all(), ]; // Coordonnées GPS : uniquement si elles ont été renseignées. if (filled($seo['latitude']) && filled($seo['longitude'])) { $data['geo'] = [ '@type' => 'GeoCoordinates', 'latitude' => (float) $seo['latitude'], 'longitude' => (float) $seo['longitude'], ]; } if (filled($legal['vat'])) { $data['vatID'] = $legal['vat']; } if (filled($legal['siret'])) { $data['identifier'] = ['@type' => 'PropertyValue', 'name' => 'SIRET', 'value' => $legal['siret']]; } // Note moyenne : reprise de la fiche Google, telle qu'affichée sur le site. if (($reviews['count'] ?? 0) > 0) { $data['aggregateRating'] = [ '@type' => 'AggregateRating', 'ratingValue' => (float) $reviews['rating'], 'reviewCount' => (int) $reviews['count'], 'bestRating' => 5, 'worstRating' => 1, ]; } // Catalogue : les tailles de box proposées, avec leur tarif mensuel. $data['makesOffer'] = collect(config('site.pricing')) ->map(fn (array $tier) => [ '@type' => 'Offer', 'name' => 'Box de stockage — '.$tier['label'], 'price' => $tier['price'], 'priceCurrency' => 'EUR', 'availability' => 'https://schema.org/InStock', 'priceSpecification' => [ '@type' => 'UnitPriceSpecification', 'price' => $tier['price'], 'priceCurrency' => 'EUR', 'unitCode' => 'MON', // tarif mensuel ], ]) ->all(); $data = array_filter($data, fn ($value) => $value !== null && $value !== [] && $value !== ''); @endphp