[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fhfVgXlC2L0nx3x5KngydY57Q8UM5lbXcXVZ1VgwPbcM":22,"$fPxp2pKjB1827CSIFKbBCCf2UVIP2G3wfRkcotZcScG0":61,"client-config-ac-hub":84,"header-db":135,"megamenu":145,"megamenu-contexts-ac-hub":222,"$ftN8m69BvvjthkRHYI8fOdXe637MeAEROqlH6p9l8CNs":224,"footer-db":227,"$ffA2_eFkN9XKgB9jzDDiARvtJXvRwD8gCOu2aHaDW8eo":237,"$fP0FV7zZkQhZStJelKMQF2vnI2nbZQB210etjzdyGslw":239,"$fINI4gZJ9jGrKkdeKMLokcXFtTu9GlSBjqf36q2YjjHQ":298},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"module":23,"canonical":56,"isCanonical":20,"contentHtml":60},{"name":24,"codename":25,"icon":26,"category":27,"flywheel":28,"description":29,"features":30,"tags":45,"status":54,"link":55,"slug":56,"summary":57,"contentMd":58,"ficheSlug":56,"version":59},"Régler les métas SEO des catégories depuis un CSV","cafe_seotitlebycsv","🏷️","libre","","Règle meta_title et meta_description des catégories PrestaShop depuis un fichier CSV, avec un essai à blanc qui montre l'avant et l'après, un rapport ligne par ligne, et la garantie qu'aucun champ n'est vidé sans que vous l'ayez demandé.",[31,32,33,34,35,36,37,38,39,40,41,42,43,44],"Il ne vide JAMAIS un champ : une colonne absente du fichier, ou une cellule laissée vide, laisse la métadonnée en place. La version 1.0.0 écrivait une chaîne vide et effaçait le titre SEO — mesuré","L'essai à blanc est actif par défaut : il affiche, catégorie par catégorie, le titre actuel barré et le nouveau en dessous, et n'écrit rien","La langue se choisit dans un écran, parmi celles installées — elle n'est plus celle de l'employé connecté. Une colonne id_lang du fichier la règle ligne par ligne","Les autres langues ne sont pas touchées, et en multiboutique les autres boutiques non plus : la 1.0.0 écrivait sans id_shop et écrasait toutes les boutiques à la fois — mesuré","Un refus porte sur une ligne, pas sur le fichier : l'import va au bout sans elle et le rapport nomme son numéro de ligne et son motif","Un titre trop long est refusé AVANT que MySQL ne le tronque, avec sa longueur en caractères — 255 pour le titre, 512 pour la description","Le séparateur est détecté — point-virgule, virgule, tabulation ou barre verticale — et le CSV UTF-8 de votre tableur convient tel quel, marque d'octets comprise","Les colonnes se nomment dans l'en-tête et l'ordre n'a pas d'importance ; un fichier sans en-tête reste lu dans l'ordre historique","Une catégorie qui n'existe pas est signalée comme non écrite : un UPDATE sur zéro ligne réussit sans rien faire, et ce n'est pas un succès","Deux lignes pour la même cible : la dernière vaut, et le rapport nomme la ligne remplacée","Chaque valeur écrite passe par pSQL : Db::update interpole les valeurs telles quelles, rien n'échappe à votre place","Les caches de catégorie et de gabarits sont purgés après écriture — sans quoi vos pages continueraient d'être servies avec les anciennes métadonnées","Aucun contrôleur, aucun greffon, aucune table, aucune clé de configuration : la désinstallation ne laisse rien","80 vérifications de décision et 16 mutations livrées avec le module, rejouables sans PHPUnit ni boutique, plus 43 preuves de comportement sur de vraies catégories",[46,47,48,49,50,51,52,53,27],"agpl-3.0","prestashop-9","seo","meta-title","meta-description","categories","import","csv","Production","\u002Fmodules\u002Fcafe_seotitlebycsv-2.0.0.zip","metas-seo-categories-csv-prestashop","Reportez les titres et descriptions SEO de vos catégories depuis un tableur. Le module montre ce qu'il changerait avant d'écrire, et ne vide jamais un champ que votre fichier ne remplit pas — une colonne absente laisse la métadonnée en place.","## Le problème\n\nVous avez deux cents catégories, et un tableur où vous avez enfin écrit les\ntitres et les descriptions SEO qui vont bien. Il faut maintenant les reporter\nune par une dans le back-office, onglet SEO, catégorie après catégorie.\n\nEt si vous avez déjà essayé de le faire en masse, vous connaissez la peur qui va\navec : un import qui se trompe sur vos métadonnées ne les abîme pas, il les\n**efface**. Le travail de référencement de six mois tient dans deux colonnes de\nbase de données qui ne gardent aucun historique.\n\n## Comment ça marche\n\nLes colonnes se **nomment**, et l'ordre n'a pas d'importance :\n\n```\nid_category;meta_title;meta_description\n12;Turbos reconditionnés garantis 2 ans;Nos turbos révisés sur banc, livrés en 48 h\n13;Injecteurs diesel toutes marques;Injecteurs testés, garantie pièce et main-d'œuvre\n```\n\nVous pouvez n'en remplir qu'une :\n\n```\nid_category;meta_title\n14;Pompes haute pression révisées\n```\n\nLe séparateur est **détecté** : point-virgule, virgule, tabulation ou barre\nverticale. Le fichier que votre tableur vient de produire convient tel quel, y\ncompris en « CSV UTF-8 » avec sa marque d'octets invisible.\n\n| Colonne | Rôle |\n|---|---|\n| `id_category` | obligatoire, un entier strictement positif |\n| `meta_title` | facultative, 255 caractères au plus |\n| `meta_description` | facultative, 512 caractères au plus |\n| `id_lang` | facultative, pour régler la langue **ligne par ligne** |\n\n## Il ne vide jamais un champ\n\nC'est la règle du module, et elle n'a pas d'exception.\n\nUne colonne que vous ne mettez pas dans le fichier laisse la métadonnée **en\nplace**. Une cellule que vous laissez vide, aussi. Et une ligne qui ne demande ni\ntitre ni description est **refusée** plutôt qu'appliquée comme un effacement.\n\nPour vider une métadonnée, passez par la fiche de la catégorie : c'est un geste\nqui se fait une fois, en la regardant, pas en masse depuis un tableur.\n\n## L'essai à blanc est actif par défaut\n\nSur un module qui écrit dans votre référencement, le premier geste ne doit pas\nêtre celui qui écrit.\n\nL'essai à blanc lit le fichier et affiche, catégorie par catégorie, **le titre\nactuel barré et le nouveau en dessous**. Ce qui ne change pas est marqué comme\ninchangé. Et rien n'est écrit.\n\n## La langue, vous la choisissez\n\nUn écran vous demande dans quelle langue écrire, parmi celles installées sur la\nboutique. Elle est pré-remplie avec la vôtre, mais vous la voyez avant de\nvalider.\n\nSi votre fichier porte une colonne `id_lang`, c'est elle qui décide, ligne par\nligne : un seul fichier peut donc régler le français et l'anglais d'une même\ncatégorie.\n\nLes autres langues ne sont pas touchées. En multiboutique, les autres boutiques\nnon plus.\n\n## Ce qu'il refuse, et pourquoi\n\nUn refus porte sur **une ligne**, pas sur le fichier : l'import va au bout sans\nelle, et le rapport nomme son numéro de ligne et son motif.\n\n| Ligne | Ce qui se passe |\n|---|---|\n| `12` seule | **refusée**. Elle ne demande ni titre ni description — et elle n'efface pas les deux. |\n| `REF-7;Mon titre` | **refusée**. Ce module travaille sur les identifiants de catégorie. |\n| `12 produits;Mon titre` | **refusée**. Cela ne vaut pas la catégorie 12. |\n| un titre de 256 caractères | **refusée**, avec sa longueur. La colonne en accepte 255, et une phrase coupée en deux dans Google n'est pas un résultat. |\n| un titre portant `\u003C`, `>`, `{` ou `}` | **refusée**. PrestaShop les refuse aussi, mais plus loin — autant le dire tout de suite. |\n| `12;Premier jet` puis `12;Titre corrigé` | la **dernière** vaut, et le rapport nomme la ligne remplacée. |\n| une catégorie qui n'existe pas | **signalée** comme non écrite. Un `UPDATE` sur zéro ligne réussit sans rien faire : ce n'est pas un succès. |\n\n## Ce qui a été mesuré\n\nLe module est livré avec ses deux jeux d'épreuves, rejouables sans PHPUnit et\nsans boutique pour le premier :\n\n- **80 vérifications** sur la décision — ce qu'un fichier demande, avant toute\n  écriture — et **16 mutations** jouées, dont 16 rougissent. Une décision\n  qu'aucune épreuve ne garde est une décision qui se perdra à la prochaine\n  retouche.\n- **43 preuves de comportement** sur de vraies catégories, en PrestaShop 9.0.3 et\n  PHP 8.4.15 : l'effacement est mesuré sur la version précédente, puis le refus\n  sur la même ligne ; la séparation des langues est vérifiée sur deux langues\n  installées ; un titre de 255 caractères accentués est relu entier.\n\nDeux de ces mutations ont dit ce que la relecture ne voyait pas. C'est leur\nintérêt.\n\n## Ce qu'il ne fait pas\n\n- Il ne touche **que** les catégories. Les produits et les pages ont leurs\n  propres métadonnées, et un autre module.\n- Il n'écrit **aucune** table, ne pose **aucun** greffon, ne garde **aucune** clé\n  de configuration. La désinstallation ne laisse rien derrière elle.\n- Il n'a **aucun** contrôleur, ni public ni d'administration. Son seul point\n  d'entrée est sa page « Configurer », derrière votre session employé et le jeton\n  du back-office. Il n'y a rien à atteindre de l'extérieur.\n\n## Si vous veniez de la version 1.0.0\n\nMontez, puis relisez vos métadonnées sur quelques catégories.\n\nLa 1.0.0 effaçait dès qu'une ligne de votre fichier avait moins de trois\ncolonnes, et elle ne le disait pas. La 2.0.0 ne peut pas réparer cela : la table\nne garde pas d'historique, et rien ne dit ce qu'il y avait avant. Vos recours\nsont une sauvegarde de base antérieure, ou ce que l'index de Google garde encore\nde vos anciens titres.\n\nCe qui est écrit noir sur blanc dans le fichier de montée du module, plutôt que\ndécouvert plus tard.","2.0.0","\u003Ch2>Le problème\u003C\u002Fh2>\n\u003Cp>Vous avez deux cents catégories, et un tableur où vous avez enfin écrit les titres et les descriptions SEO qui vont bien. Il faut maintenant les reporter une par une dans le back-office, onglet SEO, catégorie après catégorie.\u003C\u002Fp>\n\u003Cp>Et si vous avez déjà essayé de le faire en masse, vous connaissez la peur qui va avec : un import qui se trompe sur vos métadonnées ne les abîme pas, il les \u003Cstrong>efface\u003C\u002Fstrong>. Le travail de référencement de six mois tient dans deux colonnes de base de données qui ne gardent aucun historique.\u003C\u002Fp>\n\u003Ch2>Comment ça marche\u003C\u002Fh2>\n\u003Cp>Les colonnes se \u003Cstrong>nomment\u003C\u002Fstrong>, et l&#39;ordre n&#39;a pas d&#39;importance :\u003C\u002Fp>\n\u003Cpre>\u003Ccode>id_category;meta_title;meta_description\n12;Turbos reconditionnés garantis 2 ans;Nos turbos révisés sur banc, livrés en 48 h\n13;Injecteurs diesel toutes marques;Injecteurs testés, garantie pièce et main-d&#39;œuvre\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Vous pouvez n&#39;en remplir qu&#39;une :\u003C\u002Fp>\n\u003Cpre>\u003Ccode>id_category;meta_title\n14;Pompes haute pression révisées\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Le séparateur est \u003Cstrong>détecté\u003C\u002Fstrong> : point-virgule, virgule, tabulation ou barre verticale. Le fichier que votre tableur vient de produire convient tel quel, y compris en « CSV UTF-8 » avec sa marque d&#39;octets invisible.\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Colonne\u003C\u002Fth>\u003Cth>Rôle\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Ccode>id_category\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>obligatoire, un entier strictement positif\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>meta_title\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>facultative, 255 caractères au plus\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>meta_description\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>facultative, 512 caractères au plus\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>id_lang\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>facultative, pour régler la langue \u003Cstrong>ligne par ligne\u003C\u002Fstrong>\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2>Il ne vide jamais un champ\u003C\u002Fh2>\n\u003Cp>C&#39;est la règle du module, et elle n&#39;a pas d&#39;exception.\u003C\u002Fp>\n\u003Cp>Une colonne que vous ne mettez pas dans le fichier laisse la métadonnée \u003Cstrong>en place\u003C\u002Fstrong>. Une cellule que vous laissez vide, aussi. Et une ligne qui ne demande ni titre ni description est \u003Cstrong>refusée\u003C\u002Fstrong> plutôt qu&#39;appliquée comme un effacement.\u003C\u002Fp>\n\u003Cp>Pour vider une métadonnée, passez par la fiche de la catégorie : c&#39;est un geste qui se fait une fois, en la regardant, pas en masse depuis un tableur.\u003C\u002Fp>\n\u003Ch2>L&#39;essai à blanc est actif par défaut\u003C\u002Fh2>\n\u003Cp>Sur un module qui écrit dans votre référencement, le premier geste ne doit pas être celui qui écrit.\u003C\u002Fp>\n\u003Cp>L&#39;essai à blanc lit le fichier et affiche, catégorie par catégorie, \u003Cstrong>le titre actuel barré et le nouveau en dessous\u003C\u002Fstrong>. Ce qui ne change pas est marqué comme inchangé. Et rien n&#39;est écrit.\u003C\u002Fp>\n\u003Ch2>La langue, vous la choisissez\u003C\u002Fh2>\n\u003Cp>Un écran vous demande dans quelle langue écrire, parmi celles installées sur la boutique. Elle est pré-remplie avec la vôtre, mais vous la voyez avant de valider.\u003C\u002Fp>\n\u003Cp>Si votre fichier porte une colonne \u003Ccode>id_lang\u003C\u002Fcode>, c&#39;est elle qui décide, ligne par ligne : un seul fichier peut donc régler le français et l&#39;anglais d&#39;une même catégorie.\u003C\u002Fp>\n\u003Cp>Les autres langues ne sont pas touchées. En multiboutique, les autres boutiques non plus.\u003C\u002Fp>\n\u003Ch2>Ce qu&#39;il refuse, et pourquoi\u003C\u002Fh2>\n\u003Cp>Un refus porte sur \u003Cstrong>une ligne\u003C\u002Fstrong>, pas sur le fichier : l&#39;import va au bout sans elle, et le rapport nomme son numéro de ligne et son motif.\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Ligne\u003C\u002Fth>\u003Cth>Ce qui se passe\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Ccode>12\u003C\u002Fcode> seule\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Elle ne demande ni titre ni description — et elle n&#39;efface pas les deux.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>REF-7;Mon titre\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Ce module travaille sur les identifiants de catégorie.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>12 produits;Mon titre\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Cela ne vaut pas la catégorie 12.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>un titre de 256 caractères\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>, avec sa longueur. La colonne en accepte 255, et une phrase coupée en deux dans Google n&#39;est pas un résultat.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>un titre portant \u003Ccode>&lt;\u003C\u002Fcode>, \u003Ccode>&gt;\u003C\u002Fcode>, \u003Ccode>{\u003C\u002Fcode> ou \u003Ccode>}\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. PrestaShop les refuse aussi, mais plus loin — autant le dire tout de suite.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>12;Premier jet\u003C\u002Fcode> puis \u003Ccode>12;Titre corrigé\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>la \u003Cstrong>dernière\u003C\u002Fstrong> vaut, et le rapport nomme la ligne remplacée.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>une catégorie qui n&#39;existe pas\u003C\u002Ftd>\u003Ctd>\u003Cstrong>signalée\u003C\u002Fstrong> comme non écrite. Un \u003Ccode>UPDATE\u003C\u002Fcode> sur zéro ligne réussit sans rien faire : ce n&#39;est pas un succès.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2>Ce qui a été mesuré\u003C\u002Fh2>\n\u003Cp>Le module est livré avec ses deux jeux d&#39;épreuves, rejouables sans PHPUnit et sans boutique pour le premier :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>80 vérifications\u003C\u002Fstrong> sur la décision — ce qu&#39;un fichier demande, avant toute\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>écriture — et \u003Cstrong>16 mutations\u003C\u002Fstrong> jouées, dont 16 rougissent. Une décision qu&#39;aucune épreuve ne garde est une décision qui se perdra à la prochaine retouche.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>43 preuves de comportement\u003C\u002Fstrong> sur de vraies catégories, en PrestaShop 9.0.3 et\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>PHP 8.4.15 : l&#39;effacement est mesuré sur la version précédente, puis le refus sur la même ligne ; la séparation des langues est vérifiée sur deux langues installées ; un titre de 255 caractères accentués est relu entier.\u003C\u002Fp>\n\u003Cp>Deux de ces mutations ont dit ce que la relecture ne voyait pas. C&#39;est leur intérêt.\u003C\u002Fp>\n\u003Ch2>Ce qu&#39;il ne fait pas\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Il ne touche \u003Cstrong>que\u003C\u002Fstrong> les catégories. Les produits et les pages ont leurs\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>propres métadonnées, et un autre module.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Il n&#39;écrit \u003Cstrong>aucune\u003C\u002Fstrong> table, ne pose \u003Cstrong>aucun\u003C\u002Fstrong> greffon, ne garde \u003Cstrong>aucune\u003C\u002Fstrong> clé\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>de configuration. La désinstallation ne laisse rien derrière elle.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Il n&#39;a \u003Cstrong>aucun\u003C\u002Fstrong> contrôleur, ni public ni d&#39;administration. Son seul point\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>d&#39;entrée est sa page « Configurer », derrière votre session employé et le jeton du back-office. Il n&#39;y a rien à atteindre de l&#39;extérieur.\u003C\u002Fp>\n\u003Ch2>Si vous veniez de la version 1.0.0\u003C\u002Fh2>\n\u003Cp>Montez, puis relisez vos métadonnées sur quelques catégories.\u003C\u002Fp>\n\u003Cp>La 1.0.0 effaçait dès qu&#39;une ligne de votre fichier avait moins de trois colonnes, et elle ne le disait pas. La 2.0.0 ne peut pas réparer cela : la table ne garde pas d&#39;historique, et rien ne dit ce qu&#39;il y avait avant. Vos recours sont une sauvegarde de base antérieure, ou ce que l&#39;index de Google garde encore de vos anciens titres.\u003C\u002Fp>\n\u003Cp>Ce qui est écrit noir sur blanc dans le fichier de montée du module, plutôt que découvert plus tard.\u003C\u002Fp>",{"footer":62},{"theme":63,"description":64,"hours":64,"logo":65,"contact":69,"social":70,"bottomBar":80,"newsletter":81},"dark",null,{"src":66,"href":67,"alt":68},"\u002Flogo-ac.svg","\u002F","Alexandre Carette",{"email":64,"phone":64,"address":64,"cta":64},[71,74,77],{"platform":72,"href":73,"label":72},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":75,"href":76,"label":75},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":78,"href":79,"label":78},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":64},{"show":82,"title":64,"description":64,"placeholder":64,"ctaLabel":64,"consentText":83},false,"J'accepte de recevoir par e-mail les actualités de CodeMyShop et d'Alexandre Carette : nouveaux modules libres, astuces PrestaShop, SEO et performance. Je peux me désinscrire à tout moment grâce au lien présent dans chaque message.",{"faq":85,"theme":122,"domain":126,"clientId":130,"features":131,"contactEmail":133,"defaultColorMode":21,"gscSiteUrl":134},[86,89,92,95,98,101,104,107,110,113,116,119],{"reponse":87,"question":88},"L'architecture Headless sépare le moteur e-commerce (PrestaShop via API REST) de l'interface (Nuxt 4, SSR). Résultat : des performances 3× supérieures en Core Web Vitals, une liberté de design totale, et la possibilité d'intégrer l'IA nativement dans le parcours d'achat. Je le recommande car je l'ai éprouvé sur +10 ans de projets : la maîtrise technique est entière, les données restent chez vous.","Qu'est-ce que l'architecture PrestaShop Headless et pourquoi la recommandez-vous ?",{"reponse":90,"question":91},"Dans le cadre d'une mission, j'intègre l'IA comme un outil de production, pas un gadget. Concrètement : génération automatique de fiches produit optimisées SEO, transcréation multilingue adaptée culturellement (FR\u002FEN\u002FDE), publication sociale automatisée, scripts vidéo Shorts, nurturing client. Tout est orchestré depuis un Hub centralisé avec suivi FinOps des coûts IA en temps réel — que vous voyez à chaque livraison.","Comment intégrez-vous l'IA dans un projet e-commerce ?",{"reponse":93,"question":94},"Mon conseil est clair : les solutions SaaS comme Shopify offrent une mise en route rapide, mais vous cèdent votre infrastructure, vos données et une part de votre CA. Avec PrestaShop Headless, vous êtes propriétaire du code, des données et de l'infrastructure. Pas de dépendance plateforme, souveraineté RGPD, liberté technique totale pour scaler et intégrer l'IA. Je prends en charge la migration ou le build complet dans le cadre d'un forfait ou d'une régie au TJM.","Pourquoi PrestaShop Headless plutôt que Shopify ou WooCommerce ?",{"reponse":96,"question":97},"Tout commence par un premier échange de 30 min pour cadrer votre besoin. Je vous remets ensuite un devis (forfait ou régie au TJM) avec des jalons clairs et sans surprise. Une fois accepté, je réalise la mission ; à la livraison, le code et les accès vous appartiennent intégralement. Pas d'abonnement, pas de dépendance : vous repartez autonomes.","Comment se déroule une mission avec vous ?",{"reponse":99,"question":100},"Le SSR (Server-Side Rendering) via Nuxt 4 garantit un HTML complet pour les crawlers Google et les LLM (ChatGPT, Perplexity). J'optimise les Core Web Vitals, la structure des URLs, le maillage interne, le balisage Schema.org (Product, FAQ, Person) et l'architecture de contenu pour maximiser le trafic organique et la visibilité dans les réponses IA.","Comment fonctionne le SEO technique sur une architecture Headless ?",{"reponse":102,"question":103},"Le tarif est calé sur la nature de la mission (audit, refonte, accompagnement long, build complet) et discuté en début de relation. Chaque mission démarre par un audit technique gratuit de 30 minutes pour cadrer le besoin, suivi d'un devis détaillé avec jalons clairs et sans surprise. +10 ans d'expertise, 193 projets livrés et une maîtrise complète de la stack (PrestaShop, Nuxt 4, Docker, IA).","Quel est votre tarif et comment se structure une mission ?",{"reponse":105,"question":106},"Oui, dans le cadre d'une mission. Je déploie des infrastructures containerisées (Docker, Nginx, Redis, PM2) sur VPS souverain français, avec CI\u002FCD GitHub Actions et déploiements Zero-Downtime. Vos données restent en France, conformément au RGPD. À la livraison, vous maîtrisez votre stack : je vous forme et vous remets la documentation d'exploitation.","Prenez-vous en charge l'infrastructure et le DevOps ?",{"reponse":108,"question":109},"Oui — c'est l'une de mes spécialités. Je développe des modules PrestaShop sur mesure dans le cadre d'une mission (forfait ou régie). CRM, génération IA de contenu, catalogue headless, automatisations métier : chaque module est sécurisé, documenté et vous appartient intégralement à la livraison. Pas de catalogue produit : chaque module est conçu pour votre besoin précis.","Développez-vous des modules PrestaShop sur mesure ?",{"reponse":111,"question":112},"Je configure une boucle d'analyse qui croise trois sources que vous possédez : vos logs serveur, votre Google Search Console via API, et les comportements visiteurs via Matomo auto-hébergé sur votre VPS. L'IA identifie le contenu manquant — requêtes sans page, pages à faible conversion — et le génère. Zéro donnée ne transite par des serveurs tiers. Le coût IA est suivi token par token et vous est reporté.","Comment l'IA identifie-t-elle le contenu à produire pour mon site ?",{"reponse":114,"question":115},"Basé à Metz (Grand Est), j'accompagne des entreprises dans toute la France. Audit initial en visio, suivi de projet en temps réel, et déploiements automatisés. La distance n'est jamais un frein — 119 avis 5 étoiles sur Malt en témoignent.","Acceptez-vous des clients partout en France ?",{"reponse":117,"question":118},"Le forfait convient aux périmètres bien définis : refonte, module précis, audit. Le prix et le délai sont fixés à l'avance, sans surprise. La régie (au TJM) convient aux missions évolutives : accompagnement technique long, sprints itératifs, roadmap ouverte. Dans les deux cas, le code vous appartient à la livraison et je n'impose aucun abonnement ni dépendance.","Quelle différence entre une mission au forfait et une mission en régie (TJM) ?",{"reponse":120,"question":121},"Cliquez sur \"Réserver un appel\" pour un échange gratuit de 30 minutes. J'analyse vos enjeux e-commerce, votre stack actuelle et les opportunités d'optimisation SEO et IA. Aucun engagement — juste un diagnostic clair et actionnable.","Comment réserver un premier échange pour discuter de mon projet ?",{"ui":123,"colors":124,"typography":125},{"shadow":20,"borderRadius":18},{"muted":10,"primary":6,"footerBg":11,"headerBg":11,"topBarBg":9,"secondary":7,"background":8,"foreground":9,"topBarText":11},{"fontUrl":15,"fontFamily":14},[127,128,129],"alexandrecarette.fr","www.alexandrecarette.fr","localhost","ac-hub",{"showLogin":20,"showSearch":82,"showContact":82,"headerLayout":132,"showWishlist":82,"stickyHeader":82},"inline","contact@alexandrecarette.fr","https:\u002F\u002Falexandrecarette.fr\u002F",{"header":136},{"logo":137,"topBar":140,"contactEmail":133,"contactPhone":64,"features":143,"navBar":64,"headerLinks":144,"storesHref":64},{"src":66,"alt":138,"text":68,"href":67,"class":139},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":64,"messageMobile":64,"showLanguages":82,"align":141,"languages":142},"left",[],{"showSearch":82,"showWishlist":82,"showLogin":20,"showContact":82,"showCart":82,"showQuoteButton":20,"showBlogLink":82,"showContactLink":82,"showGiftcardLink":82,"showStoresLink":82,"stickyHeader":20,"staticHeader":82,"headerLayout":132},{},{"items":146},[147,157,165,173,181,189,198,206,214],{"id":148,"type":149,"label":150,"href":152,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":154,"barVisible":20,"children":155,"psChildren":156},41,"link",{"fr":151},"Expertise","\u002Fexpertise","picto",0,[],[],{"id":158,"type":149,"label":159,"href":161,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":162,"barVisible":20,"children":163,"psChildren":164},42,{"fr":160},"Blog","\u002Fblog",1,[],[],{"id":166,"type":149,"label":167,"href":169,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":170,"barVisible":20,"children":171,"psChildren":172},43,{"fr":168},"Méthode","\u002Fmodules",2,[],[],{"id":174,"type":149,"label":175,"href":177,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":178,"barVisible":20,"children":179,"psChildren":180},49,{"fr":176},"Modules gratuits","\u002Fmodules-libres",3,[],[],{"id":182,"type":149,"label":183,"href":185,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":186,"barVisible":20,"children":187,"psChildren":188},44,{"fr":184},"Outils IA","\u002Foutils-ia",4,[],[],{"id":190,"type":149,"label":191,"href":193,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":194,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":195,"barVisible":20,"children":196,"psChildren":197},45,{"fr":192},"Tarifs","\u002Ftarifs",{"highlight":20},5,[],[],{"id":199,"type":149,"label":200,"href":202,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":203,"barVisible":20,"children":204,"psChildren":205},46,{"fr":201},"Academy","\u002Facademy",6,[],[],{"id":207,"type":149,"label":208,"href":210,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":211,"barVisible":20,"children":212,"psChildren":213},47,{"fr":209},"À propos","\u002Fa-propos",7,[],[],{"id":215,"type":149,"label":216,"href":218,"icon":64,"iconRole":153,"description":64,"badge":64,"groupTitle":64,"groupKey":64,"style":64,"gridColumns":64,"cssClass":64,"psCategoryId":64,"psProductId":64,"showPsChildren":82,"position":219,"barVisible":20,"children":220,"psChildren":221},48,{"fr":217},"Contact","\u002Fcontact",8,[],[],{"contexts":223},[],{"ok":20,"alternates":225},{"fr":226},"\u002Fmodules-libres\u002Fmetas-seo-categories-csv-prestashop",{"footer":228},{"theme":63,"description":64,"hours":64,"logo":229,"contact":230,"social":231,"bottomBar":235,"newsletter":236},{"src":66,"href":67,"alt":68},{"email":64,"phone":64,"address":64,"cta":64},[232,233,234],{"platform":72,"href":73,"label":72},{"platform":75,"href":76,"label":75},{"platform":78,"href":79,"label":78},{"copyright":64},{"show":82,"title":64,"description":64,"placeholder":64,"ctaLabel":64,"consentText":83},{"sections":238},[],{"columns":240},[241,252,278,291],{"title":242,"position":162,"links":243},"Plateforme",[244,245,248,249],{"label":192,"href":193,"external":82},{"label":246,"href":247,"external":82},"Devenir Ambassadeur","\u002Fambassadeur",{"label":168,"href":169,"external":82},{"label":250,"href":251,"external":20},"CodeMyShop (open-source)","https:\u002F\u002Fcodemyshop.com",{"title":253,"position":170,"links":254},"Le Synedre",[255,258,261,264,267,270,272,275],{"label":256,"href":257,"external":82},"L'histoire","\u002Fsynedre",{"label":259,"href":260,"external":20},"Constitution","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconstitution",{"label":262,"href":263,"external":20},"L'équipe","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fagents",{"label":265,"href":266,"external":82},"Le réacteur en direct","\u002Freacteur",{"label":268,"href":269,"external":20},"Le Drill (entraînement)","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fdrill",{"label":271,"href":263,"external":20},"Les agents IA",{"label":273,"href":274,"external":20},"La Conduite","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconduite",{"label":276,"href":277,"external":20},"Charte plateforme","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fcharte",{"title":279,"position":178,"links":280},"Ressources",[281,282,283,285,288],{"label":160,"href":161,"external":82},{"label":201,"href":202,"external":82},{"label":284,"href":152,"external":82},"Expertise PrestaShop",{"label":286,"href":287,"external":82},"Flywheel","\u002Fflywheel",{"label":289,"href":290,"external":82},"Manifeste","\u002Fmanifeste",{"title":209,"position":186,"links":292},[293,294,297],{"label":68,"href":210,"external":82},{"label":295,"href":296,"external":20},"Dossier de presse","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fpresse",{"label":217,"href":218,"external":82},{"reviews":299,"total":333,"business":64},[300,306,312,317,323,329],{"author":301,"company":302,"rating":195,"title":303,"text":304,"date":305,"source":75},"Office","MONOGRAM","Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son a","Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son accompagnement. Alexandre comprend parfaitement les enjeux et problématiques liés à notre activité et parvient, en réponse, à nous apporter des solutions techniques et fonctionnelles en respectant coûts et délais.","2023-07-18",{"author":307,"company":308,"rating":195,"title":309,"text":310,"date":311,"source":75},"Marine","MES-Distribution","La résolution de mes problèmes à été rapide et efficace, je recommande :)","La résolution de mes problèmes à été rapide et efficace, je recommande :).","2023-01-20",{"author":313,"company":314,"rating":195,"title":315,"text":315,"date":316,"source":75},"Jl","Kaigan","Super","2022-10-25",{"author":318,"company":319,"rating":195,"title":320,"text":321,"date":322,"source":75},"Elite Cbd","Canna Elite Europe Ltd","Au Top","Au Top. tout simplement","2022-06-21",{"author":324,"company":325,"rating":195,"title":326,"text":327,"date":328,"source":75},"Lorie","GRIIN outdoor","Configuration d''un VPS et migration réalisée avec succès, bons conseils, dia","Configuration d'un VPS et migration réalisée avec succès, bons conseils, diagnostique rapide et efficace de nos problèmes. Je recommande.","2022-06-01",{"author":318,"company":319,"rating":195,"title":330,"text":331,"date":332,"source":75},"Toujours aussi clair et clairvoyant","Toujours aussi clair et clairvoyant... ;) Un plaisir de travailler avec Alexandre","2022-05-16",33]