← Retour au lexique
📖 SEO Local

Local Business Schema

Balisage de données structurées Schema.org spécifique aux entreprises locales pour améliorer leur visibilité dans les résultats de recherche locale.

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.