Définition
Le Local Business Schema est un type de données structurées Schema.org qui permet aux entreprises locales de fournir des informations détaillées sur leur établissement aux moteurs de recherche. Ce balisage améliore la visibilité dans les résultats locaux, le Knowledge Panel Google et les rich snippets, en communiquant clairement les informations essentielles comme l’adresse, les horaires et les services.
Structure de base
JSON-LD complet
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Restaurant La Belle Vue",
"image": "https://restaurant-bellevue.fr/images/facade.jpg",
"url": "https://restaurant-bellevue.fr",
"telephone": "+33142123456",
"priceRange": "€€",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Avenue des Champs",
"addressLocality": "Paris",
"postalCode": "75008",
"addressRegion": "Île-de-France",
"addressCountry": "FR"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 48.8566,
"longitude": 2.3522
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "12:00",
"closes": "14:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"opens": "19:00",
"closes": "23:00"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "127"
}
}
Types spécifiques d’entreprises
Restaurant Schema
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Pizzeria Milano",
"servesCuisine": "Italian",
"hasMenu": "https://pizzeria-milano.fr/menu",
"acceptsReservations": "True",
"menu": {
"@type": "Menu",
"name": "Menu Principal",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Pizzas",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "Pizza Margherita",
"description": "Tomate, mozzarella, basilic",
"offers": {
"@type": "Offer",
"price": "12.50",
"priceCurrency": "EUR"
}
}
]
}
]
},
"paymentAccepted": ["Cash", "Credit Card", "Debit Card"],
"currenciesAccepted": "EUR"
}
Service professionnel
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Cabinet Comptable Dubois",
"@id": "https://comptable-dubois.fr/#organization",
"url": "https://comptable-dubois.fr",
"logo": "https://comptable-dubois.fr/logo.png",
"description": "Expert-comptable à Lyon spécialisé PME",
"areaServed": {
"@type": "GeoCircle",
"geoMidpoint": {
"@type": "GeoCoordinates",
"latitude": 45.764043,
"longitude": 4.835659
},
"geoRadius": "30000"
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Services Comptables",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Tenue de comptabilité",
"description": "Gestion complète de votre comptabilité"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Déclarations fiscales",
"description": "Préparation et envoi des déclarations"
}
}
]
}
}
Propriétés essentielles
Informations de base
# Propriétés obligatoires et recommandées
local_business_properties = {
'required': {
'@type': 'Type d\'entreprise spécifique',
'name': 'Nom officiel de l\'entreprise',
'address': 'Adresse physique complète'
},
'highly_recommended': {
'telephone': 'Numéro principal',
'openingHoursSpecification': 'Horaires détaillés',
'url': 'Site web officiel',
'geo': 'Coordonnées GPS précises',
'image': 'Photos de l\'établissement'
},
'additional_value': {
'priceRange': 'Gamme de prix (€, €€, €€€)',
'paymentAccepted': 'Moyens de paiement',
'aggregateRating': 'Note moyenne et avis',
'hasMap': 'URL Google Maps',
'sameAs': 'Profils réseaux sociaux'
}
}
Horaires complexes
{
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "09:00",
"closes": "12:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "14:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "09:00",
"closes": "12:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Friday",
"opens": "14:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "12:00"
}
],
"specialOpeningHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"validFrom": "2024-12-25",
"validThrough": "2024-12-25",
"opens": "00:00",
"closes": "00:00",
"description": "Fermé le jour de Noël"
}
]
}
Implémentation WordPress
Plugin automatisé
<?php
// Fonction génération Local Business Schema
function generate_local_business_schema() {
$schema = array(
'@context' => 'https://schema.org',
'@type' => get_option('business_type', 'LocalBusiness'),
'name' => get_option('business_name'),
'url' => home_url(),
'logo' => get_option('business_logo'),
'telephone' => get_option('business_phone'),
'email' => get_option('business_email'),
'address' => array(
'@type' => 'PostalAddress',
'streetAddress' => get_option('business_street'),
'addressLocality' => get_option('business_city'),
'postalCode' => get_option('business_zip'),
'addressCountry' => get_option('business_country')
),
'geo' => array(
'@type' => 'GeoCoordinates',
'latitude' => get_option('business_lat'),
'longitude' => get_option('business_lng')
)
);
// Ajouter horaires si disponibles
$opening_hours = get_option('business_hours');
if ($opening_hours) {
$schema['openingHoursSpecification'] = format_opening_hours($opening_hours);
}
// Ajouter avis si disponibles
$ratings = get_aggregate_ratings();
if ($ratings) {
$schema['aggregateRating'] = array(
'@type' => 'AggregateRating',
'ratingValue' => $ratings['average'],
'reviewCount' => $ratings['count']
);
}
return $schema;
}
// Injection dans le header
add_action('wp_head', function() {
$schema = generate_local_business_schema();
echo '<script type="application/ld+json">' . json_encode($schema) . '</script>';
});
?>
Multi-locations
Organization avec départements
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Chaîne de Magasins Example",
"url": "https://example.com",
"department": [
{
"@type": "Store",
"name": "Magasin Paris Centre",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Rue de Rivoli",
"addressLocality": "Paris",
"postalCode": "75001"
},
"telephone": "+33142123456",
"openingHours": "Mo-Sa 09:00-19:00"
},
{
"@type": "Store",
"name": "Magasin Lyon Part-Dieu",
"address": {
"@type": "PostalAddress",
"streetAddress": "456 Avenue Lacassagne",
"addressLocality": "Lyon",
"postalCode": "69003"
},
"telephone": "+33478456789",
"openingHours": "Mo-Sa 10:00-20:00"
}
]
}
Tests et validation
Outils de test
// Test automatisé Schema
function validateLocalBusinessSchema(schemaData) {
const errors = [];
const warnings = [];
// Vérifications obligatoires
if (!schemaData['@type']) {
errors.push('Missing @type property');
}
if (!schemaData.name) {
errors.push('Missing business name');
}
if (!schemaData.address) {
errors.push('Missing address information');
}
// Vérifications recommandées
if (!schemaData.telephone) {
warnings.push('Phone number recommended for local businesses');
}
if (!schemaData.openingHoursSpecification) {
warnings.push('Opening hours improve local visibility');
}
if (!schemaData.geo) {
warnings.push('GPS coordinates help with map listings');
}
// Format validations
if (schemaData.telephone && !isValidPhone(schemaData.telephone)) {
errors.push('Invalid phone format - use international format');
}
if (schemaData.geo) {
if (!isValidLatitude(schemaData.geo.latitude)) {
errors.push('Invalid latitude value');
}
if (!isValidLongitude(schemaData.geo.longitude)) {
errors.push('Invalid longitude value');
}
}
return {
valid: errors.length === 0,
errors: errors,
warnings: warnings
};
}
Google Rich Results Test
# Script test rich results
def test_local_business_markup(url):
"""
Teste le markup Local Business via l'API
"""
# Utiliser Google Rich Results Test API
test_url = f"https://search.google.com/test/rich-results?url={url}"
# Vérifications spécifiques Local Business
checks = {
'name_present': 'Business name displayed',
'address_complete': 'Full address provided',
'phone_clickable': 'Phone number in tel: format',
'hours_structured': 'Opening hours properly formatted',
'geo_coordinates': 'GPS coordinates included',
'rating_valid': 'Rating between 1-5',
'image_resolution': 'Image at least 112x112px'
}
return run_structured_data_test(url, checks)
Impact SEO local
Bénéfices visibilité
// Améliorations attendues avec Local Business Schema
const localSchemaImpact = {
'knowledge_panel': {
'probability': '+60% chance d\'apparition',
'elements': ['Logo', 'Hours', 'Phone', 'Reviews'],
'user_trust': 'Credibility boost'
},
'local_pack': {
'ranking_factor': 'Confirmed positive signal',
'rich_snippets': 'Enhanced listings',
'click_through': '+20% CTR average'
},
'voice_search': {
'compatibility': 'Structured data helps assistants',
'queries': '"Near me" searches optimized',
'actions': 'Direct calling/directions enabled'
},
'mobile_experience': {
'one_tap_actions': 'Call, directions, website',
'map_integration': 'Automatic pin placement',
'hours_display': 'Open/Closed status'
}
};
Le Local Business Schema est essentiel pour maximiser la visibilité locale, améliorer l’expérience utilisateur et faciliter les actions directes depuis les résultats de recherche.