Le système de sitemap de l'application matos.live est conçu pour générer automatiquement des sitemaps XML optimisés pour le SEO, incluant toutes les pages statiques et le contenu dynamique (équipements). Le système est configurable, performant et extensible.
- Configuration :
config/sitemap.php- Configuration centralisée - Service :
app/Services/SitemapService.php- Logique métier - Contrôleur :
app/Http/Controllers/PageController.php- Endpoints HTTP - Commande :
app/Console/Commands/GenerateSitemap.php- Génération manuelle - Job :
app/Jobs/RegenerateSitemap.php- Régénération automatique - Observer :
app/Observers/EquipmentObserver.php- Déclenchement automatique
Le fichier config/sitemap.php contient toute la configuration du système :
return [
// Pages statiques
'static_pages' => [
[
'route' => 'home',
'priority' => '1.0',
'changefreq' => 'daily',
],
// ...
],
// Contenu dynamique
'dynamic_content' => [
'equipment' => [
'model' => \App\Models\Equipment::class,
'route' => 'equipments.show',
'priority' => '0.8',
'changefreq' => 'weekly',
'conditions' => [
'is_active' => true,
'is_available' => true,
],
'order_by' => 'updated_at',
'order_direction' => 'desc',
'select_fields' => ['id', 'updated_at'],
],
],
// Cache
'cache' => [
'enabled' => env('SITEMAP_CACHE_ENABLED', true),
'duration' => env('SITEMAP_CACHE_DURATION', 24), // heures
'key' => 'sitemap_content',
'generated_at_key' => 'sitemap_generated_at',
],
// Performance
'performance' => [
'max_urls_per_sitemap' => 50000,
'chunk_size' => 1000,
'timeout' => 300, // secondes
],
];# .env
SITEMAP_CACHE_ENABLED=true
SITEMAP_CACHE_DURATION=24
SITEMAP_AUTO_REGENERATION=trueGET /sitemap.xml
- Inclut toutes les pages statiques et le contenu dynamique
- Utilise le cache pour de meilleures performances
- Headers de cache appropriés
GET /sitemap-index.xml
- Index de tous les sitemaps disponibles
- Utile pour les gros sites (>50,000 URLs)
GET /sitemap-static.xml
- Pages statiques uniquement
- Pas de cache (génération à la demande)
GET /sitemap-{type}-{page}.xml
- Contenu dynamique paginé
- Exemple :
/sitemap-equipment-1.xml
# Sitemap principal
php artisan sitemap:generate
# Sitemap statique
php artisan sitemap:generate --type=static
# Sitemap dynamique (équipements, page 1)
php artisan sitemap:generate --type=dynamic --dynamic-type=equipment --page=1
# Sitemap index
php artisan sitemap:generate --type=index
# Forcer la régénération
php artisan sitemap:generate --forceuse App\Services\SitemapService;
$sitemapService = app(SitemapService::class);
// Générer le sitemap principal
$content = $sitemapService->generateMainSitemap();
// Générer le sitemap statique
$content = $sitemapService->generateStaticSitemap();
// Générer le sitemap dynamique
$content = $sitemapService->generateDynamicSitemap('equipment', 1);
// Vérifier le cache
if ($sitemapService->isCached()) {
$content = $sitemapService->getCachedSitemap();
}
// Vider le cache
$sitemapService->clearCache();Le sitemap se régénère automatiquement quand :
- Un équipement est créé/modifié/supprimé
- Un équipement devient actif/disponible
- L'équipement est restauré (soft delete)
Le délai de régénération est configurable (défaut : 5 minutes).
- Ajouter la route dans
routes/web.php - Ajouter la configuration dans
config/sitemap.php:
'static_pages' => [
// ... pages existantes
[
'route' => 'nouvelle-page',
'priority' => '0.6',
'changefreq' => 'monthly',
],
],- Ajouter la configuration dans
config/sitemap.php:
'dynamic_content' => [
'equipment' => [ /* config existante */ ],
'categories' => [
'model' => \App\Models\Category::class,
'route' => 'categories.show',
'priority' => '0.7',
'changefreq' => 'weekly',
'conditions' => ['is_active' => true],
'order_by' => 'updated_at',
'order_direction' => 'desc',
'select_fields' => ['id', 'updated_at'],
],
],- Créer un observer si nécessaire pour la régénération automatique
Modifier la configuration XML dans config/sitemap.php :
'xml' => [
'version' => '1.0',
'encoding' => 'UTF-8',
'namespace' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
'indent' => ' ',
],- Durée : 24 heures par défaut (configurable)
- Clés :
sitemap_contentetsitemap_generated_at - Désactivation :
SITEMAP_CACHE_ENABLED=false
- Limite : 50,000 URLs par sitemap
- Automatique : pour le contenu dynamique
- Index : génération automatique des sitemaps multiples
- Requêtes optimisées : sélection des champs nécessaires uniquement
- Conditions : filtrage au niveau base de données
- Ordre : tri par
updated_atpour les équipements
X-Sitemap-Cached: true/false
X-Sitemap-Generated-At: 2024-01-01T12:00:00.000Z
Les jobs de régénération automatique génèrent des logs :
[INFO] Sitemap regenerated successfully via job.
[ERROR] Failed to regenerate sitemap via job: [message]
# Exécuter les tests du sitemap
php artisan test --filter=SitemapTestLe fichier public/robots.txt référence le sitemap :
Sitemap: https://matos.live/sitemap.xml
- Google Search Console : Ajouter le sitemap
- Bing Webmaster Tools : Ajouter le sitemap
- Autres : Soumettre l'URL du sitemap
- Vérifier que les équipements sont actifs et disponibles
- Vérifier la configuration des conditions
- Consulter les logs d'erreur
- Vérifier la configuration du cache
- Vider le cache manuellement :
php artisan cache:clear - Vérifier les permissions de stockage
- Réduire la durée du cache
- Augmenter la pagination
- Optimiser les requêtes de base de données
- Vérifier que les jobs sont traités
- Vérifier la configuration de la queue
- Consulter les logs des jobs
# Vider le cache du sitemap
php artisan sitemap:generate --force
# Vérifier la queue
php artisan queue:work
# Consulter les logs
tail -f storage/logs/laravel.log- Surveillance : Vérifier la génération automatique
- Performance : Monitorer les temps de génération
- SEO : Vérifier l'indexation des nouvelles pages
- Configuration : Adapter selon les besoins SEO
- Contenu : Ajouter de nouveaux types de contenu
- Performance : Optimiser selon la croissance
Pour toute question ou problème :
- Consulter cette documentation
- Vérifier les logs d'erreur
- Tester avec les commandes Artisan
- Consulter les tests pour des exemples d'utilisation