DEPANNAGE_SITEMAP_VIDE.md 4.9 KB

🚨 DÉPANNAGE : Sitemap Vide

Problème

Le sitemap à l'URL https://www.duhaz.fr/sitemap.xml est vide ou ne contient aucune URL.

🔍 Causes possibles

  1. django.contrib.sites non configuré (cause la plus fréquente)
  2. Aucun article publié dans la base de données
  3. Migrations non appliquées
  4. Serveur non redémarré après les modifications

✅ Solution rapide (automatique)

Étape 1 : Exécuter le script de correction

cd /Users/duhaz/projets/blog-duhaz
source venv/bin/activate  # Si vous avez un venv
python scripts/fix_sitemap_sites.py

Ce script va :

  • ✅ Créer ou mettre à jour la table django_site
  • ✅ Configurer le domaine www.duhaz.fr
  • ✅ Vérifier la configuration

Étape 2 : Redémarrer le serveur

# En développement
python manage.py runserver

# En production (selon votre config)
systemctl restart gunicorn
# ou
supervisorctl restart duhaz_blog

Étape 3 : Vérifier le sitemap

Ouvrir dans le navigateur : https://www.duhaz.fr/sitemap.xml


🔧 Solution manuelle (si le script ne fonctionne pas)

1. Appliquer les migrations

python manage.py migrate

2. Configurer django.contrib.sites

python manage.py shell

Dans le shell Python :

from django.contrib.sites.models import Site

# Créer ou mettre à jour le site
try:
    site = Site.objects.get(id=1)
    site.domain = 'www.duhaz.fr'
    site.name = 'Mr Duhaz'
    site.save()
    print("✅ Site mis à jour")
except Site.DoesNotExist:
    Site.objects.create(id=1, domain='www.duhaz.fr', name='Mr Duhaz')
    print("✅ Site créé")

# Vérifier
print(Site.objects.all())

exit()

3. Vérifier les articles

python manage.py shell
from blog.models import Blog

# Compter les articles publiés
count = Blog.objects.filter(b_publier=True).count()
print(f"Articles publiés : {count}")

# Afficher les premiers
for blog in Blog.objects.filter(b_publier=True)[:5]:
    print(f"- {blog.b_titre}")

exit()

4. Redémarrer et tester

# Redémarrer le serveur
systemctl restart gunicorn

# Tester
curl https://www.duhaz.fr/sitemap.xml

🧪 Diagnostic complet

Pour identifier précisément le problème :

python scripts/diagnose_sitemap.py

Ce script vérifie :

  • ✅ Configuration de django.contrib.sites
  • ✅ SITE_ID dans settings.py
  • ✅ Nombre d'articles publiés
  • ✅ Nombre de catégories
  • ✅ Génération du sitemap

📋 Checklist de vérification

  • django.contrib.sites dans INSTALLED_APPS
  • django.contrib.sitemaps dans INSTALLED_APPS
  • SITE_ID = 1 dans settings.py
  • Migration migrate appliquée
  • Site créé dans la table django_site
  • Domaine = www.duhaz.fr
  • Au moins 1 article avec b_publier=True
  • Serveur redémarré
  • URL configurée dans urls.py

🔍 Vérifications manuelles

Vérifier la table django_site

-- Se connecter à la base de données
python manage.py dbshell

-- Vérifier la table
SELECT * FROM django_site;

-- Doit afficher :
-- id | domain          | name
-- 1  | www.duhaz.fr    | Mr Duhaz

Vérifier l'URL du sitemap

python manage.py shell
from django.urls import reverse
print(reverse('django.contrib.sitemaps.views.sitemap'))
# Doit afficher : /sitemap.xml

exit()

⚠️ Erreurs courantes

Erreur : "table django_site doesn't exist"

Solution :

python manage.py migrate

Erreur : "SITE_ID not defined"

Solution : Ajouter dans duhaz_blog/settings.py :

SITE_ID = 1

Sitemap vide mais pas d'erreur

Causes possibles :

  1. Aucun article avec b_publier=True
  2. Domaine du site incorrect (pas www.duhaz.fr)
  3. Cache non vidé

Solutions :

# Vider le cache
python manage.py shell
>>> from django.core.cache import cache
>>> cache.clear()
>>> exit()

# Redémarrer
systemctl restart gunicorn

🎯 Test final

Après correction, le sitemap doit contenir :

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.duhaz.fr/blog/</loc>
    <lastmod>2025-XX-XX</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.5</priority>
  </url>
  <url>
    <loc>https://www.duhaz.fr/blog/votre-article</loc>
    ...
  </url>
  ...
</urlset>

📞 Support

Si le problème persiste :

  1. Exécuter python scripts/diagnose_sitemap.py
  2. Consulter les logs Django
  3. Vérifier les permissions de la base de données
  4. S'assurer que le serveur a bien redémarré

📚 Scripts disponibles

  • scripts/diagnose_sitemap.py - Diagnostic complet
  • scripts/fix_sitemap_sites.py - Correction automatique
  • scripts/generate_sitemap_preview.py - Génération test

La cause la plus fréquente est django.contrib.sites non configuré.
Exécutez python scripts/fix_sitemap_sites.py pour corriger automatiquement !