Documentation des Critères SEO - Système d'Analyse KardolStrapi
Version : 1.0
Date : 25 juillet 2025
Projet : KardolStrapi - Analyse SEO automatisée
Vue d'ensemble du système
Le système d'analyse SEO de KardolStrapi évalue 15 critères distincts pour calculer une note globale sur 48 points pondérés. Chaque critère est noté de 0 à 2 points selon des seuils prédéfinis, puis multiplié par un coefficient de pondération.
Zones d'analyse
L'analyse se concentre sur les sections dynamicZone du contenu Strapi pour une évaluation précise du contenu éditorial, excluant les éléments de navigation et de structure.
Pastilles de notation globale
🟢 Excellent
Score ≥ 38/48 (79%)
🟠 Moyen
Score 26-37/48 (54-77%)
🔴 Faible
Score < 26/48 (54%)
Système de pondération
Critère |
Pondération |
Points max |
Mot-clé dans le titre SEO | ×2 | 4 pts |
Mot-clé dans le slug | ×2 | 4 pts |
Mot-clé dans le premier paragraphe | ×2 | 4 pts |
Pertinence sémantique | ×2 | 4 pts |
Nombre de mots | ×2 | 4 pts |
Structure Hn | ×2 | 4 pts |
Liens internes | ×2 | 4 pts |
Mot-clé dans la méta-description | ×1.5 | 3 pts |
Densité du mot-clé | ×1.5 | 3 pts |
Longueur du titre SEO | ×1.5 | 3 pts |
Longueur de la méta-description | ×1.5 | 3 pts |
Mot-clé dans les sous-titres | ×1 | 2 pts |
Liens externes | ×1 | 2 pts |
Attributs alt des images | ×1 | 2 pts |
Simplicité du slug | ×1 | 2 pts |
Total maximum : 48 points pondérés
Critères détaillés
1. Mot-clé dans le titre SEO (×2)
Objectif : Vérifier la présence et la position du mot-clé dans la balise <title>
Barème de notation :
- 2 points : Mot-clé présent au début du titre
- 1 point : Mot-clé présent mais pas au début
- 0 point : Mot-clé absent du titre
Implémentation : Analyse de la balise <title>
avec recherche insensible à la casse via stripos()
2. Mot-clé dans la méta-description (×1.5)
Objectif : Vérifier la présence et la position du mot-clé dans la balise <meta name="description">
Barème de notation :
- 2 points : Mot-clé dans les 30 premiers caractères
- 1 point : Mot-clé présent après le 30ème caractère
- 0 point : Mot-clé absent
Implémentation : Extraction via regex et calcul de position avec stripos()
3. Mot-clé dans le slug (×2)
Objectif : Vérifier la présence du mot-clé dans l'URL normalisée
Barème de notation :
- 2 points : Tous les mots du mot-clé présents dans le slug
- 1 point : Au moins la moitié des mots du mot-clé présents
- 0 point : Moins de la moitié des mots présents
Logique spéciale : Pour les mots-clés composés, découpage par espaces/tirets et vérification proportionnelle
4. Mot-clé dans le premier paragraphe (×2)
Objectif : Vérifier la présence du mot-clé dans le premier paragraphe du contenu éditorial
Barème de notation :
- 2 points : Mot-clé présent dans les 100 premiers caractères
- 1 point : Mot-clé présent après les 100 premiers caractères
- 0 point : Mot-clé absent du premier paragraphe
Extraction du premier paragraphe :
- Extraction des sections dynamicZone
- Suppression des balises HTML
- Identification du premier paragraphe (avant le premier titre Hn ou entre deux titres)
5. Densité du mot-clé (×1.5)
Objectif : Calculer le pourcentage d'occurrence du mot-clé dans le contenu
Barème de notation :
- 2 points : Densité entre 0.5% et 1.5% (optimale)
- 1 point : Densité entre 0.3-0.49% ou 1.51-2% (moyenne)
- 0 point : Densité < 0.3% ou > 2% (faible ou excessive)
Calcul : (Nombre d'occurrences ÷ Nombre total de mots) × 100
Nettoyage du contenu : Suppression du JavaScript, CSS, et normalisation des espaces
6. Pertinence sémantique (×2)
Objectif : Évaluer la pertinence sémantique du contenu (actuellement simulé)
Barème de notation :
- 2 points : Score maximal par défaut (en attente d'implémentation d'analyse sémantique réelle)
7. Nombre de mots (×2)
Objectif : Vérifier que le contenu dispose d'un volume textuel suffisant
Barème de notation :
- 2 points : ≥ 300 mots
- 1 point : Entre 150 et 299 mots
- 0 point : < 150 mots
Comptage : Utilisation de str_word_count()
sur le contenu des sections dynamicZone
8. Structure des titres Hn (×2)
Objectif : Vérifier la hiérarchisation correcte des titres
Barème de notation :
- 2 points : H1 unique + présence de H2/H3
- 1 point : H1 unique mais peu de sous-titres
- 0 point : H1 absent ou multiple
Vérification : Comptage des balises H1, H2, H3 via preg_match_all()
9-15. Autres critères
Les critères restants (longueur titre/méta-description, liens internes/externes, alt images, sous-titres, simplicité slug) suivent des logiques similaires avec des seuils spécifiques adaptés à chaque métrique SEO.
Calcul de la note globale
Processus de calcul
- Évaluation individuelle : Chaque critère retourne un score de 0 à 2
- Application de la pondération : Score × coefficient de pondération
- Sommation : Total des scores pondérés
- Attribution de la pastille : Selon les seuils définis
Fonction principale
NoteSeo::calculerNoteGlobale($html, $options)
Paramètres :
- $html : Contenu HTML complet de la page
- $options : Array contenant keyword, slug, url, siteDomain
Retour :
- totalScore : Score total pondéré
- pastilleNoteSEO : Emoji de notation (🟢/🟠/🔴)
- details : Détails de chaque critère avec score pondéré
- infosNoteSEO : Résumé formaté pour l'interface utilisateur
Normalisation des données
Fonction de normalisation principale
La fonction normalize()
dans calculerNoteGlobale()
:
- Minuscules : Conversion en lowercase
- Suppression des accents : é→e, à→a, etc.
- Nettoyage : Suppression des caractères spéciaux
- Normalisation des séparateurs : Espaces et underscores → tirets
- Suppression des tirets : Pour comparaison finale
Choix de normalisation par critère
- Slug et premier paragraphe : Normalisation complète
- Densité et autres : Normalisation des accents uniquement
- Titre et méta-description : Pas de normalisation (recherche insensible à la casse)
Logging et débogage
Fichier de log
Emplacement : /var/www/htdocs/virtuals/ari/web/release/last/logs/seo.log
Informations loggées
- En-tête de session : Date, URL, slug, mot-clé
- Score global : Total pondéré et pastille
- Détail par critère : Score brut, pondération, score pondéré, détails
- Debug spécifique : Premier paragraphe extrait (500 premiers caractères)
Format de sortie
==== 2025-07-25 11:36:25 - Calcul SEO [URL] ====
Slug : [slug] | Mot-clé : [keyword]
Score global pondéré : [score] / 48 | Pastille : [emoji]
- critère : [score] / 2 (x[pond]) = [score_pond] | [détails]
Fin de la documentation - Version 1.0 - KardolStrapi SEO Analysis System