Documentation des Critères SEO - Système d'Analyse KardolStrapi

Version : 1.0
Date : 25 juillet 2025
Projet : KardolStrapi - Analyse SEO automatisée

Table des Matières

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×24 pts
Mot-clé dans le slug×24 pts
Mot-clé dans le premier paragraphe×24 pts
Pertinence sémantique×24 pts
Nombre de mots×24 pts
Structure Hn×24 pts
Liens internes×24 pts
Mot-clé dans la méta-description×1.53 pts
Densité du mot-clé×1.53 pts
Longueur du titre SEO×1.53 pts
Longueur de la méta-description×1.53 pts
Mot-clé dans les sous-titres×12 pts
Liens externes×12 pts
Attributs alt des images×12 pts
Simplicité du slug×12 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 :
  1. Extraction des sections dynamicZone
  2. Suppression des balises HTML
  3. 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

  1. Évaluation individuelle : Chaque critère retourne un score de 0 à 2
  2. Application de la pondération : Score × coefficient de pondération
  3. Sommation : Total des scores pondérés
  4. 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() :

  1. Minuscules : Conversion en lowercase
  2. Suppression des accents : é→e, à→a, etc.
  3. Nettoyage : Suppression des caractères spéciaux
  4. Normalisation des séparateurs : Espaces et underscores → tirets
  5. Suppression des tirets : Pour comparaison finale

Choix de normalisation par critère

Logging et débogage

Fichier de log

Emplacement : /var/www/htdocs/virtuals/ari/web/release/last/logs/seo.log

Informations loggées

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