Lecteur Markdown
SITEMAP_DOCUMENTATION
Sitemap Generator - Résumé du refactoring #
Avantages principaux #
1. Architecture MVC-like
- Classe `SitemapGenerator` pour la logique
- Controller `sitemap.php` pour l'interface
- Configs JSON par plugin (séparation données/code)
2. Sécurité renforcée
- Prepared statements implicites via mysqli
- Validation des données
- Protection contre les injections
3. Modularité
- Chaque plugin définit ses propres URLs
- Format JSON standard et extensible
- Facile d'activer/désactiver des plugins
4. Standards Google
- XML conforme Sitemap Protocol 0.9
- Support Google Images (galeries)
- lastmod, changefreq, priority
5. Interface moderne
- Admin panel avec listing des plugins
- Génération en un clic
- Sauvegarde directe en sitemap.xml
- Styles CSS variables (AEGIS theme)
📦 Fichiers livrés #
Core files #
- SitemapGenerator.class.php - Classe principale (10KB)
- sitemap.php - Controller plugin (5.7KB)
- sitemap.fr.inc.php - Locale française (1.9KB)
- SITEMAP_INSTALLATION.md - Guide complet (7.5KB)
Example configs (JSON) #
- content.sitemap.json - Pages content
- gallery.sitemap.json - Galeries avec images
- forums.sitemap.json - Forums
- products.sitemap.json - Produits
- blogs.sitemap.json - Articles blog
📂 Structure d'installation #
/plugins/sitemap/
├── sitemap.php
├── /lib/
│ └── SitemapGenerator.class.php
└── /locale/
└── sitemap.fr.inc.php
/plugins/content/conf/
└── content.sitemap.json
/plugins/gallery/conf/
└── gallery.sitemap.json
/plugins/forums/conf/
└── forums.sitemap.json
... etc pour chaque plugin
🔧 Configuration JSON - Format #
Structure de base #
{
"enabled": true,
"priority": 0.8,
"changefreq": "weekly",
"sources": [
{ /* source config */ }
],
"notes": "Description optionnelle"
}
Types de sources supportés #
1. Database (BDD) #
{
"type": "database",
"table": "nom_table",
"column_id": "id", // OU column_slug
"column_language": "language", // Optionnel
"column_date": "date", // Optionnel (lastmod)
"column_moddate": "moddate", // Optionnel (prioritaire)
"url_pattern": "/page.php?id=%s",
"where": "published = 1" // Optionnel
}
Multi-paramètres:
{
"url_pattern": "/page.php?lang=%s&id=%s",
"url_params": ["language", "id"]
}
2. Folder (Filesystem) #
Sous-dossiers:
{
"type": "folder",
"path": "user/gallery/",
"scan_type": "subfolders",
"url_pattern": "/gallery.php?Path=%s"
}
Fichiers:
{
"type": "folder",
"path": "documents/",
"scan_type": "files",
"extensions": ["pdf", "doc"],
"url_pattern": "/doc.php?file=%s"
}
3. Static (URL unique) #
{
"type": "static",
"url": "/index.php?obj=edito",
"priority": 0.8
}
4. Images (Google Images) #
{
"images": {
"enabled": true,
"physical_path": "user/gallery/%s/",
"extensions": ["jpg", "png", "gif", "webp"]
}
}
🚀 Quick Start #
Installation rapide #
# 1. Créer structure
mkdir -p plugins/sitemap/lib plugins/sitemap/locale
# 2. Copier fichiers
cp SitemapGenerator.class.php plugins/sitemap/lib/
cp sitemap.php plugins/sitemap/
cp sitemap.fr.inc.php plugins/sitemap/locale/
# 3. Créer configs JSON pour chaque plugin
cp content.sitemap.json plugins/content/conf/
cp gallery.sitemap.json plugins/gallery/conf/
# ... etc
# 4. Tester
# Accéder à: ?obj=sitemap.php
Utilisation #
1. Admin panel: `?obj=sitemap.php`
2. Liste plugins: Automatique
3. Générer: Un clic
4. Sauvegarder: Bouton "Sauvegarder dans sitemap.xml"
5. Soumettre à Google: Via Search Console
📊 Priorités recommandées #
| Type contenu | Priority | Changefreq |
|--------------|----------|------------|
| Homepage | 1.0 | daily |
| Content | 0.9 | weekly |
| Products | 0.8 | weekly |
| Blog | 0.8 | weekly |
| Edito | 0.8 | monthly |
| Galleries | 0.6 | monthly |
| FAQ | 0.5 | monthly |
| Forums | 0.2 | weekly |
🎨 Features principales #
Multi-langue #
Support natif des sites multilingues via `url_params`:
{
"url_pattern": "/page.php?lang=%s&id=%s",
"url_params": ["language", "id"]
}
Google Images #
Balises `<image:image>` automatiques pour galeries:
<url>
<loc>https://site.com/gallery.php?Path=Photos</loc>
<image:image>
<image:loc>https://site.com/user/gallery/Photos/img1.jpg</image:loc>
</image:image>
</url>
Filtrage BDD #
Clause WHERE pour filtrer les résultats:
{
"where": "published = 1 AND archived = 0"
}
Dates lastmod #
Utilise `column_date` ou `column_moddate` (prioritaire):
{
"column_date": "date_creation",
"column_moddate": "date_modification"
}
🔍 Différences avec l'ancien système #
Ancien (sitemap.php alpha) #
- ❌ Code spaghetti dans un seul fichier
- ❌ URLs hardcodées dans le code
- ❌ Pas de gestion des images
- ❌ Pas de multi-langue
- ❌ Pas de filtrage BDD
- ❌ lastmod fixe (2007!)
Nouveau (refactoré) #
- ✅ Architecture MVC propre
- ✅ Configs JSON par plugin
- ✅ Support Google Images
- ✅ Multi-langue natif
- ✅ Filtrage BDD flexible
- ✅ lastmod dynamique depuis BDD
🐛 Troubleshooting #
Plugin ne s'affiche pas #
→ Vérifie que le JSON est dans `/plugins/[nom]/conf/[nom].sitemap.json`
→ Pas juste `sitemap.json`, mais `[nom].sitemap.json`
Erreur Database query #
→ Vérifie les noms de tables/colonnes dans le JSON
→ Teste la query SQL manuellement
Images manquantes #
→ Vérifie `physical_path` pointe vers le bon dossier
→ Vérifie les extensions dans le tableau
Sitemap vide #
→ Vérifie `"enabled": true` dans les JSON
→ Vérifie les clauses WHERE si présentes
📈 Prochaines étapes suggérées #
1. Tester avec 2-3 plugins d'abord
2. Valider le XML généré (validator.w3.org)
3. Ajouter tous les plugins pertinents
4. Soumettre à Google Search Console
5. Automatiser avec cron (régénération mensuelle)
Exemple cron job #
# Régénérer sitemap tous les 1er du mois à 3h
0 3 1 * * wget -q -O - "https://site.com/admin?obj=sitemap.php&generate=1&save=1"
🎓 Points d'extension futurs #
Cache #
Ajouter un système de cache pour éviter de régénérer à chaque visite:
$cache_file = $cfg[20].'/sitemap.cache.xml';
if (file_exists($cache_file) && (time() - filemtime($cache_file) < 86400)) {
return file_get_contents($cache_file);
}
Sitemap index #
Pour sites énormes (>50k URLs), générer plusieurs sitemaps:
<sitemapindex>
<sitemap><loc>sitemap-content.xml</loc></sitemap>
<sitemap><loc>sitemap-products.xml</loc></sitemap>
</sitemapindex>
Video support #
Ajouter support balises `<video:video>`:
{
"video": {
"enabled": true,
"title_column": "title",
"description_column": "description",
"thumbnail_url_pattern": "/thumbnails/%s.jpg"
}
}
News sitemap #
Pour actus récentes (<48h):
{
"news": {
"enabled": true,
"publication_name": "BeamReactor News",
"publication_language": "fr"
}
}
✅ Validation #
Avant de mettre en prod:
1. Valider XML: https://www.xml-sitemaps.com/validate-xml-sitemap.html
2. Tester robots.txt: Ajouter `Sitemap: https://site.com/sitemap.xml`
3. Google Search Console: Soumettre le sitemap
4. Vérifier indexation: `site:beamreactor.com` dans Google
📝 Notes importantes #
- Naming convention: Les JSON doivent s'appeler `[plugin].sitemap.json`, pas juste `sitemap.json`
- Permissions: Le dossier racine doit être writable pour sauvegarder `sitemap.xml`
- Multi-langue: Utilise `url_params` array pour les URLs avec plusieurs paramètres
- Images: Uniquement pour galeries, pas pour tous les types de contenu
- Priorités: Restent subjectives, ajuste selon ton contenu
🎯 Résumé exécutif #
Ce refactoring apporte:
- Architecture moderne et maintenable
- Configs déclaratives (JSON)
- Support standards Google
- Extensibilité facile
- Interface admin intuitive
Compatible avec:
- BeamReactor 22+ ans d'historique
- MySQL/MariaDB
- PHP 7.4+
- Standards sitemap.org
Prêt pour:
- AEGIS IA
- Clients futurs de BeamReactor
- Sites multilingues
- E-commerce (produits)
- Galeries photos
- Blogs et forums
---
Tous les fichiers sont prêts à l'emploi - consulte `SITEMAP_INSTALLATION.md` pour le guide complet!