[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fcpBFNVk_M1q8_2xN6wi__VPfYTGK3Q_ka_Meaempn3A":22,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":66,"megamenu":147,"header-db":203,"$fB-mdYcPfWkM7UMRZ_Iyju9ODMjO_THIL2POB5VetbUE":216,"footer-db":230},{"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",{"title":23,"slug":24,"metaDescription":25,"category":26,"tags":27,"difficulty":34,"psVersions":35,"content":38,"faq":39,"tldr":61,"readingTime":62,"generatedAt":63,"publishDate":63,"relatedArticles":64,"sourceCategory":65},"Configurer le suivi des conversions Google Tag Manager dans PrestaShop","configurer-suivi-conversions-google-tag-manager-prestashop","Guide complet pour intégrer Google Tag Manager dans PrestaShop : installation GTM, balises Smarty {literal}, suivi e-commerce et erreurs courantes à éviter.","configuration",[28,29,30,31,32,33],"google-tag-manager","conversion-tracking","smarty","analytics","gtm","e-commerce-tracking","intermediaire",[36,37],"1.7","8.x","\u003Ch2>Pourquoi le suivi des conversions est indispensable\u003C\u002Fh2>\n\u003Cp>Sans suivi des conversions, piloter une boutique PrestaShop revient à naviguer sans instruments. Google Tag Manager (GTM) est devenu l'outil de référence pour centraliser tous vos scripts de tracking — Google Ads, Meta Pixel, GA4 — sans toucher au code à chaque modification.\u003C\u002Fp>\n\u003Cp>Pourtant, l'intégration de GTM dans PrestaShop pose des problèmes spécifiques liés au moteur de templates Smarty. Cet article couvre les erreurs les plus fréquentes et la méthode propre pour une intégration fiable.\u003C\u002Fp>\n\u003Ch2>Méthode d'intégration de Google Tag Manager\u003C\u002Fh2>\n\u003Ch3>Étape 1 : le snippet JavaScript (head)\u003C\u002Fh3>\n\u003Cp>Le premier extrait GTM doit être placé le plus haut possible dans la balise \u003Ccode>\u003Chead>\u003C\u002Fcode> de votre thème. Dans PrestaShop, le fichier cible est généralement :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**PrestaShop 1.7 \u002F 8.x** : `themes\u002Fvotre-theme\u002Ftemplates\u002F_partials\u002Fhead.tpl`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;!-- Google Tag Manager --&gt;\n&lt;script&gt;{literal}(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https:\u002F\u002Fwww.googletagmanager.com\u002Fgtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-XXXXXXX');{\u002Fliteral}&lt;\u002Fscript&gt;\n&lt;!-- End Google Tag Manager --&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Étape 2 : le snippet noscript (body)\u003C\u002Fh3>\n\u003Cp>Le second extrait doit être inséré juste après l'ouverture de la balise \u003Ccode>\u003Cbody>\u003C\u002Fcode>. Le fichier cible :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**PrestaShop 1.7 \u002F 8.x** : `themes\u002Fvotre-theme\u002Ftemplates\u002Flayouts\u002Flayout-both-columns.tpl` (ou le layout principal de votre thème)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;!-- Google Tag Manager (noscript) --&gt;\n&lt;noscript&gt;&lt;iframe src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fns.html?id=GTM-XXXXXXX\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"&gt;&lt;\u002Fiframe&gt;&lt;\u002Fnoscript&gt;\n&lt;!-- End Google Tag Manager (noscript) --&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Attention\u003C\u002Fstrong> : ce snippet \u003Ccode>noscript\u003C\u002Fcode> ne contient aucune variable JavaScript ni accolade. Il ne nécessite donc \u003Cstrong>pas\u003C\u002Fstrong> de balises \u003Ccode>{literal}\u003C\u002Fcode>. L'ajouter inutilement ne cassera rien, mais c'est une surcharge syntaxique inutile.\u003C\u002Fp>\n\u003Ch2>Le piège des balises `{literal}` dans Smarty\u003C\u002Fh2>\n\u003Cp>Smarty utilise les accolades \u003Ccode>{ }\u003C\u002Fcode> comme délimiteurs de variables et de fonctions. Or, le code JavaScript en est truffé. Sans précaution, Smarty tente d'interpréter \u003Ccode>function(){}\u003C\u002Fcode> comme une variable Smarty et génère une erreur de compilation du template.\u003C\u002Fp>\n\u003Ch3>Quand utiliser `{literal}` ?\u003C\u002Fh3>\n\u003Cp>La règle est simple :\u003C\u002Fp>\n\u003Ctr>\u003Cth>Contenu\u003C\u002Fth>\u003Cth>Accolades JS ?\u003C\u002Fth>\u003Cth>`{literal}` nécessaire ?\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Snippet JS GTM (head)\u003C\u002Fth>\u003Cth>Oui (`function(){}`, objets)\u003C\u002Fth>\u003Cth>**Oui**\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Snippet noscript GTM (body)\u003C\u002Fth>\u003Cth>Non\u003C\u002Fth>\u003Cth>**Non**\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Code GA4 `gtag()` inline\u003C\u002Fth>\u003Cth>Oui\u003C\u002Fth>\u003Cth>**Oui**\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Pixel Meta\u002FFacebook\u003C\u002Fth>\u003Cth>Oui (`fbq()` avec objets)\u003C\u002Fth>\u003Cth>**Oui**\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Simple balise HTML sans JS\u003C\u002Fth>\u003Cth>Non\u003C\u002Fth>\u003Cth>**Non**\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ch3>Erreur fréquente : oublier `{literal}` sur le JavaScript\u003C\u002Fh3>\n\u003Cp>Si vous collez le snippet JavaScript GTM directement dans un fichier \u003Ccode>.tpl\u003C\u002Fcode> sans \u003Ccode>{literal}\u003C\u002Fcode>, Smarty renverra une erreur du type :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\nFatal error: Uncaught SmartyCompilerException: Syntax Error in template\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>La solution est d'encadrer \u003Cstrong>tout le bloc JavaScript\u003C\u002Fstrong> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;script&gt;\n{literal}\n\u002F\u002F Votre code JavaScript ici\n(function(w,d,s,l,i){w[l]=w[l]||[];\n\u002F\u002F ...\n});\n{\u002Fliteral}\n&lt;\u002Fscript&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Erreur inverse : mettre `{literal}` sur du HTML pur\u003C\u002Fh3>\n\u003Cp>Si vous encadrez le snippet \u003Ccode>noscript\u003C\u002Fcode> (qui ne contient que du HTML) avec \u003Ccode>{literal}\u003C\u002Fcode>, ce n'est pas bloquant mais c'est inutile. En revanche, si ce même bloc devait un jour contenir des variables Smarty (par exemple \u003Ccode>{$shop_name}\u003C\u002Fcode>), les balises \u003Ccode>{literal}\u003C\u002Fcode> empêcheraient leur interprétation. Gardez une bonne hygiène : n'utilisez \u003Ccode>{literal}\u003C\u002Fcode> que là où c'est nécessaire.\u003C\u002Fp>\n\u003Ch2>Erreur courante : double imbrication de `\u003Cnoscript>`\u003C\u002Fh2>\n\u003Cp>Une erreur classique lors du copier-coller est de créer une double imbrication de la balise \u003Ccode>\u003Cnoscript>\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;!-- ❌ INCORRECT : double noscript --&gt;\n&lt;noscript&gt;&lt;iframe src=\"&lt;!-- Google Tag Manager (noscript) --&gt;\n&lt;noscript&gt;&lt;iframe src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fns.html?id=GTM-XXXXXXX\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"&gt;&lt;\u002Fiframe&gt;&lt;\u002Fnoscript&gt;\n&lt;!-- End Google Tag Manager (noscript) --&gt;\n&lt;\u002Fiframe&gt;&lt;\u002Fnoscript&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ce HTML malformé empêche GTM de fonctionner pour les utilisateurs ayant JavaScript désactivé, et peut provoquer des erreurs de validation W3C. Le navigateur tentera de corriger le DOM, mais le résultat sera imprévisible.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>La version correcte\u003C\u002Fstrong> est simple et propre :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-html\">\n&lt;!-- Google Tag Manager (noscript) --&gt;\n&lt;noscript&gt;&lt;iframe src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fns.html?id=GTM-XXXXXXX\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"&gt;&lt;\u002Fiframe&gt;&lt;\u002Fnoscript&gt;\n&lt;!-- End Google Tag Manager (noscript) --&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Approche recommandée sur PrestaShop 8.x : le module dédié\u003C\u002Fh2>\n\u003Cp>Sur PrestaShop 8.x, plutôt que de modifier manuellement les templates, la méthode la plus maintenable consiste à utiliser un module qui injecte GTM via les hooks natifs :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Hook `displayHeader`** pour le snippet JavaScript\u003C\u002Fli>\n\u003Cli>**Hook `displayAfterBodyOpeningTag`** (disponible depuis PS 1.7.6) pour le snippet noscript\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Cette approche présente plusieurs avantages :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Survit aux mises à jour du thème** — pas de fichier `.tpl` modifié à re-appliquer\u003C\u002Fli>\n\u003Cli>**Configuration back-office** — l'ID GTM se gère depuis l'admin\u003C\u002Fli>\n\u003Cli>**Compatibilité multi-thème** — fonctionne quel que soit le thème actif\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Exemple minimal de module\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F modules\u002Fmygtm\u002Fmygtm.php\nclass MyGtm extends Module\n{\n    public function __construct()\n    {\n        $this-&gt;name = 'mygtm';\n        $this-&gt;version = '1.0.0';\n        $this-&gt;author = 'Alexandre Carette';\n        parent::__construct();\n        $this-&gt;displayName = $this-&gt;l('Google Tag Manager');\n    }\n\n    public function install()\n    {\n        return parent::install()\n            && $this-&gt;registerHook('displayHeader')\n            && $this-&gt;registerHook('displayAfterBodyOpeningTag');\n    }\n\n    public function hookDisplayHeader($params)\n    {\n        $gtmId = Configuration::get('MYGTM_ID');\n        if (!$gtmId) return '';\n\n        return \"&lt;script&gt;(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n            'https:\u002F\u002Fwww.googletagmanager.com\u002Fgtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n            })(window,document,'script','dataLayer','{$gtmId}');&lt;\u002Fscript&gt;\";\n    }\n\n    public function hookDisplayAfterBodyOpeningTag($params)\n    {\n        $gtmId = Configuration::get('MYGTM_ID');\n        if (!$gtmId) return '';\n\n        return '&lt;noscript&gt;&lt;iframe src=\"https:\u002F\u002Fwww.googletagmanager.com\u002Fns.html?id=' . htmlspecialchars($gtmId, ENT_QUOTES) . '\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"&gt;&lt;\u002Fiframe&gt;&lt;\u002Fnoscript&gt;';\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Configurer le suivi e-commerce dans GTM\u003C\u002Fh2>\n\u003Cp>Une fois GTM en place, l'étape suivante est de pousser les données de conversion dans le \u003Ccode>dataLayer\u003C\u002Fcode>. Voici les événements clés à configurer :\u003C\u002Fp>\n\u003Ch3>Événement d'achat (page de confirmation)\u003C\u002Fh3>\n\u003Cp>Dans le template \u003Ccode>order-confirmation.tpl\u003C\u002Fcode> (ou via un module sur le hook \u003Ccode>displayOrderConfirmation\u003C\u002Fcode>) :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n&lt;script&gt;\n{literal}\nwindow.dataLayer = window.dataLayer || [];\ndataLayer.push({\n  'event': 'purchase',\n  'ecommerce': {\n    'transaction_id': '{\u002Fliteral}{$order.details.reference}{literal}',\n    'value': {\u002Fliteral}{$order.totals.total.amount}{literal},\n    'currency': '{\u002Fliteral}{$currency.iso_code}{literal}',\n    'items': [\n{\u002Fliteral}\n{foreach from=$order.products item=product name=products}\n      {literal}{{\u002Fliteral}\n        'item_id': '{$product.reference}',\n        'item_name': '{$product.name|escape:'javascript'}',\n        'price': {$product.price},\n        'quantity': {$product.quantity}\n      {literal}}{\u002Fliteral}{if !$smarty.foreach.products.last},{\u002Fif}\n{\u002Fforeach}\n    {literal}]\n  }\n});\n{\u002Fliteral}\n&lt;\u002Fscript&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Notez l'alternance entre \u003Ccode>{literal}\u003C\u002Fcode> et \u003Ccode>{\u002Fliteral}\u003C\u002Fcode> : on sort du mode literal chaque fois qu'on a besoin d'une variable Smarty, puis on y revient pour les accolades JavaScript.\u003C\u002Fp>\n\u003Ch2>Vérification et débogage\u003C\u002Fh2>\n\u003Cp>Après intégration, vérifiez systématiquement :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Google Tag Assistant** (extension Chrome) : doit afficher votre conteneur GTM comme actif\u003C\u002Fli>\n\u003Cli>**Mode Aperçu GTM** : depuis l'interface GTM, activez le mode debug pour voir les événements en temps réel\u003C\u002Fli>\n\u003Cli>**Console développeur** : tapez `dataLayer` pour inspecter les données poussées\u003C\u002Fli>\n\u003Cli>**Google Analytics 4 > Temps réel** : vérifiez que les conversions remontent\u003C\u002Fli>\n\u003Cli>**Validateur W3C** : assurez-vous que le HTML généré est valide (pas de double `\u003Cnoscript>`)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Checklist récapitulative\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>[ ] Snippet JS GTM dans le `\u003Chead>` avec `{literal}` dans les fichiers `.tpl`\u003C\u002Fli>\n\u003Cli>[ ] Snippet noscript GTM après `\u003Cbody>` **sans** `{literal}`\u003C\u002Fli>\n\u003Cli>[ ] Pas de double imbrication `\u003Cnoscript>`\u003C\u002Fli>\n\u003Cli>[ ] DataLayer configuré pour l'événement `purchase`\u003C\u002Fli>\n\u003Cli>[ ] Tests via Tag Assistant et mode Aperçu GTM\u003C\u002Fli>\n\u003Cli>[ ] Validation W3C du HTML de sortie\u003C\u002Fli>\n\u003C\u002Ful>",[40,43,46,49,52,55,58],{"q":41,"a":42},"Faut-il utiliser les balises {literal} de Smarty pour tous les scripts dans PrestaShop ?","Non. Les balises {literal} ne sont nécessaires que lorsque votre code contient des accolades qui pourraient être interprétées par Smarty comme des variables ou des fonctions. Tout code JavaScript utilisant des accolades (fonctions, objets JSON, blocs conditionnels) doit être encadré par {literal}{\u002Fliteral} dans les fichiers .tpl. En revanche, du HTML simple sans accolades n'en a pas besoin.",{"q":44,"a":45},"Comment intégrer Google Tag Manager dans PrestaShop 8.x sans modifier les templates ?","La méthode recommandée est de créer un module PrestaShop qui utilise les hooks displayHeader (pour le snippet JavaScript) et displayAfterBodyOpeningTag (pour le snippet noscript). Cette approche survit aux mises à jour du thème et permet de gérer l'ID GTM depuis le back-office. Des modules gratuits et premium existent également sur la marketplace Addons.",{"q":47,"a":48},"Pourquoi mon suivi de conversions Google Tag Manager ne fonctionne pas sur PrestaShop ?","Les causes les plus fréquentes sont : 1) les balises {literal} manquantes autour du JavaScript dans les fichiers .tpl, ce qui provoque une erreur Smarty, 2) une double imbrication de la balise \u003Cnoscript> due à un copier-coller maladroit, 3) un mauvais placement du snippet (le JS doit être dans le \u003Chead>, le noscript juste après \u003Cbody>), 4) un cache PrestaShop ou Smarty non vidé après modification.",{"q":50,"a":51},"Comment vérifier que Google Tag Manager est correctement installé sur ma boutique PrestaShop ?","Utilisez l'extension Chrome Google Tag Assistant pour confirmer que le conteneur est détecté. Activez ensuite le mode Aperçu dans l'interface GTM pour visualiser les événements en temps réel. Tapez dataLayer dans la console développeur pour inspecter les données poussées. Enfin, vérifiez dans GA4 > Temps réel que les événements de conversion remontent correctement.",{"q":53,"a":54},"Quelle est la différence entre {literal} et le commentaire Smarty {* *} pour le tracking ?","Ce sont deux mécanismes totalement différents. {literal} indique à Smarty de ne pas interpréter le contenu entre les balises — le code est envoyé tel quel au navigateur. {* *} est un commentaire Smarty qui supprime entièrement le contenu du rendu HTML. Utiliser {* *} autour de votre code de tracking le supprimerait complètement. Pour le tracking, c'est toujours {literal} qu'il faut utiliser.",{"q":56,"a":57},"Comment envoyer les données de conversion e-commerce depuis PrestaShop vers Google Tag Manager ?","Il faut pousser un objet structuré dans le dataLayer JavaScript sur la page de confirmation de commande. L'événement doit être de type 'purchase' avec les données transaction_id, value, currency et items. Dans les templates Smarty, alternez entre {literal} et {\u002Fliteral} pour injecter les variables PrestaShop ({$order.details.reference}, {$order.totals.total.amount}, etc.) au milieu du JavaScript.",{"q":59,"a":60},"Le cache Smarty empêche-t-il la mise à jour de mon code GTM dans PrestaShop ?","Oui. PrestaShop compile et met en cache les templates Smarty. Après toute modification d'un fichier .tpl, vous devez vider le cache Smarty depuis Paramètres avancés > Performances > Vider le cache, ou supprimer manuellement le contenu du dossier var\u002Fcache\u002F. En développement, désactivez la compilation Smarty forcée pour voir vos modifications en temps réel.","Pour intégrer Google Tag Manager dans PrestaShop, le snippet JavaScript nécessite des balises {literal} dans les templates Smarty tandis que le snippet noscript n'en a pas besoin. Privilégiez un module avec les hooks displayHeader et displayAfterBodyOpeningTag pour une intégration maintenable qui survit aux mises à jour du thème.",6,"2026-03-21T14:39:45.000Z",[],"Utilisation de PrestaShop : configuration et difficultés",{"columns":67},[68,84,114,135],{"title":69,"links":70},"Plateforme",[71,75,78,81],{"label":72,"href":73,"external":74},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":76,"href":77,"external":74},"Devenir Ambassadeur","\u002Fambassadeur",{"label":79,"href":80,"external":74},"Modules PrestaShop","\u002Fmodules",{"label":82,"href":83,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":85,"links":86},"Le Synedre",[87,90,93,96,99,102,105,108,111],{"label":88,"href":89,"external":74},"L'histoire","\u002Fsynedre",{"label":91,"href":92,"external":74},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":94,"href":95,"external":74},"L'équipe","\u002Fequipe",{"label":97,"href":98,"external":74},"Le réacteur en direct","\u002Freacteur",{"label":100,"href":101,"external":74},"Le Drill (entraînement)","\u002Fdrill",{"label":103,"href":104,"external":74},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":106,"href":107,"external":74},"Les agents IA","\u002Fagents-ia",{"label":109,"href":110,"external":74},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":112,"href":113,"external":74},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":115,"links":116},"Ressources",[117,120,123,126,129,132],{"label":118,"href":119,"external":74},"Blog","\u002Fblog",{"label":121,"href":122,"external":74},"Academy","\u002Facademy",{"label":124,"href":125,"external":74},"Dictionnaire","\u002Fdictionnaire",{"label":127,"href":128,"external":74},"Expertise PrestaShop","\u002Fexpertise",{"label":130,"href":131,"external":74},"Flywheel","\u002Fflywheel",{"label":133,"href":134,"external":74},"Manifeste","\u002Fmanifeste",{"title":136,"links":137},"À propos",[138,141,144],{"label":139,"href":140,"external":74},"Alexandre Carette","\u002Fa-propos",{"label":142,"href":143,"external":74},"Dossier de presse","\u002Fpresse",{"label":145,"href":146,"external":74},"Contact","\u002Fcontact",{"items":148},[149,158,164,170,178,186,192,197],{"id":150,"type":151,"label":152,"href":128,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":155,"children":156,"psChildren":157},41,"link",{"fr":153},"Expertise",null,0,[],[],{"id":159,"type":151,"label":160,"href":119,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":161,"children":162,"psChildren":163},42,{"fr":118},1,[],[],{"id":165,"type":151,"label":166,"href":80,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":167,"children":168,"psChildren":169},43,{"fr":79},2,[],[],{"id":171,"type":151,"label":172,"href":174,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":175,"children":176,"psChildren":177},44,{"fr":173},"Outils IA","\u002Foutils-ia",3,[],[],{"id":179,"type":151,"label":180,"href":73,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":182,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":183,"children":184,"psChildren":185},45,{"fr":181},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":187,"type":151,"label":188,"href":122,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":189,"children":190,"psChildren":191},46,{"fr":121},5,[],[],{"id":193,"type":151,"label":194,"href":140,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":62,"children":195,"psChildren":196},47,{"fr":136},[],[],{"id":198,"type":151,"label":199,"href":146,"icon":154,"description":154,"badge":154,"groupTitle":154,"style":154,"gridColumns":154,"cssClass":154,"psCategoryId":154,"showPsChildren":74,"position":200,"children":201,"psChildren":202},48,{"fr":145},7,[],[],{"header":204},{"logo":205,"topBar":210,"contactEmail":213,"features":214,"navBar":154},{"src":206,"alt":207,"text":139,"href":208,"class":209},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":154,"showLanguages":74,"align":211,"languages":212},"left",[],"contact@alexandrecarette.fr",{"showSearch":74,"showWishlist":74,"showLogin":20,"showContact":74,"showCart":74,"stickyHeader":20,"headerLayout":215},"inline",{"academy":217,"blog":218,"expertise":229},[],[219,223,226],{"title":220,"url":221,"score":161,"type":222},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":224,"url":225,"score":161,"type":222},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":227,"url":228,"score":161,"type":222},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[],{"footer":231},{"theme":232,"description":154,"hours":154,"logo":233,"contact":234,"social":235,"bottomBar":245},"dark",{"src":206,"href":208,"alt":139},{"email":154,"phone":154,"address":154,"cta":154},[236,239,242],{"platform":237,"href":238,"label":237},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":240,"href":241,"label":240},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":243,"href":244,"label":243},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":154}]