[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$f_2Ysit_rR3CxguvxOM-gwhZgA9emwaW11zLQ_WlSwWA":22,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":60,"megamenu":141,"header-db":197,"footer-db":210,"$fRB-MCECtlqxg6O58r74GXLImPTewi6tzMVMrdxiLAic":226},{"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":33,"psVersions":34,"content":38,"faq":39,"tldr":55,"readingTime":56,"generatedAt":57,"publishDate":57,"relatedArticles":58,"sourceCategory":59},"Afficher un texte dynamique sous le logo selon la page PrestaShop","texte-dynamique-sous-logo-selon-page-prestashop","Affichez un slogan ou headline personnalisé sous votre logo PrestaShop selon la page visitée : accueil, catégorie, produit. Guide Smarty + champ custom.","developpement",[28,29,30,31,32],"smarty","header","personnalisation","seo","template","intermediaire",[35,36,37],"1.6","1.7","8.x","\u003Ch2>Pourquoi afficher un texte contextuel sous le logo ?\u003C\u002Fh2>\n\u003Cp>Afficher un slogan ou une accroche qui varie selon la page visitée est une technique SEO et UX redoutablement efficace. Plutôt qu'un slogan statique générique, vous pouvez présenter un message ciblé qui renforce la pertinence de chaque page aux yeux de Google et de vos visiteurs.\u003C\u002Fp>\n\u003Cp>Cette approche permet de :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Renforcer le H1 sémantique** de chaque page avec un texte unique\u003C\u002Fli>\n\u003Cli>**Améliorer le maillage sémantique** en intégrant des mots-clés contextuels\u003C\u002Fli>\n\u003Cli>**Guider l'utilisateur** avec un message adapté à sa navigation\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Méthode 1 : conditions Smarty dans le header (rapide)\u003C\u002Fh2>\n\u003Cp>La méthode la plus simple consiste à ajouter des conditions Smarty directement dans le template du header.\u003C\u002Fp>\n\u003Ch3>PrestaShop 1.6 — `header.tpl`\u003C\u002Fh3>\n\u003Cp>Dans le fichier \u003Ccode>themes\u002Fvotre-theme\u002Fheader.tpl\u003C\u002Fcode>, juste sous le bloc du logo :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{if $page_name == 'index'}\n  &lt;p class=\"site-headline\"&gt;{l s='Votre slogan pour la page d\\'accueil'}&lt;\u002Fp&gt;\n{elseif $page_name == 'category'}\n  &lt;p class=\"site-headline\"&gt;{l s='Découvrez notre sélection'} {$category-&gt;name|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{elseif $page_name == 'product'}\n  &lt;p class=\"site-headline\"&gt;{l s='Fiche détaillée :'} {$product-&gt;name|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{\u002Fif}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>PrestaShop 1.7 \u002F 8.x — `_partials\u002Fheader.tpl`\u003C\u002Fh3>\n\u003Cp>Sur les versions modernes, le fichier à modifier est \u003Ccode>themes\u002Fvotre-theme\u002Ftemplates\u002F_partials\u002Fheader.tpl\u003C\u002Fcode>. Les variables changent légèrement :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{if $page.page_name == 'index'}\n  &lt;p class=\"site-headline\"&gt;{l s='Votre slogan pour la page d\\'accueil' d='Shop.Theme.Global'}&lt;\u002Fp&gt;\n{elseif $page.page_name == 'category'}\n  &lt;p class=\"site-headline\"&gt;{$category.name|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{elseif $page.page_name == 'product'}\n  &lt;p class=\"site-headline\"&gt;{$product.name|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{\u002Fif}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Attention :\u003C\u002Fstrong> En PrestaShop 8.x, la fonction \u003Ccode>{l}\u003C\u002Fcode> nécessite le paramètre \u003Ccode>d\u003C\u002Fcode> (domaine de traduction). Utilisez \u003Ccode>d='Shop.Theme.Global'\u003C\u002Fcode> ou créez votre propre domaine.\u003C\u002Fp>\n\u003Ch3>Cibler une catégorie spécifique\u003C\u002Fh3>\n\u003Cp>Vous pouvez aller plus loin en affichant un texte différent pour certaines catégories précises :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{if $page.page_name == 'index'}\n  &lt;p class=\"site-headline\"&gt;{l s='Expert e-commerce depuis 2014' d='Shop.Theme.Global'}&lt;\u002Fp&gt;\n{elseif $page.page_name == 'category' && $category.id == 9}\n  &lt;p class=\"site-headline\"&gt;{l s='Notre gamme premium sélectionnée avec soin' d='Shop.Theme.Global'}&lt;\u002Fp&gt;\n{elseif $page.page_name == 'category'}\n  &lt;p class=\"site-headline\"&gt;{$category.name|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{\u002Fif}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Méthode 2 : champ personnalisé en back-office (recommandé)\u003C\u002Fh2>\n\u003Cp>La méthode par conditions Smarty atteint vite ses limites : le texte est codé en dur dans le template, il faut modifier le fichier pour chaque changement, et la maintenance devient pénible avec des dizaines de catégories.\u003C\u002Fp>\n\u003Cp>La bonne approche consiste à \u003Cstrong>ajouter un champ texte personnalisé\u003C\u002Fstrong> aux entités Catégorie et Produit, éditable directement depuis le back-office.\u003C\u002Fp>\n\u003Ch3>Principe\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Ajouter une colonne (par exemple `headline`) dans les tables `ps_category_lang` et `ps_product_lang`\u003C\u002Fli>\n\u003Cli>Surcharger les classes `Category` et `Product` pour déclarer ce nouveau champ\u003C\u002Fli>\n\u003Cli>Modifier les contrôleurs admin pour afficher le champ dans le formulaire\u003C\u002Fli>\n\u003Cli>Utiliser la variable dans le template\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Étape 1 : migration SQL\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-sql\">\nALTER TABLE ps_category_lang \n  ADD COLUMN headline VARCHAR(255) DEFAULT NULL AFTER description;\n\nALTER TABLE ps_product_lang \n  ADD COLUMN headline VARCHAR(255) DEFAULT NULL AFTER description_short;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Étape 2 : override de la classe Category\u003C\u002Fh3>\n\u003Cp>Créez le fichier \u003Ccode>override\u002Fclasses\u002FCategory.php\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\nclass Category extends CategoryCore\n{\n    \u002F** @var string Headline personnalisé *\u002F\n    public $headline;\n\n    public function __construct($id_category = null, $id_lang = null, $id_shop = null)\n    {\n        self::$definition['fields']['headline'] = [\n            'type' =&gt; self::TYPE_STRING,\n            'lang' =&gt; true,\n            'validate' =&gt; 'isGenericName',\n            'size' =&gt; 255,\n        ];\n        parent::__construct($id_category, $id_lang, $id_shop);\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Étape 3 : utilisation dans le template\u003C\u002Fh3>\n\u003Cp>Une fois le champ renseigné en back-office, l'affichage dans le header devient élégant et maintenable :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-smarty\">\n{* PrestaShop 1.6 *}\n{if $page_name == 'category' && isset($category-&gt;headline) && $category-&gt;headline}\n  &lt;p class=\"site-headline\"&gt;{$category-&gt;headline|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{elseif $page_name == 'product' && isset($product-&gt;headline) && $product-&gt;headline}\n  &lt;p class=\"site-headline\"&gt;{$product-&gt;headline|escape:'html':'UTF-8'}&lt;\u002Fp&gt;\n{\u002Fif}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Adaptation PrestaShop 8.x avec Symfony\u003C\u002Fh3>\n\u003Cp>Sur PrestaShop 8.x, les formulaires admin utilisent Symfony. Pour ajouter un champ au formulaire catégorie, vous devez utiliser un \u003Cstrong>hook module\u003C\u002Fstrong> plutôt qu'un override :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\npublic function hookActionCategoryFormBuilderModifier(array $params)\n{\n    $formBuilder = $params['form_builder'];\n    $formBuilder-&gt;add('headline', TranslateType::class, [\n        'label' =&gt; $this-&gt;trans('Headline', [], 'Modules.Votremodule.Admin'),\n        'required' =&gt; false,\n        'locales' =&gt; $this-&gt;get('prestashop.adapter.legacy.context')-&gt;getLanguages(),\n    ]);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cette approche par module est nettement préférable aux overrides sur PrestaShop 8.x, car elle est compatible avec les mises à jour du core.\u003C\u002Fp>\n\u003Ch2>Bonnes pratiques SEO\u003C\u002Fh2>\n\u003Ch3>Ce qu'il faut éviter\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>**Ne pas générer des phrases automatiques creuses** du type `{l s='Large choix de'}{$meta_title}{l s='aux meilleurs prix !'}`. Google (et notamment les mises à jour Panda) pénalise les contenus génériques assemblés mécaniquement. Chaque headline doit être rédigé avec intention.\u003C\u002Fli>\n\u003Cli>**Ne pas créer de lien vers la page elle-même** dans le headline. Un lien qui pointe vers la page courante n'a aucun intérêt SEO et dégrade l'expérience utilisateur.\u003C\u002Fli>\n\u003Cli>**Éviter le keyword stuffing** : le headline doit rester naturel et apporter une vraie valeur informative.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Ce qui fonctionne\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Utiliser le headline comme **complément sémantique du H1**, pas comme doublon\u003C\u002Fli>\n\u003Cli>Rédiger un texte unique par catégorie\u002Fproduit qui renforce la thématique de la page\u003C\u002Fli>\n\u003Cli>Intégrer le headline dans le balisage `itemprop` si pertinent pour le schema.org\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Style CSS recommandé\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-css\">\n.site-headline {\n  text-align: center;\n  font-size: 0.9rem;\n  color: #666;\n  margin: 5px 0 15px;\n  font-style: italic;\n  letter-spacing: 0.02em;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Import CSV avec le champ headline\u003C\u002Fh2>\n\u003Cp>Si vous utilisez l'import CSV pour vos catégories ou produits, ajoutez simplement une colonne \u003Ccode>headline\u003C\u002Fcode> dans votre fichier. PrestaShop mappera automatiquement le champ si l'override est correctement en place :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-csv\">\nid_category;name;headline;description\n9;\"Chaussures running\";\"Les meilleures chaussures de course sélectionnées par nos experts\";\"Description complète...\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Cela vous permet de gérer les headlines en masse, ce qui est particulièrement utile lors de la mise en place initiale sur un catalogue volumineux.\u003C\u002Fp>",[40,43,46,49,52],{"q":41,"a":42},"Comment afficher un texte différent sous le logo pour chaque catégorie PrestaShop ?","Deux méthodes existent : soit des conditions Smarty dans le header.tpl ({if $page_name == 'category' && $category_id == 9}), soit la création d'un champ personnalisé 'headline' dans la table ps_category_lang, éditable depuis le back-office. La seconde méthode est recommandée car elle est maintenable sans toucher au code.",{"q":44,"a":45},"Les conditions Smarty dans le header ralentissent-elles PrestaShop ?","Non, les conditions Smarty sont compilées en PHP natif par le moteur de template et n'ont aucun impact mesurable sur les performances. Même avec plusieurs dizaines de conditions, le surcoût est négligeable. Le problème est plutôt la maintenabilité du code, pas la performance.",{"q":47,"a":48},"Comment adapter cette technique de headline dynamique à PrestaShop 8.x ?","Sur PrestaShop 8.x, remplacez les overrides de classes par un module utilisant les hooks Symfony (actionCategoryFormBuilderModifier). Les variables Smarty changent aussi : utilisez $page.page_name au lieu de $page_name, et ajoutez le paramètre d (domaine) à la fonction {l}.",{"q":50,"a":51},"Peut-on utiliser le meta_title comme headline automatique sous le logo ?","C'est techniquement possible mais déconseillé. Les headlines générés automatiquement comme '{meta_title} aux meilleurs prix' sont considérés comme du contenu de faible qualité par Google. Privilégiez un champ dédié avec un texte rédigé manuellement pour chaque page importante.",{"q":53,"a":54},"Comment rendre le headline traduisible dans un PrestaShop multilingue ?","Si vous utilisez la méthode du champ personnalisé, le champ est automatiquement multilingue car il est ajouté dans la table _lang (ps_category_lang). Avec la méthode Smarty, encadrez le texte avec {l s='votre texte' d='Shop.Theme.Global'} pour qu'il apparaisse dans l'interface de traduction.","Pour afficher un headline dynamique sous le logo selon la page visitée, utilisez des conditions Smarty ({if $page.page_name == 'category'}) pour un besoin simple, ou créez un champ personnalisé en base de données pour une solution maintenable et éditable depuis le back-office.",5,"2026-03-21T14:37:22.000Z",[],"PrestaShop pour les développeurs",{"columns":61},[62,78,108,129],{"title":63,"links":64},"Plateforme",[65,69,72,75],{"label":66,"href":67,"external":68},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":70,"href":71,"external":68},"Devenir Ambassadeur","\u002Fambassadeur",{"label":73,"href":74,"external":68},"Modules PrestaShop","\u002Fmodules",{"label":76,"href":77,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":79,"links":80},"Le Synedre",[81,84,87,90,93,96,99,102,105],{"label":82,"href":83,"external":68},"L'histoire","\u002Fsynedre",{"label":85,"href":86,"external":68},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":88,"href":89,"external":68},"L'équipe","\u002Fequipe",{"label":91,"href":92,"external":68},"Le réacteur en direct","\u002Freacteur",{"label":94,"href":95,"external":68},"Le Drill (entraînement)","\u002Fdrill",{"label":97,"href":98,"external":68},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":100,"href":101,"external":68},"Les agents IA","\u002Fagents-ia",{"label":103,"href":104,"external":68},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":106,"href":107,"external":68},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":109,"links":110},"Ressources",[111,114,117,120,123,126],{"label":112,"href":113,"external":68},"Blog","\u002Fblog",{"label":115,"href":116,"external":68},"Academy","\u002Facademy",{"label":118,"href":119,"external":68},"Dictionnaire","\u002Fdictionnaire",{"label":121,"href":122,"external":68},"Expertise PrestaShop","\u002Fexpertise",{"label":124,"href":125,"external":68},"Flywheel","\u002Fflywheel",{"label":127,"href":128,"external":68},"Manifeste","\u002Fmanifeste",{"title":130,"links":131},"À propos",[132,135,138],{"label":133,"href":134,"external":68},"Alexandre Carette","\u002Fa-propos",{"label":136,"href":137,"external":68},"Dossier de presse","\u002Fpresse",{"label":139,"href":140,"external":68},"Contact","\u002Fcontact",{"items":142},[143,152,158,164,172,180,185,191],{"id":144,"type":145,"label":146,"href":122,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":149,"children":150,"psChildren":151},41,"link",{"fr":147},"Expertise",null,0,[],[],{"id":153,"type":145,"label":154,"href":113,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":155,"children":156,"psChildren":157},42,{"fr":112},1,[],[],{"id":159,"type":145,"label":160,"href":74,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":161,"children":162,"psChildren":163},43,{"fr":73},2,[],[],{"id":165,"type":145,"label":166,"href":168,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":169,"children":170,"psChildren":171},44,{"fr":167},"Outils IA","\u002Foutils-ia",3,[],[],{"id":173,"type":145,"label":174,"href":67,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":176,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":177,"children":178,"psChildren":179},45,{"fr":175},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":181,"type":145,"label":182,"href":116,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":56,"children":183,"psChildren":184},46,{"fr":115},[],[],{"id":186,"type":145,"label":187,"href":134,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":188,"children":189,"psChildren":190},47,{"fr":130},6,[],[],{"id":192,"type":145,"label":193,"href":140,"icon":148,"description":148,"badge":148,"groupTitle":148,"style":148,"gridColumns":148,"cssClass":148,"psCategoryId":148,"showPsChildren":68,"position":194,"children":195,"psChildren":196},48,{"fr":139},7,[],[],{"header":198},{"logo":199,"topBar":204,"contactEmail":207,"features":208,"navBar":148},{"src":200,"alt":201,"text":133,"href":202,"class":203},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":148,"showLanguages":68,"align":205,"languages":206},"left",[],"contact@alexandrecarette.fr",{"showSearch":68,"showWishlist":68,"showLogin":20,"showContact":68,"showCart":68,"stickyHeader":20,"headerLayout":209},"inline",{"footer":211},{"theme":212,"description":148,"hours":148,"logo":213,"contact":214,"social":215,"bottomBar":225},"dark",{"src":200,"href":202,"alt":133},{"email":148,"phone":148,"address":148,"cta":148},[216,219,222],{"platform":217,"href":218,"label":217},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":220,"href":221,"label":220},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":223,"href":224,"label":223},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":148},{"academy":227,"blog":228,"expertise":239},[],[229,233,236],{"title":230,"url":231,"score":155,"type":232},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back","blog",{"title":234,"url":235,"score":155,"type":232},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",{"title":237,"url":238,"score":155,"type":232},"Sylius rachète PrestaShop : ce que ça change pour vous","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fsylius-rachat-prestashop-headless-souverainete",[]]