Intégration d'IA dans PrestaShop pour le SEO produit
Intégration d'IA dans PrestaShop pour le SEO produit

PrestaShop: IA + SEO = Fiches produit auto ! 5 étapes devs.

Salut à toi, développeur PrestaShop, intégrateur passionné ! Tu jongles quotidiennement avec les lignes de code, les templates et les modules pour sculpter des boutiques en ligne performantes. Aujourd’hui, on va explorer un terrain de jeu fascinant, là où la puissance de l’Intelligence Artificielle rencontre la rigueur du SEO, le tout orchestré par notre plateforme préférée : PrestaShop. Prépare-toi à transformer tes fiches produit en de véritables symphonies optimisées, rédigées (presque) toutes seules !

Imagine PrestaShop comme un grand orchestre symphonique. Chaque module est un musicien spécialisé, chaque template une partition qui dicte comment la musique (ton contenu, ton design) doit être jouée. Le SEO, c’est l’acoustique de la salle de concert, cruciale pour que ta musique atteigne les oreilles du public avec clarté et résonance. Mais que se passerait-il si nous pouvions introduire un chef d’orchestre visionnaire, une Intelligence Artificielle, capable de composer instantanément des partitions parfaites, optimisées pour la meilleure résonance possible ? C’est exactement ce que nous allons faire en cinq étapes clés pour développeurs.

La tâche de rédiger des fiches produit uniques, pertinentes et optimisées pour le SEO pour un catalogue conséquent est souvent fastidieuse et chronophage. Mais l’IA, notre nouveau chef d’orchestre, change la donne. Elle peut analyser les caractéristiques d’un produit, comprendre les intentions de recherche des utilisateurs et générer des descriptions, des titres et des balises meta qui feront chanter tes produits sur Google. Suis le guide !


Étape 1 : Comprendre le Rôle de l’IA (Le Chef d’Orchestre Visionnaire)

Avant de plonger dans le code, il est essentiel de bien saisir ce que l’IA peut apporter à ton orchestre PrestaShop. Notre chef d’orchestre IA n’est pas là pour remplacer les musiciens, mais pour les guider, leur fournir des partitions de qualité supérieure et garantir que chaque note (chaque mot de ta fiche produit) contribue à une mélodie harmonieuse et optimisée.

Qu’est-ce que l’IA apporte à tes fiches produit ?

  • Gain de temps colossal : Imagine générer des centaines de descriptions en un temps record. Finies les heures passées à reformuler des phrases pour chaque variante de produit.
  • Optimisation SEO améliorée : L’IA peut identifier les mots-clés pertinents, les intégrer naturellement et structurer le contenu de manière à plaire aux moteurs de recherche. Elle aide à ajuster l’acoustique de ta salle de concert.
  • Uniformité et qualité : Garantir un ton de voix et un niveau de qualité constant sur tout ton catalogue, même si tu as des milliers de produits.
  • Personnalisation : Potentiellement, l’IA peut adapter les descriptions en fonction de segments de clients ou de campagnes spécifiques.

Le but n’est pas de laisser l’IA faire tout le travail sans supervision. Comme un bon chef d’orchestre, l’IA propose une base solide, mais l’oreille humaine du développeur ou du marketeur reste indispensable pour affiner la composition finale. C’est une synergie, pas une substitution. Pour approfondir les bases du SEO pour PrestaShop, tu peux consulter notre article sur développer un module IA.


Étape 2 : Préparer Ton Orchestre PrestaShop (Les Partitions Existantes)

Avant d’introduire notre chef d’orchestre IA, nous devons nous assurer que notre orchestre PrestaShop est prêt à recevoir de nouvelles partitions. Cela implique de s’assurer que les données produit sont bien structurées et accessibles. Pense à vérifier la qualité de tes instruments avant le concert.

Assurer la qualité des données produit

L’IA a besoin de « matière première » de qualité pour générer des contenus pertinents. Plus tes données produit sont riches et structurées (nom, catégorie, attributs, caractéristiques, marque, prix, etc.), plus la génération sera précise et utile.

  • Nom du produit : Clair et concis.
  • Description courte : Souvent utilisée comme base.
  • Caractéristiques : Taille, couleur, matière, spécifications techniques, etc. Chaque détail est une note cruciale pour l’IA.
  • Catégorie : Indispensable pour le contexte.
  • Mots-clés cibles : Si tu en as déjà pour tes produits, ils peuvent guider l’IA.

Nettoie et enrichis tes données produit existantes. C’est la fondation sur laquelle l’IA va construire. Sans bonnes données, l’IA, même la plus puissante, produira des résultats médiocres.

Choisir ton moteur d’IA

Il existe plusieurs « chefs d’orchestre » IA disponibles. Les plus connus sont :.

  • OpenAI (GPT-3, GPT-4) : Très performant, polyvalent. C’est souvent le choix par défaut pour sa capacité à comprendre et générer du texte de haute qualité.
  • Google AI (PaLM, Gemini) : Une alternative robuste.
  • Hugging Face : Pour des modèles plus spécifiques ou si tu veux héberger toi-même.

Pour cet article, nous partirons du principe que tu utiliseras une API distante, comme celle d’OpenAI, car c’est la solution la plus simple à intégrer pour la plupart des développeurs. Tu devras t’inscrire et obtenir une clé API, c’est ton passeport pour inviter le chef d’orchestre. Plus d’informations sur l’API d’OpenAI peuvent être trouvées sur Docs PrestaShop officielles.


Étape 3 : Créer le Module IA (Le Nouveau Musicien Virtuose)

Pour que notre chef d’orchestre IA puisse interagir avec PrestaShop, nous devons lui donner un instrument : un module PrestaShop dédié. Ce module sera le « traducteur » entre PrestaShop et l’API IA, ainsi que le point d’entrée pour lancer la génération de contenu. C’est notre nouveau musicien virtuose qui va jouer la partition de l’IA.

Structure d’un module PrestaShop simple

Si tu as déjà créé un module, cette partie te sera familière. Pour les débutants, un module PrestaShop est un dossier dans /modules contenant au minimum un fichier PHP principal et un fichier config.xml.


monia_product_generator/
├── monia_product_generator.php
├── config.xml
├── views/
│   ├── templates/
│   │   ├── admin/
│   │   │   └── configure.tpl  (Interface de configuration du module)
│   │   └── hook/
│   │       └── displayAdminProductsExtra.tpl (Template pour le hook)
│   └── js/
│       └── scripts.js
│   └── css/
│       └── style.css
├── controllers/
│   └── admin/
│       └── AdminMoniaProductGeneratorController.php (Contrôleur pour l'action Ajax)
├── classes/
│   └── AiService.php (Classe pour l'appel API IA)

monia_product_generator.php (Le fichier principal du module) :
Ce fichier gère l’installation, la désinstallation et les hooks.

Notre module aura besoin de :.

  • Méthode install() : Pour enregistrer les hooks nécessaires (par exemple, displayAdminProductsExtra pour ajouter un bouton sur la fiche produit admin).
  • Méthode uninstall() : Pour nettoyer après lui.
  • Méthode getContent() : Pour l’interface de configuration du module (où tu mettras ta clé API, les paramètres par défaut de l’IA, etc.).
  • Méthode hookDisplayAdminProductsExtra() : C’est ici que nous allons injecter un bouton « Générer avec l’IA » sur la page d’édition d’un produit. Ce hook te permet d’ajouter du contenu supplémentaire à la page produit de l’administration. Si tu souhaites maîtriser les hooks PrestaShop, nous avons un guide détaillé sur améliorer vos descriptions produit.

classes/AiService.php (L’interpréteur du chef d’orchestre) :
C’est ici que la magie opère. Cette classe PHP sera responsable de la communication avec l’API de l’IA.


apiKey = $apiKey;
    }

    public function generateProductDescription($productData, $language = 'fr')
    {
        $prompt = $this->buildPrompt($productData, $language);

        $headers = [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $this->apiKey,
        ];

        $data = [
            'model' => 'gpt-3.5-turbo', // Ou 'gpt-4' si tu y as accès
            'messages' => [['role' => 'user', 'content' => $prompt]],
            'temperature' => 0.7, // Créativité de l'IA (0.0 à 1.0)
            'max_tokens' => 500,  // Longueur maximale de la réponse
        ];

        $ch = curl_init($this->apiUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode !== 200) {
            // Gérer les erreurs de l'API
            error_log('AI API Error: ' . $response);
            return false;
        }

        $responseData = json_decode($response, true);
        return $responseData['choices'][0]['message']['content'] ?? false;
    }

    private function buildPrompt($productData, $language)
    {
        // C'est le cœur de l'interaction ! Ton "prompt engineering" est la clef.
        // Plus ton prompt est précis, meilleures seront les descriptions.
        $prompt = "En tant qu'expert en SEO et rédacteur de fiches produit, rédige une description longue et une description courte optimisées pour le SEO en {$language} pour le produit suivant :\n\n";
        $prompt .= "Nom : " . $productData['name'] . "\n";
        if (!empty($productData['short_description'])) {
            $prompt .= "Description courte existante : " . $productData['short_description'] . "\n";
        }
        $prompt .= "Caractéristiques : " . implode(', ', $productData['features']) . "\n";
        $prompt .= "Catégorie : " . $productData['category'] . "\n";
        if (!empty($productData['brand'])) {
            $prompt .= "Marque : " . $productData['brand'] . "\n";
        }
        $prompt .= "Mots-clés cibles : {$productData['keywords']}\n\n"; // À récupérer depuis les métadonnées produit ou via configuration
        $prompt .= "La description longue doit être engageante, inclure des avantages pour le client et intégrer naturellement les mots-clés. Elle doit faire au moins 200 mots et être structurée en paragraphes. La description courte doit être accrocheuse et faire moins de 100 mots. Retourne le texte sous la forme 'DESCRIPTION_LONGUE::[contenu]::DESCRIPTION_COURTE::[contenu]'.";

        return $prompt;
    }
}

controllers/admin/AdminMoniaProductGeneratorController.php (Le chef d’orchestre sur scène) :
Ce contrôleur gérera les requêtes Ajax de l’administration pour déclencher la génération.

Quand l’utilisateur clique sur le bouton « Générer avec l’IA » dans la fiche produit, une requête Ajax sera envoyée à ce contrôleur. Il récupérera les informations du produit, appellera AiService::generateProductDescription() et renverra le résultat au navigateur.

Code de développement module IA PrestaShop

 » alt= »Interface d’administration PrestaShop avec un bouton pour la génération IA » title= »Bouton de génération IA dans la fiche produit » />

Exemple d’intégration du bouton de génération IA dans la fiche produit.

Configuration du module

Ton module devra avoir une page de configuration où tu pourras saisir la clé API de l’IA et d’autres paramètres globaux (modèle IA à utiliser, langue par défaut, instructions de prompt génériques). C’est le pupitre où le chef d’orchestre ajuste ses préférences.


Étape 4 : Intégration et Override de Template (Adapter la Partition)

Maintenant que notre musicien IA est prêt à générer des descriptions, il faut les afficher sur les fiches produit côté front-office (et pourquoi pas, les injecter dans l’admin). C’est là qu’intervient l’override de template, une technique essentielle pour tout développeur PrestaShop. Nous allons adapter la partition existante pour y inclure les nouvelles mélodies de l’IA.

Overrider le template de fiche produit

Par défaut, les descriptions de produit sont affichées via des fichiers Twig (dans PrestaShop 1.7+) ou TPL (pour les versions plus anciennes) dans le dossier de ton thème. Le fichier clé est généralement product.tpl ou des partials comme product-details.tpl, product-cover-thumbnails.tpl, etc. dans /themes/ton_theme/templates/catalog/.

Pour ne pas modifier directement les fichiers du thème parent (ce qui rendrait les mises à jour difficiles), tu dois utiliser la technique d’override.

  1. Identifie le fichier à modifier :

    Les descriptions longue et courte se trouvent généralement dans /themes/classic/templates/catalog/_partials/product-details.tpl ou directement dans /themes/classic/templates/catalog/product.tpl pour PrestaShop 1.7+. Pour les versions antérieures, c’est souvent dans /themes/ton_theme/product.tpl.

    Pour la description longue, tu cherches une balise telle que :.

    
                
    {$product.description nofilter}

    Et pour la description courte :.

    
                
    {$product.description_short nofilter}
  2. Crée le dossier d’override dans ton thème enfant (ou thème actuel) :

    Si tu utilises un thème enfant (ce qui est fortement recommandé), crée la même arborescence de dossiers. Par exemple, si tu veux overrider /themes/classic/templates/catalog/_partials/product-details.tpl, tu créeras :

    
                /themes/ton_theme_enfant/templates/catalog/_partials/product-details.tpl
            

    Copie le contenu original du fichier product-details.tpl dans ton nouveau fichier d’override.

  3. Modifie le template pour afficher le contenu généré par l’IA :

    Le but ici est d’avoir la possibilité d’afficher le contenu généré par l’IA au lieu du contenu manuel, ou en complément. Tu pourrais, par exemple, ajouter un nouveau champ à la table ps_product_lang pour stocker la description IA, ou récupérer le contenu généré directement via ton module (ce qui est plus complexe pour l’affichage frontal direct sans modification de l’objet Produit).

    Option la plus propre (intégration dans l’objet Produit) :
    La meilleure approche serait que le module IA, après génération, mette à jour les champs description et description_short de l’objet Product. Ainsi, le template existant n’aurait pas besoin d’être modifié, car il afficherait déjà les nouvelles descriptions. Ton module AdminMoniaProductGeneratorController.php devrait donc :

    1. Appeler AiService pour générer le contenu.
    2. Charger l’objet Product correspondant à l’ID.
    3. Mettre à jour $product->description[$id_lang] et $product->description_short[$id_lang] avec le contenu généré.
    4. Appeler $product->update().

    Cela garantit que les descriptions générées sont stockées dans la base de données de PrestaShop et utilisées partout où les descriptions de produit sont affichées. C’est comme s’assurer que les nouvelles partitions du chef d’orchestre sont bien intégrées au répertoire officiel de l’orchestre.

    Si tu souhaites afficher une version « prévisualisation » sans sauvegarder immédiatement, tu pourrais utiliser Smarty pour vérifier si une variable spécifique (passée via le hook displayProductExtraContent ou une surcharge de contrôleur) est présente et afficher le contenu de l’IA si elle l’est. C’est plus avancé et demande de mieux comprendre comment surcharger les contrôleurs PrestaShop. Pour apprendre comment overrider un contrôleur dans PrestaShop, tu peux consulter stratégie SEO avec Gemini AI.

Intelligence artificielle générant des descriptions produit

 » alt= »Schéma d’override de template PrestaShop » title= »Structure d’override de template » />

Visualisation de la structure d’override d’un template PrestaShop.

Mettre en place la logique d’enregistrement

Ton contrôleur d’administration pour la génération IA (AdminMoniaProductGeneratorController.php) est l’endroit idéal pour gérer l’enregistrement des descriptions générées.


module = 'monia_product_generator';
        $this->lang = true; // Pour gérer les langues
        parent::__construct();
    }

    public function ajaxProcessGenerateDescription()
    {
        $id_product = (int)Tools::getValue('id_product');
        $id_lang = (int)Tools::getValue('id_lang'); // Langue de génération
        $product = new Product($id_product, false, $id_lang);

        if (!Validate::isLoadedObject($product)) {
            die(json_encode(['success' => false, 'message' => 'Produit introuvable.']));
        }

        // Récupérer la clé API depuis la configuration du module
        $apiKey = Configuration::get('MONIA_AI_API_KEY');
        if (!$apiKey) {
            die(json_encode(['success' => false, 'message' => 'Clé API IA non configurée.']));
        }

        $aiService = new AiService($apiKey);

        // Préparer les données pour le prompt
        $productData = [
            'name' => $product->name[$id_lang],
            'short_description' => $product->description_short[$id_lang],
            'features' => $this->getProductFeatures($id_product, $id_lang), // Méthode à créer
            'category' => Category::getCategoryName((int)$product->getDefaultCategory(), $id_lang),
            'brand' => $product->manufacturer_name,
            'keywords' => $this->getMetaKeywords($id_product, $id_lang), // Méthode à créer
        ];

        $generatedContent = $aiService->generateProductDescription($productData, Language::getIsoById($id_lang));

        if ($generatedContent) {
            // Supposons que le format de sortie est "DESCRIPTION_LONGUE::[contenu]::DESCRIPTION_COURTE::[contenu]"
            $parts = explode('::', $generatedContent);
            if (count($parts) === 4 && $parts[0] === 'DESCRIPTION_LONGUE' && $parts[2] === 'DESCRIPTION_COURTE') {
                $longDescription = trim($parts[1]);
                $shortDescription = trim($parts[3]);

                $product->description[$id_lang] = $longDescription;
                $product->description_short[$id_lang] = $shortDescription;
                $product->meta_description[$id_lang] = Tools::substr(strip_tags($longDescription), 0, 160); // Ajuster au besoin

                if ($product->update()) {
                    die(json_encode([
                        'success' => true,
                        'message' => 'Descriptions générées et enregistrées avec succès !',
                        'long_description' => $longDescription,
                        'short_description' => $shortDescription
                    ]));
                } else {
                    die(json_encode(['success' => false, 'message' => 'Erreur lors de l\'enregistrement des descriptions.']));
                }
            } else {
                 die(json_encode(['success' => false, 'message' => 'Format de réponse de l\'IA inattendu.']));
            }

        } else {
            die(json_encode(['success' => false, 'message' => 'Erreur lors de la génération de la description par l\'IA.']));
        }
    }

    // Méthodes utilitaires pour récupérer les caractéristiques et mots-clés
    private function getProductFeatures($id_product, $id_lang)
    {
        $features = Product::get  FeaturesStatic($id_product);
        $featureList = [];
        foreach ($features as $feature) {
            $featureList[] = $feature['name'] . ': ' . $feature['value'];
        }
        return $featureList;
    }

    private function getMetaKeywords($id_product, $id_lang)
    {
        // Tu peux récupérer les mots-clés existants ou en définir via la config du module
        // Pour cet exemple, on peut imaginer un champ personnalisé ou une configuration
        return 'produit, e-commerce, shopping'; // À améliorer
    }
}

Ce contrôleur gérera la requête AJAX, interagira avec l’AiService, et mettra à jour l’objet Product.

Tu peux voir une démo vidéo de l’intégration de l’IA avec PrestaShop sur

.


Étape 5 : Optimisation SEO et Monitoring (L’Acoustique et l’Oreille du Public)

L’IA a généré des fiches produit, ton module les a intégrées. Le concert est lancé, mais est-ce que l’acoustique de la salle est parfaite ? Est-ce que le public aime la musique ? La dernière étape consiste à s’assurer que ces nouvelles partitions sont non seulement belles, mais aussi efficaces en termes de SEO, et à surveiller leur performance.

Relecture humaine et ajustements

Même le meilleur chef d’orchestre IA peut faire des erreurs ou ne pas saisir toutes les nuances. La relecture humaine est cruciale.

  • Pertinence : Le contenu correspond-il parfaitement au produit ?
  • Qualité rédactionnelle : Le ton est-il cohérent avec ta marque ? Y a-t-il des coquilles ou des tournures de phrases étranges ?
  • Optimisation SEO : Les mots-clés sont-ils bien intégrés ? La structure est-elle claire (titres, paragraphes) ? L’IA peut générer de bonnes bases, mais un œil humain peut toujours trouver des opportunités d’amélioration pour le référencement. Pense notamment aux balises </code>, <code><meta description></code> et aux URLs (friendly URLs).</li><li> <strong>Unicité :</strong> Assure-toi que les descriptions sont uniques et ne ressemblent pas trop à celles d’autres produits similaires, ou pire, à celles d’autres sites. L’IA peut parfois « halluciner » ou générer du contenu moins original si le prompt n’est pas assez précis.</li></ul><p> Utilise ton interface d’administration PrestaShop pour éditer les fiches produit générées et apporter ces touches finales. C’est toi, le développeur-intégrateur, qui donne la touche finale d’humanité à la partition de l’IA.</p><h3>Surveillance des performances SEO</h3><p> Une fois que tes fiches produit générées par l’IA sont en ligne, il est impératif de surveiller leurs performances.</p><ul><li> <strong>Google Search Console :</strong> Vérifie le classement de tes produits pour les mots-clés cibles, les impressions, les clics et le taux de clics (CTR). Regarde si de nouveaux mots-clés sont découverts. Tu peux en apprendre plus sur l’utilisation de la Search Console sur .</li><li> <strong>Google Analytics :</strong> Analyse le comportement des utilisateurs sur les pages produit (taux de rebond, temps passé sur la page, taux de conversion). Un bon contenu devrait engager davantage les visiteurs. Pour optimiser tes analyses, consulte les ressources sur <a href="https://www.shopify.com/blog/ecommerce-seo-beginners-guide" target="_blank" rel="noopener noreferrer nofollow">Optimiser son e-commerce</a>.</li><li> <strong>Outils SEO tiers :</strong> Des outils comme SEMrush, Ahrefs ou Moz peuvent t’aider à suivre le positionnement, l’autorité de page, et à identifier de nouvelles opportunités. Des comparaisons sont disponibles sur <a href="https://care-center.prestashop.com/fr/formations-live/682-grid-symfony.html" target="_blank" rel="noopener noreferrer nofollow">Développer des modules PrestaShop</a>.</li></ul><p> Il est important de comparer les performances des fiches générées par l’IA à celles que tu as rédigées manuellement, ou aux performances avant la mise en place de l’IA. Cette analyse te permettra d’affiner tes prompts et les paramètres de ton module IA. C’est une boucle d’amélioration continue.</p><h3>Itération et amélioration des prompts</h3><p> Les prompts que tu utilises pour interroger l’IA sont les instructions que tu donnes à ton chef d’orchestre. Plus ils sont clairs et détaillés, meilleure sera la musique.</p><table border="1" cellpadding="10" cellspacing="0"><thead><tr><th>Aspect du Prompt</th><th>Exemple de Précision</th></tr></thead><tbody><tr><td><strong>Rôle de l’IA</strong></td><td>« Agis comme un copywriter SEO expert… »</td></tr><tr><td><strong>Audience cible</strong></td><td>« …rédigeant pour des jeunes parents soucieux de l’écologie. »</td></tr><tr><td><strong>Ton et style</strong></td><td>« Le ton doit être amical, informatif et légèrement humoristique. »</td></tr><tr><td><strong>Mots-clés à inclure</strong></td><td>« Intègre les mots-clés ‘chaussures de randonnée légères’, ‘imperméables’, ‘confortables’. »</td></tr><tr><td><strong>Structure désirée</strong></td><td>« Commence par un titre accrocheur, puis un paragraphe d’introduction, trois points clés en liste, et un appel à l’action. »</td></tr><tr><td><strong>Contraintes de longueur</strong></td><td>« Description longue : 250-300 mots. Description courte : 50-70 mots. »</td></tr><tr><td><strong>Format de sortie</strong></td><td>« Retourne le texte au format JSON avec les clés ‘long_desc’ et ‘short_desc’. »</td></tr></tbody></table><p> N’hésite pas à expérimenter différents prompts et à les affiner en fonction des résultats que tu obtiens. Chaque fois que tu constates une amélioration des performances SEO, c’est une preuve que ton chef d’orchestre IA devient encore plus performant, et que l’acoustique de ta salle de concert est optimale. Des ressources sur l’ingénierie des prompts sont disponibles sur <a href="https://www.linkedin.com/posts/brodieclark_some-good-news-here-if-born-in-1992-answer-activity-7199603850436096000-5CR-" target="_blank" rel="noopener noreferrer nofollow">Prompts SEO efficaces</a>.</p><hr /><h2>Questions Fréquentes (FAQ)</h2> <details> <summary>Est-ce que l’IA va remplacer les rédacteurs SEO ?</summary><p>Non, l’IA est un outil puissant pour automatiser les tâches répétitives et générer des brouillons de qualité. Cependant, l’expertise humaine reste indispensable pour la stratégie SEO, la relecture critique, l’ajout de créativité unique, la compréhension des nuances culturelles et l’ajustement final pour coller parfaitement à l’identité de marque. L’IA est un assistant, pas un remplaçant.</p> </details> <details> <summary>Quelle est la version minimale de PrestaShop requise pour ce type d’intégration ?</summary><p>Le concept d’intégration via un module et l’override de template est applicable à PrestaShop 1.6, 1.7 et 8.x. Cependant, les spécificités des hooks, des chemins de templates et des objets varient légèrement. Les exemples de code ici sont plus orientés PrestaShop 1.7/8.x (Smarty avec quelques hooks spécifiques). Pour les versions antérieures, les principes restent les mêmes mais l’implémentation diffère légèrement.</p> </details> <details> <summary>Comment gérer les différentes langues avec l’IA ?</summary><p>La plupart des APIs d’IA modernes supportent la génération de contenu dans de nombreuses langues. Ton prompt peut spécifier la langue désirée (« rédige en français », « rédige en anglais »). Dans ton module PrestaShop, tu devras itérer sur les langues actives de ta boutique et faire un appel à l’IA pour chaque langue, en mettant à jour les descriptions du produit pour chaque <code>$id_lang</code> correspondant.</p> </details> <details> <summary>Quel est le coût d’utilisation des APIs d’IA ?</summary><p>Le coût dépend du fournisseur (OpenAI, Google AI, etc.), du modèle d’IA utilisé (GPT-3.5 est moins cher que GPT-4), et du volume de tokens (mots) générés. La plupart des fournisseurs facturent à l’utilisation. Il est essentiel de surveiller ta consommation via le tableau de bord de l’API choisie pour contrôler ton budget.</p> </details> <details> <summary>Comment s’assurer que le contenu généré par l’IA est unique et ne sera pas pénalisé par Google ?</summary><p>L’IA génère généralement du contenu unique, surtout si tes prompts sont précis et que les données produit fournies sont détaillées. Google valorise le contenu de qualité, pertinent et utile pour l’utilisateur. La relecture humaine est essentielle pour s’assurer de l’originalité et de la valeur ajoutée. Évite les prompts trop génériques qui pourraient conduire à des descriptions banales ou répétitives. L’IA générative peut produire du contenu qui « semble » original mais qui est en réalité une légère reformulation de textes existants si elle n’est pas bien guidée.</p> </details><p><script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Est-ce compliqué d'intégrer l'IA dans PrestaShop pour un développeur débutant ?","acceptedAnswer":{"@type":"Answer","text":"Non, avec ce tutoriel, même un développeur débutant pourra suivre les étapes. Nous couvrons les bases de l'override et de la création de module simple, rendant l'intégration de l'IA accessible pour booster le SEO."}},{"@type":"Question","name":"Quel type d'IA est le plus adapté pour la génération de descriptions produits SEO sur PrestaShop ?","acceptedAnswer":{"@type":"Answer","text":"Les modèles de langage avancés comme GPT-3.5 ou GPT-4 (via leur API) sont idéaux. Ils excellent dans la compréhension du contexte produit et la rédaction de textes optimisés pour les moteurs de recherche."}},{"@type":"Question","name":"L'intégration de l'IA affecte-t-elle les performances de mon site PrestaShop ?","acceptedAnswer":{"@type":"Answer","text":"Une implémentation soignée minimise l'impact. Les appels API pour l'IA se font idéalement en arrière-plan ou de manière asynchrone, évitant ainsi de ralentir le chargement des pages et l'expérience utilisateur de votre PrestaShop."}},{"@type":"Question","name":"Les descriptions générées par IA sont-elles vraiment uniques et efficaces pour le SEO de mon PrestaShop ?","acceptedAnswer":{"@type":"Answer","text":"Oui, avec une configuration adéquate (prompts détaillés, intégration de mots-clés pertinents), l'IA peut produire des descriptions uniques, très pertinentes et très performantes pour le référencement naturel de vos fiches produit PrestaShop."}}]}</script></p><hr /><h2>Conclusion</h2><p> Félicitations ! Tu as désormais les clés pour transformer ton approche de la gestion des fiches produit sur PrestaShop. En introduisant l’Intelligence Artificielle comme ton chef d’orchestre visionnaire, tu peux générer des descriptions optimisées pour le SEO à une échelle et une vitesse inégalées. En tant que développeur, tu as appris à créer le module nécessaire, à communiquer avec l’API de l’IA, à overrider les templates pour afficher ces nouvelles créations, et enfin, à affiner la mélodie pour qu’elle résonne parfaitement auprès de ton public (et de Google).</p><p> Cette synergie entre PrestaShop, l’IA et le SEO n’est pas seulement un gain de temps ; c’est une opportunité d’améliorer significativement la qualité et la pertinence de ton catalogue, d’offrir une meilleure expérience utilisateur et de propulser tes produits au sommet des classements de recherche. L’orchestre de ton e-commerce n’a jamais été aussi harmonieux et puissant. Continue d’expérimenter, d’apprendre et de développer, car le futur du e-commerce est déjà là, et tu en es l’un des compositeurs les plus talentueux. À toi de jouer !</p> <span class="et_social_bottom_trigger"></span></div><footer class="entry-footer clearfix"><div class="entry-tags clearfix"><ul><li><a href="https://www.genisoft.fr/tuto/tag/automatisation/" rel="tag">Automatisation</a></li></ul></div></footer></div></article><nav class="mh-post-nav-wrap clearfix" role="navigation"><div class="mh-post-nav-prev mh-post-nav"> <a href="https://www.genisoft.fr/tuto/gemini-ai-seo-produit/" rel="prev">Previous article</a></div><div class="mh-post-nav-next mh-post-nav"> <a href="https://www.genisoft.fr/tuto/module-ia-alt-images-seo/" rel="next">Next article</a></div></nav><h4 class="mh-section-title"> 3 Trackbacks & Pingbacks</h4><ol class="pinglist mh-ping-list"><li id="comment-0" class=""> <i class="fa fa-link"></i><a href="https://www.genisoft.fr/tuto/module-ia-alt-images-seo/" class="url" rel="ugc">1 Module PrestaShop IA: Balises ALT d'images SEO auto ! - Tutoriels WEB</a></li><li id="comment-0" class=""> <i class="fa fa-link"></i><a href="https://www.genisoft.fr/tuto/module-ia-seo-semantique/" class="url" rel="ugc">PrestaShop: Votre module IA pour un SEO sémantique X10 ! - Tutoriels WEB</a></li><li id="comment-0" class=""> <i class="fa fa-link"></i><a href="https://www.genisoft.fr/tuto/prestashop-ia-seo-semantique/" class="url" rel="ugc">PrestaShop : IA + SEO sémantique ? 5 étapes pour devs ! - Tutoriels WEB</a></li></ol><div id="mh-comments"></div><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/tuto/prestashop-ia-fiches-produit-seo/#respond" style="display:none;">Annuler la réponse</a></small></h3><p class="must-log-in">Vous devez <a href="https://www.genisoft.fr/tuto/wp-login.php?redirect_to=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F">vous connecter</a> pour publier un commentaire.</p></div></div><aside class="mh-widget-col-1 mh-sidebar"><div id="block-6" class="mh-widget widget_block widget_media_image"><div class="mh-widget-inner"><figure class="wp-block-image size-full"><a href="https://kinsta.com?kaid=WYISYIBMJFKT"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iNjAwIiB2aWV3Qm94PSIwIDAgMzAwIDYwMCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" decoding="async" width="300" height="600" data-src="https://www.genisoft.fr/tuto/wp-content/uploads/2022/07/hebergement-web-kinsta.png" alt="" class="wp-image-891" data-srcset="https://www.genisoft.fr/tuto/wp-content/uploads/2022/07/hebergement-web-kinsta.png 300w, https://www.genisoft.fr/tuto/wp-content/uploads/2022/07/hebergement-web-kinsta-150x300.png 150w" data-sizes="(max-width: 300px) 100vw, 300px" /></a></figure></div></div><div id="text-2" class="mh-widget widget_text"><div class="mh-widget-inner"><h4 class="mh-widget-title"><span class="mh-widget-title-inner mh-sidebar-widget-title-inner">Code de promo Planethoster : PHA-PRESTASHOPPROMO</span></h4><div class="textwidget"><p><a href="https://www.planethoster.com/fr/Hebergements-World/goph-1f957cd0e9cb640"><img data-lazyloaded="1" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMjI1IiB2aWV3Qm94PSIwIDAgMzAwIDIyNSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=" decoding="async" class="size-medium wp-image-759" data-src="https://www.genisoft.fr/tuto/wp-content/uploads/2022/03/PH-Banner-2020-1-300x225.png" alt="code promo planethoster" width="300" height="225" data-srcset="https://www.genisoft.fr/tuto/wp-content/uploads/2022/03/PH-Banner-2020-1-300x225.png 300w, https://www.genisoft.fr/tuto/wp-content/uploads/2022/03/PH-Banner-2020-1.png 641w" data-sizes="(max-width: 300px) 100vw, 300px" /></a></p></div></div></div><div id="recent-posts-2" class="mh-widget widget_recent_entries"><div class="mh-widget-inner"><h4 class="mh-widget-title"><span class="mh-widget-title-inner mh-sidebar-widget-title-inner">Derniers articles</span></h4><ul><li> <a href="https://www.genisoft.fr/tuto/ia-biais-algorithmes-critiques/">IA: Vos algorithmes sont-ils biaisés? 4 pièges critiques.</a> <span class="post-date">23 octobre 2025</span></li><li> <a href="https://www.genisoft.fr/tuto/reseaux-sociaux-ia-pme-budget/">Réseaux Sociaux : L’IA, votre super-pouvoir PME sans budget ?</a> <span class="post-date">23 octobre 2025</span></li><li> <a href="https://www.genisoft.fr/tuto/ia-gratuite-site-web/">Ton Site au Top : L’IA Gratuite, Vraie Révolution ?</a> <span class="post-date">23 octobre 2025</span></li><li> <a href="https://www.genisoft.fr/tuto/ia-generative-impact-web/">IA générative : 5 impacts majeurs sur le web ?</a> <span class="post-date">23 octobre 2025</span></li><li> <a href="https://www.genisoft.fr/tuto/wordpress-core-web-vitals/">WordPress Lent ? 3 Piliers pour Dompter les Core Web Vitals</a> <span class="post-date">23 octobre 2025</span></li></ul></div></div></aside></div><footer class="mh-footer clearfix"><div class="mh-container mh-container-inner mh-subfooter clearfix"><div class="mh-copyright-wrap"> <span class="mh-copyright"> Proudly powered by Tuto WordPress theme from <a href="https://www.mhthemes.com/" rel="nofollow">MH Themes</a> </span></div></div></footer></div> <script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/tuto\/*"},{"not":{"href_matches":["\/tuto\/wp-*.php","\/tuto\/wp-admin\/*","\/tuto\/wp-content\/uploads\/*","\/tuto\/wp-content\/*","\/tuto\/wp-content\/plugins\/*","\/tuto\/wp-content\/themes\/tuto\/*","\/tuto\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <div class="et_social_pin_images_outer"><div class="et_social_pinterest_window"><div class="et_social_modal_header"><h3>Pin It on Pinterest</h3><span class="et_social_close"></span></div><div class="et_social_pin_images" data-permalink="https://www.genisoft.fr/tuto/prestashop-ia-fiches-produit-seo/" data-title="PrestaShop: IA + SEO = Fiches produit auto ! 5 étapes devs." data-post_id="2971"></div></div></div><div class="et_social_sidebar_networks et_social_visible_sidebar et_social_slideright et_social_animated et_social_rectangle et_social_sidebar_flip et_social_mobile_on"><ul class="et_social_icons_container"><li class="et_social_facebook"> <a href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&t=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs." class="et_social_share" rel="nofollow" data-social_name="facebook" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_facebook"></i> <span class="et_social_overlay"></span> </a></li><li class="et_social_twitter"> <a href="http://twitter.com/share?text=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs.&url=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F" class="et_social_share" rel="nofollow" data-social_name="twitter" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_twitter"></i> <span class="et_social_overlay"></span> </a></li><li class="et_social_digg"> <a href="http://digg.com/submit?url=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&title=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs." class="et_social_share" rel="nofollow" data-social_name="digg" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_digg"></i> <span class="et_social_overlay"></span> </a></li><li class="et_social_pinterest"> <a href="#" class="et_social_share_pinterest" rel="nofollow" data-social_name="pinterest" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_pinterest"></i> <span class="et_social_overlay"></span> </a></li><li class="et_social_gmail"> <a href="https://mail.google.com/mail/u/0/?view=cm&fs=1&su=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs.&body=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&ui=2&tf=1" class="et_social_share" rel="nofollow" data-social_name="gmail" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_gmail"></i> <span class="et_social_overlay"></span> </a></li><li class="et_social_yahoomail"> <a href="http://compose.mail.yahoo.com/?body=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F" class="et_social_share" rel="nofollow" data-social_name="yahoomail" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_yahoomail"></i> <span class="et_social_overlay"></span> </a></li></ul> <span class="et_social_hide_sidebar et_social_icon"></span></div><div class="et_social_mobile_button"></div><div class="et_social_mobile et_social_fadein"><div class="et_social_heading">Share This</div> <span class="et_social_close"></span><div class="et_social_networks et_social_simple et_social_rounded et_social_left"><ul class="et_social_icons_container"><li class="et_social_facebook"> <a href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&t=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs." class="et_social_share" rel="nofollow" data-social_name="facebook" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_facebook"></i><div class="et_social_network_label"><div class="et_social_networkname">Facebook</div></div> <span class="et_social_overlay"></span> </a></li><li class="et_social_twitter"> <a href="http://twitter.com/share?text=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs.&url=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F" class="et_social_share" rel="nofollow" data-social_name="twitter" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_twitter"></i><div class="et_social_network_label"><div class="et_social_networkname">Twitter</div></div> <span class="et_social_overlay"></span> </a></li><li class="et_social_digg"> <a href="http://digg.com/submit?url=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&title=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs." class="et_social_share" rel="nofollow" data-social_name="digg" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_digg"></i><div class="et_social_network_label"><div class="et_social_networkname">Digg</div></div> <span class="et_social_overlay"></span> </a></li><li class="et_social_pinterest"> <a href="#" class="et_social_share_pinterest" rel="nofollow" data-social_name="pinterest" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_pinterest"></i><div class="et_social_network_label"><div class="et_social_networkname">Pinterest</div></div> <span class="et_social_overlay"></span> </a></li><li class="et_social_gmail"> <a href="https://mail.google.com/mail/u/0/?view=cm&fs=1&su=PrestaShop%3A%20IA%20%2B%20SEO%20%3D%20Fiches%20produit%20auto%20%21%205%20%C3%A9tapes%20devs.&body=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F&ui=2&tf=1" class="et_social_share" rel="nofollow" data-social_name="gmail" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_gmail"></i><div class="et_social_network_label"><div class="et_social_networkname">Gmail</div></div> <span class="et_social_overlay"></span> </a></li><li class="et_social_yahoomail"> <a href="http://compose.mail.yahoo.com/?body=https%3A%2F%2Fwww.genisoft.fr%2Ftuto%2Fprestashop-ia-fiches-produit-seo%2F" class="et_social_share" rel="nofollow" data-social_name="yahoomail" data-post_id="2971" data-social_type="share" data-location="sidebar"> <i class="et_social_icon et_social_icon_yahoomail"></i><div class="et_social_network_label"><div class="et_social_networkname">Yahoo Mail</div></div> <span class="et_social_overlay"></span> </a></li></ul></div></div><div class="et_social_mobile_overlay"></div> <script data-no-optimize="1">window.lazyLoadOptions=Object.assign({},{threshold:300},window.lazyLoadOptions||{});!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function o(t){return e({},at,t)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,vt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,vt,e)}function i(t){return s(t,null),0}function r(t){return null===c(t)}function u(t){return c(t)===_t}function d(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function f(t,e){et?t.classList.add(e):t.className+=(t.className?" ":"")+e}function _(t,e){et?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function v(t,e){!e||(e=e._observer)&&e.unobserve(t)}function b(t,e){t&&(t.loadingCount+=e)}function p(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function h(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function m(t){return!!t[lt]}function E(t){return t[lt]}function I(t){return delete t[lt]}function y(e,t){var n;m(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[lt]=n)}function L(a,t){var o;m(a)&&(o=E(a),t.forEach(function(t){var e,n;e=a,(t=o[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function k(t,e,n){f(t,e.class_loading),s(t,st),n&&(b(n,1),d(e.callback_loading,t,n))}function A(t,e,n){n&&t.setAttribute(e,n)}function O(t,e){A(t,rt,l(t,e.data_sizes)),A(t,it,l(t,e.data_srcset)),A(t,ot,l(t,e.data_src))}function w(t,e,n){var a=l(t,e.data_bg_multi),o=l(t,e.data_bg_multi_hidpi);(a=nt&&o?o:a)&&(t.style.backgroundImage=a,n=n,f(t=t,(e=e).class_applied),s(t,dt),n&&(e.unobserve_completed&&v(t,e),d(e.callback_applied,t,n)))}function x(t,e){!e||0<e.loadingCount||0<e.toLoadCount||d(t.callback_finish,e)}function M(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function N(t){return!!t.llEvLisnrs}function z(t){if(N(t)){var e,n,a=t.llEvLisnrs;for(e in a){var o=a[e];n=e,o=o,t.removeEventListener(n,o)}delete t.llEvLisnrs}}function C(t,e,n){var a;delete t.llTempImage,b(n,-1),(a=n)&&--a.toLoadCount,_(t,e.class_loading),e.unobserve_completed&&v(t,n)}function R(i,r,c){var l=g(i)||i;N(l)||function(t,e,n){N(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";M(t,a,e),M(t,"error",n)}(l,function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_loaded),s(e,ut),d(n.callback_loaded,e,a),o||x(n,a),z(l)},function(t){var e,n,a,o;n=r,a=c,o=u(e=i),C(e,n,a),f(e,n.class_error),s(e,ft),d(n.callback_error,e,a),o||x(n,a),z(l)})}function T(t,e,n){var a,o,i,r,c;t.llTempImage=document.createElement("IMG"),R(t,e,n),m(c=t)||(c[lt]={backgroundImage:c.style.backgroundImage}),i=n,r=l(a=t,(o=e).data_bg),c=l(a,o.data_bg_hidpi),(r=nt&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),k(a,o,i)),w(t,e,n)}function G(t,e,n){var a;R(t,e,n),a=e,e=n,(t=Et[(n=t).tagName])&&(t(n,a),k(n,a,e))}function D(t,e,n){var a;a=t,(-1<It.indexOf(a.tagName)?G:T)(t,e,n)}function S(t,e,n){var a;t.setAttribute("loading","lazy"),R(t,e,n),a=e,(e=Et[(n=t).tagName])&&e(n,a),s(t,_t)}function V(t){t.removeAttribute(ot),t.removeAttribute(it),t.removeAttribute(rt)}function j(t){h(t,function(t){L(t,mt)}),L(t,mt)}function F(t){var e;(e=yt[t.tagName])?e(t):m(e=t)&&(t=E(e),e.style.backgroundImage=t.backgroundImage)}function P(t,e){var n;F(t),n=e,r(e=t)||u(e)||(_(e,n.class_entered),_(e,n.class_exited),_(e,n.class_applied),_(e,n.class_loading),_(e,n.class_loaded),_(e,n.class_error)),i(t),I(t)}function U(t,e,n,a){var o;n.cancel_on_exit&&(c(t)!==st||"IMG"===t.tagName&&(z(t),h(o=t,function(t){V(t)}),V(o),j(t),_(t,n.class_loading),b(a,-1),i(t),d(n.callback_cancel,t,e,a)))}function $(t,e,n,a){var o,i,r=(i=t,0<=bt.indexOf(c(i)));s(t,"entered"),f(t,n.class_entered),_(t,n.class_exited),o=t,i=a,n.unobserve_entered&&v(o,i),d(n.callback_enter,t,e,a),r||D(t,n,a)}function q(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function H(t,o,i){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?$(t.target,t,o,i):(e=t.target,n=t,a=o,t=i,void(r(e)||(f(e,a.class_exited),U(e,n,a,t),d(a.callback_exit,e,n,t))));var e,n,a})}function B(e,n){var t;tt&&!q(e)&&(n._observer=new IntersectionObserver(function(t){H(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function J(t){return Array.prototype.slice.call(t)}function K(t){return t.container.querySelectorAll(t.elements_selector)}function Q(t){return c(t)===ft}function W(t,e){return e=t||K(e),J(e).filter(r)}function X(e,t){var n;(n=K(e),J(n).filter(Q)).forEach(function(t){_(t,e.class_error),i(t)}),t.update()}function t(t,e){var n,a,t=o(t);this._settings=t,this.loadingCount=0,B(t,this),n=t,a=this,Y&&window.addEventListener("online",function(){X(n,a)}),this.update(e)}var Y="undefined"!=typeof window,Z=Y&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),tt=Y&&"IntersectionObserver"in window,et=Y&&"classList"in document.createElement("p"),nt=Y&&1<window.devicePixelRatio,at={elements_selector:".lazy",container:Z||Y?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",it="srcset",rt="sizes",ct="poster",lt="llOriginalAttrs",st="loading",ut="loaded",dt="applied",ft="error",_t="native",gt="data-",vt="ll-status",bt=[st,ut,dt,ft],pt=[ot],ht=[ot,ct],mt=[ot,it,rt],Et={IMG:function(t,e){h(t,function(t){y(t,mt),O(t,e)}),y(t,mt),O(t,e)},IFRAME:function(t,e){y(t,pt),A(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){y(t,pt),A(t,ot,l(t,e.data_src))}),y(t,ht),A(t,ct,l(t,e.data_poster)),A(t,ot,l(t,e.data_src)),t.load()}},It=["IMG","IFRAME","VIDEO"],yt={IMG:j,IFRAME:function(t){L(t,pt)},VIDEO:function(t){a(t,function(t){L(t,pt)}),L(t,ht),t.load()}},Lt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,o=this._settings,i=W(t,o);{if(p(this,i.length),!Z&&tt)return q(o)?(e=o,n=this,i.forEach(function(t){-1!==Lt.indexOf(t.tagName)&&S(t,e,n)}),void p(n,0)):(t=this._observer,o=i,t.disconnect(),a=t,void o.forEach(function(t){a.observe(t)}));this.loadAll(i)}},destroy:function(){this._observer&&this._observer.disconnect(),K(this._settings).forEach(function(t){I(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;W(t,n).forEach(function(t){v(t,e),D(t,n,e)})},restoreAll:function(){var e=this._settings;K(e).forEach(function(t){P(t,e)})}},t.load=function(t,e){e=o(e);D(t,e)},t.resetStatus=function(t){i(t)},t}),function(t,e){"use strict";function n(){e.body.classList.add("litespeed_lazyloaded")}function a(){console.log("[LiteSpeed] Start Lazy Load"),o=new LazyLoad(Object.assign({},t.lazyLoadOptions||{},{elements_selector:"[data-lazyloaded]",callback_finish:n})),i=function(){o.update()},t.MutationObserver&&new MutationObserver(i).observe(e.documentElement,{childList:!0,subtree:!0,attributes:!0})}var o,i;t.addEventListener?t.addEventListener("load",a,!1):t.attachEvent("onload",a)}(window,document);</script><script data-no-optimize="1">window.litespeed_ui_events=window.litespeed_ui_events||["mouseover","click","keydown","wheel","touchmove","touchstart"];var urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_force(){console.log("[LiteSpeed] Start Load JS Delayed"),litespeed_ui_events.forEach(e=>{window.removeEventListener(e,litespeed_load_delayed_js_force,{passive:!0})}),document.querySelectorAll("iframe[data-litespeed-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-litespeed-src"))}),"loading"==document.readyState?window.addEventListener("DOMContentLoaded",litespeed_load_delayed_js):litespeed_load_delayed_js()}litespeed_ui_events.forEach(e=>{window.addEventListener(e,litespeed_load_delayed_js_force,{passive:!0})});async function litespeed_load_delayed_js(){let t=[];for(var d in document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e=>{t.push(e)}),t)await new Promise(e=>litespeed_load_one(t[d],e));document.dispatchEvent(new Event("DOMContentLiteSpeedLoaded")),window.dispatchEvent(new Event("DOMContentLiteSpeedLoaded"))}function litespeed_load_one(t,e){console.log("[LiteSpeed] Load ",t);var d=document.createElement("script");d.addEventListener("load",e),d.addEventListener("error",e),t.getAttributeNames().forEach(e=>{"type"!=e&&d.setAttribute("data-src"==e?"src":e,t.getAttribute(e))});let a=!(d.type="text/javascript");!d.src&&t.textContent&&(d.src=litespeed_inline2src(t.textContent),a=!0),t.after(d),t.remove(),a&&e()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}</script><script data-no-optimize="1">var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"");litespeed_vary||fetch("/tuto/wp-content/plugins/litespeed-cache/guest.vary.php",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&(sessionStorage.setItem("litespeed_docref",document.referrer),window.location.reload(!0))});</script><script data-optimized="1" type="litespeed/javascript" data-src="https://www.genisoft.fr/tuto/wp-content/litespeed/js/a7caad650f56f36c1e5e1fd8ecd2c110.js?ver=cb80c"></script></body></html> <!-- Page optimized by LiteSpeed Cache @2025-10-23 19:14:44 --> <!-- Page cached by LiteSpeed Cache 7.6.2 on 2025-10-23 19:14:43 --> <!-- Guest Mode --> <!-- QUIC.cloud UCSS loaded ✅ /ucss/706d759d4b7fdfe1f5b133984aa8dd2f.css -->