🏷️

Régler les métas SEO des catégories depuis un CSV

cafe_seotitlebycsv · v2.0.0 · AGPL-3.0-or-later

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.

agpl-3.0prestashop-9seometa-titlemeta-descriptioncategoriesimportcsvlibre

Ce que ce module fait, et ce qu'il refuse

  • ✓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

Le problème

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.

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 efface. Le travail de référencement de six mois tient dans deux colonnes de base de données qui ne gardent aucun historique.

Comment ça marche

Les colonnes se nomment, et l'ordre n'a pas d'importance :

id_category;meta_title;meta_description
12;Turbos reconditionnés garantis 2 ans;Nos turbos révisés sur banc, livrés en 48 h
13;Injecteurs diesel toutes marques;Injecteurs testés, garantie pièce et main-d'œuvre

Vous pouvez n'en remplir qu'une :

id_category;meta_title
14;Pompes haute pression révisées

Le séparateur est détecté : 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'octets invisible.

ColonneRôle
id_categoryobligatoire, un entier strictement positif
meta_titlefacultative, 255 caractères au plus
meta_descriptionfacultative, 512 caractères au plus
id_langfacultative, pour régler la langue ligne par ligne

Il ne vide jamais un champ

C'est la règle du module, et elle n'a pas d'exception.

Une colonne que vous ne mettez pas dans le fichier laisse la métadonnée en place. Une cellule que vous laissez vide, aussi. Et une ligne qui ne demande ni titre ni description est refusée plutôt qu'appliquée comme un effacement.

Pour vider une métadonnée, passez par la fiche de la catégorie : c'est un geste qui se fait une fois, en la regardant, pas en masse depuis un tableur.

L'essai à blanc est actif par défaut

Sur un module qui écrit dans votre référencement, le premier geste ne doit pas être celui qui écrit.

L'essai à blanc lit le fichier et affiche, catégorie par catégorie, le titre actuel barré et le nouveau en dessous. Ce qui ne change pas est marqué comme inchangé. Et rien n'est écrit.

La langue, vous la choisissez

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.

Si votre fichier porte une colonne id_lang, c'est elle qui décide, ligne par ligne : un seul fichier peut donc régler le français et l'anglais d'une même catégorie.

Les autres langues ne sont pas touchées. En multiboutique, les autres boutiques non plus.

Ce qu'il refuse, et pourquoi

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.

LigneCe qui se passe
12 seulerefusée. Elle ne demande ni titre ni description — et elle n'efface pas les deux.
REF-7;Mon titrerefusée. Ce module travaille sur les identifiants de catégorie.
12 produits;Mon titrerefusée. Cela ne vaut pas la catégorie 12.
un titre de 256 caractèresrefusée, avec sa longueur. La colonne en accepte 255, et une phrase coupée en deux dans Google n'est pas un résultat.
un titre portant <, >, { ou }refusée. PrestaShop les refuse aussi, mais plus loin — autant le dire tout de suite.
12;Premier jet puis 12;Titre corrigéla dernière vaut, et le rapport nomme la ligne remplacée.
une catégorie qui n'existe passignalée comme non écrite. Un UPDATE sur zéro ligne réussit sans rien faire : ce n'est pas un succès.

Ce qui a été mesuré

Le module est livré avec ses deux jeux d'épreuves, rejouables sans PHPUnit et sans boutique pour le premier :

  • 80 vérifications sur la décision — ce qu'un fichier demande, avant toute

écriture — et 16 mutations jouées, dont 16 rougissent. Une décision qu'aucune épreuve ne garde est une décision qui se perdra à la prochaine retouche.

  • 43 preuves de comportement sur de vraies catégories, en PrestaShop 9.0.3 et

PHP 8.4.15 : l'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.

Deux de ces mutations ont dit ce que la relecture ne voyait pas. C'est leur intérêt.

Ce qu'il ne fait pas

  • Il ne touche que les catégories. Les produits et les pages ont leurs

propres métadonnées, et un autre module.

  • Il n'écrit aucune table, ne pose aucun greffon, ne garde aucune clé

de configuration. La désinstallation ne laisse rien derrière elle.

  • Il n'a aucun contrôleur, ni public ni d'administration. Son seul point

d'entrée est sa page « Configurer », derrière votre session employé et le jeton du back-office. Il n'y a rien à atteindre de l'extérieur.

Si vous veniez de la version 1.0.0

Montez, puis relisez vos métadonnées sur quelques catégories.

La 1.0.0 effaçait dès qu'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'historique, et rien ne dit ce qu'il y avait avant. Vos recours sont une sauvegarde de base antérieure, ou ce que l'index de Google garde encore de vos anciens titres.

Ce qui est écrit noir sur blanc dans le fichier de montée du module, plutôt que découvert plus tard.

Ce que la licence exige de vous

Ce module est sous AGPL-3.0-or-later. Installé sans modification, vous n'avez rien à publier. Modifié et servi à vos visiteurs, vous devez leur offrir la source de ce module modifié — jamais celle de votre boutique, de votre thème, ni du cœur de PrestaShop. Le fichier NOTICE de l'archive porte les attributions exactes.

Le module est gratuit. Une adresse e-mail suffit.

Sans compte à créer, et la lettre d'information reste facultative.

Avis vérifiés

Ce que disent nos clients

5.0 / 5

33 avis clients

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.

Office

MONOGRAM

Malt

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 :).

Marine

MES-Distribution

Malt

Super

Super

Jl

Kaigan

Malt

Au Top

Au Top. tout simplement

Elite Cbd

Canna Elite Europe Ltd

Malt

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.

Lorie

GRIIN outdoor

Malt

Toujours aussi clair et clairvoyant

Toujours aussi clair et clairvoyant... ;) Un plaisir de travailler avec Alexandre

Elite Cbd

Canna Elite Europe Ltd

Malt