{"id":110,"date":"2026-02-16T10:00:00","date_gmt":"2026-02-16T09:00:00","guid":{"rendered":"https:\/\/www.vultask.fr\/blog\/?p=110"},"modified":"2026-02-16T20:57:12","modified_gmt":"2026-02-16T19:57:12","slug":"joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url","status":"publish","type":"post","link":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/","title":{"rendered":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL)"},"content":{"rendered":"\n<p>Il y a des projets o\u00f9 tu sais exactement comment \u00e7a va se passer.<\/p>\n\n\n\n<p>Et il y a les migrations.<\/p>\n\n\n\n<p>Les migrations, c\u2019est ce moment o\u00f9 tu prends un site \u201cqui marche\u201d (comprendre : <em>personne n\u2019y touche, donc personne ne le casse<\/em>) et o\u00f9 tu annonces calmement :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cBon. On va le refaire ailleurs. Et ensuite on va appuyer sur un bouton, et tout le monde devra faire comme si de rien n\u2019\u00e9tait.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Spoiler : ce n\u2019est jamais <em>exactement<\/em> comme si de rien n\u2019\u00e9tait.<br>Mais \u00e7a peut \u00eatre <em>propre<\/em>, ma\u00eetris\u00e9, r\u00e9versible\u2026 bref : fait comme un pro de l\u2019int\u00e9gration logicielle.<\/p>\n\n\n\n<p>Et c\u2019est pr\u00e9cis\u00e9ment l\u2019histoire du jour : comment j\u2019ai migr\u00e9 un site web associatif de Joomla vers WordPress, avec une contrainte importante :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>c\u00f4t\u00e9 \u201cusers\u201d : <strong>lecture seule<\/strong> (on consulte, on lit, on t\u00e9l\u00e9charge, point)<\/li>\n\n\n\n<li>c\u00f4t\u00e9 admin : on veut quelque chose de plus simple \u00e0 maintenir, plus standard, plus \u201cint\u00e9grable\u201d<\/li>\n\n\n\n<li>et c\u00f4t\u00e9 r\u00e9alit\u00e9 : pas de budget d\u00e9mesur\u00e9, pas de serveur d\u00e9di\u00e9, et <strong>pas le droit de tout casser un samedi soir<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Je vous raconte.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1) Le d\u00e9cor : un site associatif, une vieille stack, et le fameux \u201c\u00e7a marche\u201d<\/h2>\n\n\n\n<p>Le site tournait depuis un moment sous Joomla.<\/p>\n\n\n\n<p>Et il faisait son job :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pages d\u2019infos<\/li>\n\n\n\n<li>actualit\u00e9s<\/li>\n\n\n\n<li>documents<\/li>\n\n\n\n<li>quelques rubriques<\/li>\n\n\n\n<li>une structure connue des habitu\u00e9s<\/li>\n<\/ul>\n\n\n\n<p>Bref : pas un produit SaaS \u00e0 200 microservices. Un site utile, vivant, \u201cpatrimoine\u201d m\u00eame.<\/p>\n\n\n\n<p>Mais voil\u00e0 ce que j\u2019ai appris (\u00e0 mes d\u00e9pens) avec le temps :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Un site web n\u2019est pas \u201cen production\u201d parce qu\u2019il fonctionne aujourd\u2019hui.<br>Il est \u201cen production\u201d parce qu\u2019il <strong>continuera<\/strong> \u00e0 fonctionner demain.<\/p>\n<\/blockquote>\n\n\n\n<p>Et \u201cdemain\u201d, \u00e7a veut dire :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mises \u00e0 jour de s\u00e9curit\u00e9<\/li>\n\n\n\n<li>versions PHP qui montent (et qui cassent les vieilles extensions)<\/li>\n\n\n\n<li>plugins\/modules abandonn\u00e9s<\/li>\n\n\n\n<li>h\u00e9bergeur qui \u00e9volue<\/li>\n\n\n\n<li>admins b\u00e9n\u00e9voles qui changent<\/li>\n\n\n\n<li>documentation qui se perd<\/li>\n<\/ul>\n\n\n\n<p>Donc on avait deux options :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>bricoler encore un peu Joomla et \u201cesp\u00e9rer\u201d<\/li>\n\n\n\n<li>migrer vers un environnement plus facile \u00e0 maintenir, plus courant, plus outill\u00e9<\/li>\n<\/ol>\n\n\n\n<p>On a choisi la voie 2.<\/p>\n\n\n\n<p>Et comme je suis (un peu) obsessionnel sur la rigueur : je n\u2019ai pas fait une \u201crefonte\u201d.<br>J\u2019ai fait une <strong>migration<\/strong>.<\/p>\n\n\n\n<p>Nuance capitale.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2) Ma m\u00e9thode d\u2019int\u00e9grateur : isoler, reproduire, transformer, valider, basculer, \u00e9teindre<\/h2>\n\n\n\n<p>Avant de parler technique, parlons posture.<\/p>\n\n\n\n<p>Quand tu fais de l\u2019int\u00e9gration logicielle, tu apprends \u00e0 aimer :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>les environnements s\u00e9par\u00e9s<\/li>\n\n\n\n<li>les \u00e9tapes r\u00e9versibles<\/li>\n\n\n\n<li>les bascules propres<\/li>\n\n\n\n<li>la tra\u00e7abilit\u00e9<\/li>\n\n\n\n<li>les tests \u201cb\u00eates et m\u00e9chants\u201d<\/li>\n\n\n\n<li>les plans de retour arri\u00e8re<\/li>\n<\/ul>\n\n\n\n<p>Donc j\u2019ai pos\u00e9 le plan sur la table, en langage simple :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Cr\u00e9er un nouvel environnement<\/strong>, \u00e0 c\u00f4t\u00e9 de l\u2019ancien (pas \u00e0 la place).<\/li>\n\n\n\n<li><strong>Installer un WordPress vide<\/strong>, propre, dans un r\u00e9pertoire d\u00e9di\u00e9 et une base d\u00e9di\u00e9e.<\/li>\n\n\n\n<li><strong>Migrer la donn\u00e9e<\/strong> (et seulement la donn\u00e9e utile), via export\/import + script SQL.<\/li>\n\n\n\n<li><strong>Tester<\/strong> comme si j\u2019\u00e9tais mon pire utilisateur.<\/li>\n\n\n\n<li><strong>Basculer les redirections<\/strong> pour que l\u2019URL publique pointe sur la nouvelle version.<\/li>\n\n\n\n<li><strong>\u00c9teindre l\u2019ancienne instance<\/strong> proprement, en gardant un plan d\u2019archivage.<\/li>\n<\/ol>\n\n\n\n<p>\u00c7a ressemble \u00e0 un pipeline de d\u00e9ploiement ?<br>Normal. C\u2019est le m\u00eame \u00e9tat d\u2019esprit.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3) \u00c9tape 1 \u2014 Cr\u00e9er un r\u00e9pertoire pour le nouvel environnement (et respirer)<\/h2>\n\n\n\n<p>Premier r\u00e9flexe de survie : <strong>ne pas toucher \u00e0 l\u2019existant<\/strong>.<\/p>\n\n\n\n<p>Je sais que c\u2019est tentant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cOn va mettre WordPress \u00e0 la racine et on remplacera Joomla.\u201d<\/li>\n\n\n\n<li>\u201cOn fera \u00e7a vite.\u201d<\/li>\n\n\n\n<li>\u201cC\u2019est juste un site associatif.\u201d<\/li>\n<\/ul>\n\n\n\n<p>Oui. Et c\u2019est exactement comme \u00e7a qu\u2019on se retrouve \u00e0 23h48 avec :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un site en erreur 500,<\/li>\n\n\n\n<li>des b\u00e9n\u00e9voles qui refreshent fr\u00e9n\u00e9tiquement,<\/li>\n\n\n\n<li>et un cerveau qui passe en mode \u201cpourquoi j\u2019ai accept\u00e9\u201d.<\/li>\n<\/ul>\n\n\n\n<p>Donc j\u2019ai cr\u00e9\u00e9 un <strong>r\u00e9pertoire d\u00e9di\u00e9<\/strong> (une sorte de <em>staging<\/em> sur le m\u00eame h\u00e9bergement) :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>l\u2019ancien site restait en place<\/li>\n\n\n\n<li>le nouveau vivait \u00e0 c\u00f4t\u00e9<\/li>\n\n\n\n<li>je pouvais travailler, importer, casser, recommencer<\/li>\n\n\n\n<li>sans impacter les visiteurs<\/li>\n<\/ul>\n\n\n\n<p>C\u2019est la base : <strong>isoler pour s\u00e9curiser<\/strong>.<\/p>\n\n\n\n<p>Et accessoirement, \u00e7a donne un luxe rare : le droit d\u2019\u00eatre imparfait pendant la construction.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4) \u00c9tape 2 \u2014 Installer un WordPress vide + une base vide (le plaisir du \u201cpropre\u201d)<\/h2>\n\n\n\n<p>Une fois le r\u00e9pertoire pr\u00eat : installation de WordPress.<\/p>\n\n\n\n<p>Mais attention, pas \u201cinstaller WordPress\u201d fa\u00e7on clic-clic et on verra apr\u00e8s.<br>Plut\u00f4t \u201cinstaller WordPress comme une future prod\u201d.<\/p>\n\n\n\n<p>Donc :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WordPress vide<\/strong> (aucun contenu bidon \u00e0 garder)<\/li>\n\n\n\n<li><strong>base de donn\u00e9es vide d\u00e9di\u00e9e<\/strong><\/li>\n\n\n\n<li>configuration claire<\/li>\n\n\n\n<li>et surtout : pas de m\u00e9lange avec l\u2019existant<\/li>\n<\/ul>\n\n\n\n<p>Et l\u00e0, coup de chance (ou plut\u00f4t : bon choix d\u2019offre) : notre h\u00e9bergeur proposait <strong>plusieurs bases<\/strong> dans le pack.<\/p>\n\n\n\n<p>Ce d\u00e9tail change tout.<\/p>\n\n\n\n<p>Parce que s\u00e9parer les bases, c\u2019est :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00e9viter les collisions<\/li>\n\n\n\n<li>faciliter les exports<\/li>\n\n\n\n<li>rendre le rollback possible<\/li>\n\n\n\n<li>garder l\u2019ancien monde intact<\/li>\n<\/ul>\n\n\n\n<p>Dans ma t\u00eate, c\u2019\u00e9tait simple :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Joomla a sa base, WordPress a la sienne.<br>On ne m\u00e9lange pas. On migre.<\/p>\n<\/blockquote>\n\n\n\n<p>Et cette s\u00e9paration, c\u2019est le genre de truc qui ne se \u201cvoit\u201d pas\u2026<br>\u2026 mais qui te sauve quand \u00e7a chauffe.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5) \u00c9tape 3 \u2014 La migration de la base : export\/import + script SQL (l\u00e0 o\u00f9 tout se joue)<\/h2>\n\n\n\n<p>C\u2019est ici que la migration devient int\u00e9ressante.<\/p>\n\n\n\n<p>Parce qu\u2019entre Joomla et WordPress, tu n\u2019as pas juste \u201cdes articles\u201d :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu as des structures diff\u00e9rentes<\/li>\n\n\n\n<li>des champs diff\u00e9rents<\/li>\n\n\n\n<li>des formats diff\u00e9rents<\/li>\n\n\n\n<li>des relations diff\u00e9rentes<\/li>\n<\/ul>\n\n\n\n<p>Donc la strat\u00e9gie que j\u2019ai appliqu\u00e9e est tr\u00e8s \u201cint\u00e9gration\u201d :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">a) Export : r\u00e9cup\u00e9rer la source de v\u00e9rit\u00e9<\/h3>\n\n\n\n<p>D\u2019abord, j\u2019ai export\u00e9 la base Joomla.<\/p>\n\n\n\n<p>Pas pour \u201cla mettre telle quelle\u201d dans WordPress.<br>Juste pour <strong>extraire la donn\u00e9e<\/strong>.<\/p>\n\n\n\n<p>C\u2019est un point que je mart\u00e8le souvent :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Une base export\u00e9e, ce n\u2019est pas une base migr\u00e9e.<br>C\u2019est une mati\u00e8re premi\u00e8re.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">b) Transformation : le script SQL comme traducteur<\/h3>\n\n\n\n<p>Ensuite, j\u2019ai \u00e9crit un script SQL de transformation.<\/p>\n\n\n\n<p>Un vrai traducteur.<\/p>\n\n\n\n<p>L\u2019objectif :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>prendre les tables Joomla (contenus, cat\u00e9gories, parfois m\u00e9dias, etc.)<\/li>\n\n\n\n<li>produire des inserts compatibles WordPress (posts, metadata, taxonomies\u2026)<\/li>\n\n\n\n<li>nettoyer au passage ce qui devait l\u2019\u00eatre (HTML, encodages, liens internes, statuts)<\/li>\n<\/ul>\n\n\n\n<p>Ce moment-l\u00e0, c\u2019est un m\u00e9lange de :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pr\u00e9cision<\/li>\n\n\n\n<li>pragmatisme<\/li>\n\n\n\n<li>et petites sueurs froides quand tu r\u00e9alises qu\u2019un d\u00e9tail peut dupliquer 600 lignes<\/li>\n<\/ul>\n\n\n\n<p>Mais c\u2019est aussi le moment le plus satisfaisant, parce que tu reprends le contr\u00f4le :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tu sais ce que tu importes<\/li>\n\n\n\n<li>tu sais comment c\u2019est mapp\u00e9<\/li>\n\n\n\n<li>tu sais ce qui est exclu (et pourquoi)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">c) Import : injecter dans une base WordPress <em>propre<\/em><\/h3>\n\n\n\n<p>Une fois le script pr\u00eat :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>import dans la base WordPress vide<\/li>\n\n\n\n<li>v\u00e9rification du volume (nombre de pages, d\u2019articles, de cat\u00e9gories)<\/li>\n\n\n\n<li>contr\u00f4le de coh\u00e9rence (dates, titres, permaliens, statuts)<\/li>\n<\/ul>\n\n\n\n<p>Et l\u00e0, je me suis fait le premier petit plaisir :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>ouvrir le WordPress, voir appara\u00eetre les contenus\u2026 sans avoir touch\u00e9 au Joomla.<\/p>\n<\/blockquote>\n\n\n\n<p>C\u2019est b\u00eate, mais \u00e7a fait du bien.<\/p>\n\n\n\n<p>Parce que \u00e7a valide un principe : <strong>l\u2019ancien monde peut rester vivant jusqu\u2019au dernier moment<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6) \u00c9tape 4 \u2014 Les tests (ou : comment devenir ton utilisateur le plus p\u00e9nible)<\/h2>\n\n\n\n<p>\u00c0 ce stade, tu as un WordPress qui ressemble \u00e0 quelque chose.<\/p>\n\n\n\n<p>C\u2019est pr\u00e9cis\u00e9ment le moment o\u00f9 ton cerveau veut te dire :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201c\u00c7a a l\u2019air bon. On bascule ?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Non.<\/p>\n\n\n\n<p>C\u2019est le moment o\u00f9 tu testes. Vraiment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mes tests \u201cterrain\u201d, version association<\/h3>\n\n\n\n<p>Je me suis mis dans la peau du visiteur :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Est-ce que j\u2019arrive sur la bonne page d\u2019accueil ?<\/li>\n\n\n\n<li>Est-ce que je retrouve les rubriques \u201cnaturelles\u201d ?<\/li>\n\n\n\n<li>Est-ce que les articles sont lisibles (mise en page, retours \u00e0 la ligne, listes) ?<\/li>\n\n\n\n<li>Est-ce que les images apparaissent ?<\/li>\n\n\n\n<li>Est-ce que les documents se t\u00e9l\u00e9chargent ?<\/li>\n\n\n\n<li>Est-ce que la recherche (si elle existe) ne renvoie pas n\u2019importe quoi ?<\/li>\n\n\n\n<li>Est-ce que les liens internes pointent au bon endroit ?<\/li>\n<\/ul>\n\n\n\n<p>Puis je me suis mis dans la peau de l\u2019admin b\u00e9n\u00e9vole :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Est-ce que c\u2019est simple ?<\/li>\n\n\n\n<li>Est-ce que je comprends o\u00f9 modifier ?<\/li>\n\n\n\n<li>Est-ce que je peux publier sans peur de casser le menu ?<\/li>\n\n\n\n<li>Est-ce que je peux g\u00e9rer sans \u00eatre \u201cdev\u201d ?<\/li>\n<\/ul>\n\n\n\n<p>Et enfin, test essentiel vu la contrainte :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Lecture seule c\u00f4t\u00e9 users : verrouiller ce qui doit l\u2019\u00eatre<\/h3>\n\n\n\n<p>Lecture seule, \u00e7a veut dire :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pas de compte \u201cpublic\u201d inutile<\/li>\n\n\n\n<li>pas d\u2019inscription ouverte<\/li>\n\n\n\n<li>pas d\u2019espace d\u2019\u00e9dition accessible<\/li>\n\n\n\n<li>commentaires d\u00e9sactiv\u00e9s si ce n\u2019est pas un besoin<\/li>\n\n\n\n<li>surface d\u2019attaque r\u00e9duite<\/li>\n<\/ul>\n\n\n\n<p>En gros : <strong>un site de consultation<\/strong>, pas un r\u00e9seau social.<\/p>\n\n\n\n<p>C\u2019est fou comme cette contrainte simplifie aussi l\u2019exploitation :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>moins d\u2019interactions<\/li>\n\n\n\n<li>moins de support<\/li>\n\n\n\n<li>moins de risques<\/li>\n<\/ul>\n\n\n\n<p>Et plus de s\u00e9r\u00e9nit\u00e9.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7) \u00c9tape 5 \u2014 Les redirections : le moment o\u00f9 l\u2019URL devient sacr\u00e9e<\/h2>\n\n\n\n<p>S\u2019il y a un endroit o\u00f9 je deviens psychorigide, c\u2019est ici.<\/p>\n\n\n\n<p>Parce que les URL, ce n\u2019est pas \u201cdu technique\u201d.<\/p>\n\n\n\n<p>C\u2019est :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>des habitudes<\/li>\n\n\n\n<li>des liens partag\u00e9s<\/li>\n\n\n\n<li>des bookmarks<\/li>\n\n\n\n<li>du r\u00e9f\u00e9rencement<\/li>\n\n\n\n<li>des QR codes imprim\u00e9s sur des flyers (oui, \u00e7a arrive)<\/li>\n\n\n\n<li>et parfois des emails vieux de 6 ans qui renvoient encore vers <em>la bonne page<\/em><\/li>\n<\/ul>\n\n\n\n<p>Donc l\u2019objectif \u00e9tait clair :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Quand on bascule sur WordPress, <strong>les gens ne doivent pas avoir \u00e0 r\u00e9apprendre le site<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p>Ce qui implique deux sujets :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">a) Pointer vers la nouvelle version<\/h3>\n\n\n\n<p>On a modifi\u00e9 les r\u00e8gles de redirection (souvent via configuration serveur \/ <code>.htaccess<\/code> selon l\u2019h\u00e9bergement) pour que :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>l\u2019URL publique envoie vers le WordPress<\/li>\n\n\n\n<li>sans exposer le r\u00e9pertoire de staging<\/li>\n\n\n\n<li>et en gardant une structure propre<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">b) Mapper les anciennes routes Joomla vers les nouvelles routes WordPress<\/h3>\n\n\n\n<p>C\u2019est le vrai travail.<\/p>\n\n\n\n<p>Parce que Joomla et WordPress n\u2019ont pas forc\u00e9ment :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>les m\u00eames slugs<\/li>\n\n\n\n<li>la m\u00eame hi\u00e9rarchie<\/li>\n\n\n\n<li>les m\u00eames param\u00e8tres d\u2019URL<\/li>\n\n\n\n<li>les m\u00eames patterns<\/li>\n<\/ul>\n\n\n\n<p>Donc j\u2019ai trait\u00e9 \u00e7a comme un chantier \u00e0 part :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>identifier les URL \u201cles plus importantes\u201d<\/li>\n\n\n\n<li>d\u00e9finir des r\u00e8gles g\u00e9n\u00e9riques quand c\u2019est possible<\/li>\n\n\n\n<li>ajouter des exceptions quand c\u2019est n\u00e9cessaire<\/li>\n\n\n\n<li>tester les liens entrants<\/li>\n<\/ul>\n\n\n\n<p>C\u2019est un peu ingrat, mais c\u2019est ce qui fait la diff\u00e9rence entre :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>une migration \u201ctechniquement r\u00e9ussie\u201d<\/li>\n\n\n\n<li>et une migration \u201cr\u00e9ellement transparente\u201d<\/li>\n<\/ul>\n\n\n\n<p>Et si vous doutez de l\u2019importance : regardez vos stats 404 apr\u00e8s une bascule mal pr\u00e9par\u00e9e.<br>C\u2019est un cimeti\u00e8re.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8) \u00c9tape 6 \u2014 La bascule (le grand switch, version sans drama)<\/h2>\n\n\n\n<p>La bascule, c\u2019est le moment o\u00f9 tu changes l\u2019aiguillage, et o\u00f9 le train passe dessus en direct.<\/p>\n\n\n\n<p>Donc je l\u2019ai faite avec trois r\u00e8gles simples :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 R\u00e8gle 1 : avoir un plan de retour arri\u00e8re<\/h3>\n\n\n\n<p>M\u00eame si tu ne l\u2019utilises pas, tu dois savoir :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>comment remettre l\u2019ancien en ligne<\/li>\n\n\n\n<li>en combien de temps<\/li>\n\n\n\n<li>et avec quelles manipulations minimales<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 R\u00e8gle 2 : basculer quand c\u2019est calme<\/h3>\n\n\n\n<p>Un site associatif a souvent :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>des pics (assembl\u00e9e, inscriptions, \u00e9v\u00e9nements)<\/li>\n\n\n\n<li>et des creux (soir\u00e9es, certains jours)<\/li>\n<\/ul>\n\n\n\n<p>Bascule = p\u00e9riode calme.<br>C\u2019est juste du bon sens.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 R\u00e8gle 3 : v\u00e9rifier imm\u00e9diatement les parcours essentiels<\/h3>\n\n\n\n<p>Apr\u00e8s bascule, j\u2019ai refait les tests \u201cvisiteur\u201d :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>home<\/li>\n\n\n\n<li>menu principal<\/li>\n\n\n\n<li>pages cl\u00e9s<\/li>\n\n\n\n<li>t\u00e9l\u00e9chargement<\/li>\n\n\n\n<li>et surtout : quelques anciennes URL (celles qu\u2019on sait partag\u00e9es)<\/li>\n<\/ul>\n\n\n\n<p>C\u2019est l\u00e0 que tu vois si ta migration est \u201cpropre\u201d.<\/p>\n\n\n\n<p>Et si tout va bien, tu ressens ce petit plaisir rare :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cOk. Les gens ne verront rien. Et c\u2019est exactement le but.\u201d<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">9) \u00c9tape 7 \u2014 Extinction de l\u2019ancienne instance (ou : savoir finir un projet)<\/h2>\n\n\n\n<p>Beaucoup de migrations \u00e9chouent \u00e0 la toute fin.<\/p>\n\n\n\n<p>Parce qu\u2019on bascule, tout marche, et on se dit :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cBon\u2026 on laissera l\u2019ancien au cas o\u00f9.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Et six mois plus tard :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>l\u2019ancien Joomla est encore accessible<\/li>\n\n\n\n<li>pas mis \u00e0 jour<\/li>\n\n\n\n<li>oubli\u00e9<\/li>\n\n\n\n<li>et devient un risque<\/li>\n<\/ul>\n\n\n\n<p>Donc j\u2019ai fait l\u2019inverse : j\u2019ai <strong>\u00e9teint proprement<\/strong>.<\/p>\n\n\n\n<p>Ce que \u00e7a veut dire, dans un monde raisonnable :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sauvegarde archive (fichiers + base)<\/li>\n\n\n\n<li>acc\u00e8s coup\u00e9 c\u00f4t\u00e9 public<\/li>\n\n\n\n<li>suppression \/ d\u00e9sactivation des points d\u2019entr\u00e9e inutiles<\/li>\n\n\n\n<li>nettoyage des cron\/jobs \u00e9ventuels<\/li>\n\n\n\n<li>et documentation minimale : \u201co\u00f9 est l\u2019archive, comment restaurer si besoin\u201d<\/li>\n<\/ul>\n\n\n\n<p>L\u2019objectif n\u2019est pas d\u2019effacer le pass\u00e9.<\/p>\n\n\n\n<p>C\u2019est de ne pas garder une vieille prod en zombie.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Ce que cette migration m\u2019a rappel\u00e9 (et que je garde comme r\u00e8gle)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Une migration, ce n\u2019est pas un copier-coller<\/h3>\n\n\n\n<p>C\u2019est une <strong>traduction<\/strong> : donn\u00e9es, structure, usages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) L\u2019environnement parall\u00e8le est ton meilleur ami<\/h3>\n\n\n\n<p>Le r\u00e9pertoire s\u00e9par\u00e9 + base s\u00e9par\u00e9e, c\u2019est la diff\u00e9rence entre ma\u00eetrise et panique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) Les redirections, c\u2019est la politesse du web<\/h3>\n\n\n\n<p>On ne dit pas \u201ctant pis\u201d.<br>On accompagne.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4) \u00c9teindre fait partie du travail<\/h3>\n\n\n\n<p>Sinon tu laisses un risque en cadeau.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion : la meilleure migration est celle que personne ne remarque<\/h2>\n\n\n\n<p>Au final, la r\u00e9ussite se mesure avec un indicateur tr\u00e8s simple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pas de coup de fil<\/li>\n\n\n\n<li>pas de \u201cle site marche plus\u201d<\/li>\n\n\n\n<li>pas de \u201cje ne retrouve plus\u201d<\/li>\n\n\n\n<li>pas de 404 partout<\/li>\n\n\n\n<li>et c\u00f4t\u00e9 admin : un outil plus clair, plus maintenable, plus \u201cstandard\u201d<\/li>\n<\/ul>\n\n\n\n<p>Et \u00e7a, c\u2019est exactement ce que j\u2019aime dans l\u2019approche \u201cint\u00e9gration logicielle\u201d :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>On ne cherche pas l\u2019effet.<br>On cherche la continuit\u00e9.<\/p>\n<\/blockquote>\n\n\n\n<p>Un site associatif n\u2019a pas besoin d\u2019un show.<br>Il a besoin d\u2019\u00eatre fiable, lisible, durable.<\/p>\n\n\n\n<p>Et si au passage on simplifie la vie des b\u00e9n\u00e9voles\u2026 alors c\u2019est m\u00eame plus qu\u2019une migration : c\u2019est un service rendu.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">(Bonus) La phrase toute pr\u00eate \u00e0 ressortir quand on te dit \u201con pourrait migrer direct en prod, non ?\u201d<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cOn migre d\u2019abord \u00e0 c\u00f4t\u00e9. Ensuite on bascule. Comme \u00e7a, le seul stress qu\u2019on garde, c\u2019est celui qu\u2019on a choisi.\u201d<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Il y a des projets o\u00f9 tu sais exactement comment \u00e7a va se passer. Et il y a les migrations. Les migrations, c\u2019est ce moment&#8230;<\/p>\n","protected":false},"author":3,"featured_media":111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[10],"tags":[],"class_list":["post-110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-integration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr<\/title>\n<meta name=\"description\" content=\"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr\" \/>\n<meta property=\"og:description\" content=\"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vultask.fr\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61585886871669\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-16T09:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-16T19:57:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Daniel Fermont\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@tasko_fr\" \/>\n<meta name=\"twitter:site\" content=\"@tasko_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Fermont\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/\"},\"author\":{\"name\":\"Daniel Fermont\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#\\\/schema\\\/person\\\/988116282b52d1b831abaf7e48495ebc\"},\"headline\":\"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL)\",\"datePublished\":\"2026-02-16T09:00:00+00:00\",\"dateModified\":\"2026-02-16T19:57:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/\"},\"wordCount\":2291,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/ChatGPT-Image-16-fevr.-2026-07_53_47.png\",\"articleSection\":[\"Int\u00e9gration\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/\",\"name\":\"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/ChatGPT-Image-16-fevr.-2026-07_53_47.png\",\"datePublished\":\"2026-02-16T09:00:00+00:00\",\"dateModified\":\"2026-02-16T19:57:12+00:00\",\"description\":\"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\\\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/ChatGPT-Image-16-fevr.-2026-07_53_47.png\",\"contentUrl\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/ChatGPT-Image-16-fevr.-2026-07_53_47.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/2026\\\/02\\\/16\\\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Int\u00e9gration\",\"item\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/category\\\/integration\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/\",\"name\":\"Blog Vultask.fr\",\"description\":\"Devenez plus malin que votre to-do list!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#organization\",\"name\":\"Blog Vultask.fr\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/logo-white.png\",\"contentUrl\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/logo-white.png\",\"width\":592,\"height\":581,\"caption\":\"Blog Vultask.fr\"},\"image\":{\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61585886871669\",\"https:\\\/\\\/x.com\\\/tasko_fr\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/#\\\/schema\\\/person\\\/988116282b52d1b831abaf7e48495ebc\",\"name\":\"Daniel Fermont\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.vultask.fr\\\/uploads\\\/avatars\\\/avatar_1_1764335895.png\",\"url\":\"https:\\\/\\\/www.vultask.fr\\\/uploads\\\/avatars\\\/avatar_1_1764335895.png\",\"contentUrl\":\"https:\\\/\\\/www.vultask.fr\\\/uploads\\\/avatars\\\/avatar_1_1764335895.png\",\"caption\":\"Daniel Fermont\"},\"description\":\"Charg\u00e9 des domaines applicatifs niveau 5 je fait des requ\u00eates SQL en bambou tress\u00e9. musique, dessin, photo, vid\u00e9o, IT, \u00e9criture de sc\u00e9nario et de nouvelles. Je touche \u00e0 tout sauf aux endives et aux choux de Bruxelles. Int\u00e9grateur logiciel m\u00e9tier et administrateur technique M\u00e9disap, Urgsap, Isilog Web System, Astre, AS-Tech, AGATT, GEEF\",\"sameAs\":[\"https:\\\/\\\/www.vultask.fr\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/daniel-fermont-3a304773\\\/\"],\"url\":\"https:\\\/\\\/www.vultask.fr\\\/blog\\\/author\\\/fermontdaniel\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr","description":"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/","og_locale":"fr_FR","og_type":"article","og_title":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr","og_description":"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.","og_url":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/","og_site_name":"Blog Vultask.fr","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61585886871669","article_published_time":"2026-02-16T09:00:00+00:00","article_modified_time":"2026-02-16T19:57:12+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47-1024x683.png","type":"image\/png"}],"author":"Daniel Fermont","twitter_card":"summary_large_image","twitter_creator":"@tasko_fr","twitter_site":"@tasko_fr","twitter_misc":{"\u00c9crit par":"Daniel Fermont","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#article","isPartOf":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/"},"author":{"name":"Daniel Fermont","@id":"https:\/\/www.vultask.fr\/blog\/#\/schema\/person\/988116282b52d1b831abaf7e48495ebc"},"headline":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL)","datePublished":"2026-02-16T09:00:00+00:00","dateModified":"2026-02-16T19:57:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/"},"wordCount":2291,"commentCount":0,"publisher":{"@id":"https:\/\/www.vultask.fr\/blog\/#organization"},"image":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#primaryimage"},"thumbnailUrl":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47.png","articleSection":["Int\u00e9gration"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/","url":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/","name":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL) - Blog Vultask.fr","isPartOf":{"@id":"https:\/\/www.vultask.fr\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#primaryimage"},"image":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#primaryimage"},"thumbnailUrl":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47.png","datePublished":"2026-02-16T09:00:00+00:00","dateModified":"2026-02-16T19:57:12+00:00","description":"Migration Joomla vers WordPress : r\u00e9cit pas \u00e0 pas d\u2019une bascule propre (env d\u00e9di\u00e9, export\/import SQL, tests, redirections) puis extinction de l\u2019ancien site.","breadcrumb":{"@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#primaryimage","url":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47.png","contentUrl":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-16-fevr.-2026-07_53_47.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.vultask.fr\/blog\/2026\/02\/16\/joomla-wordpress-chronique-dune-migration-propre-et-sans-perdre-une-seule-url\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.vultask.fr\/blog\/"},{"@type":"ListItem","position":2,"name":"Int\u00e9gration","item":"https:\/\/www.vultask.fr\/blog\/category\/integration\/"},{"@type":"ListItem","position":3,"name":"Joomla \u2192 WordPress : chronique d\u2019une migration propre (et sans perdre une seule URL)"}]},{"@type":"WebSite","@id":"https:\/\/www.vultask.fr\/blog\/#website","url":"https:\/\/www.vultask.fr\/blog\/","name":"Blog Vultask.fr","description":"Devenez plus malin que votre to-do list!","publisher":{"@id":"https:\/\/www.vultask.fr\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.vultask.fr\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.vultask.fr\/blog\/#organization","name":"Blog Vultask.fr","url":"https:\/\/www.vultask.fr\/blog\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.vultask.fr\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/logo-white.png","contentUrl":"https:\/\/www.vultask.fr\/blog\/wp-content\/uploads\/2026\/02\/logo-white.png","width":592,"height":581,"caption":"Blog Vultask.fr"},"image":{"@id":"https:\/\/www.vultask.fr\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61585886871669","https:\/\/x.com\/tasko_fr"]},{"@type":"Person","@id":"https:\/\/www.vultask.fr\/blog\/#\/schema\/person\/988116282b52d1b831abaf7e48495ebc","name":"Daniel Fermont","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.vultask.fr\/uploads\/avatars\/avatar_1_1764335895.png","url":"https:\/\/www.vultask.fr\/uploads\/avatars\/avatar_1_1764335895.png","contentUrl":"https:\/\/www.vultask.fr\/uploads\/avatars\/avatar_1_1764335895.png","caption":"Daniel Fermont"},"description":"Charg\u00e9 des domaines applicatifs niveau 5 je fait des requ\u00eates SQL en bambou tress\u00e9. musique, dessin, photo, vid\u00e9o, IT, \u00e9criture de sc\u00e9nario et de nouvelles. Je touche \u00e0 tout sauf aux endives et aux choux de Bruxelles. Int\u00e9grateur logiciel m\u00e9tier et administrateur technique M\u00e9disap, Urgsap, Isilog Web System, Astre, AS-Tech, AGATT, GEEF","sameAs":["https:\/\/www.vultask.fr","https:\/\/www.linkedin.com\/in\/daniel-fermont-3a304773\/"],"url":"https:\/\/www.vultask.fr\/blog\/author\/fermontdaniel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/posts\/110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/comments?post=110"}],"version-history":[{"count":1,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/posts\/110\/revisions"}],"predecessor-version":[{"id":112,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/posts\/110\/revisions\/112"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/media\/111"}],"wp:attachment":[{"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/media?parent=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/categories?post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vultask.fr\/blog\/wp-json\/wp\/v2\/tags?post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}