Ce guide vous montre comment déplacer un site de WordPress.com, le service hébergé exploité par Automattic, vers WordPress auto-hébergé sur un compte cPanel. Il s’adresse aux propriétaires et aux administrateurs de sites qui se sentent à l’étroit sur la plateforme et veulent leurs propres extensions, leur propre serveur et leurs propres sauvegardes. Le point à savoir, c’est que ce que vous pouvez emporter dépend de votre forfait WordPress.com. Les forfaits qui permettent les extensions et le SFTP (transfert de fichiers sécurisé) vous laissent copier le site au complet, alors que tous les autres ne donnent qu’un export du contenu. À la fin, votre site tournera sur cPanel, le domaine et le courriel seront bien dirigés, et vous aurez une liste vérifiée de ce qui n’a pas suivi.
Ce que vous allez accomplir
- Une décision claire sur celui des deux chemins de migration que votre forfait permet.
- Une installation WordPress neuve sur cPanel, montée avec WP-CLI (la ligne de commande officielle de WordPress).
- Vos articles, pages, commentaires, menus et médias importés, avec les anciennes adresses d’images réécrites vers votre domaine.
- La même structure de permaliens qu’avant, pour que les liens existants et les résultats de recherche continuent de fonctionner.
- Le domaine, les enregistrements de courriel et un certificat TLS en place avant et après le changement DNS.
Prérequis
Du côté de WordPress.com, il vous faut un accès administrateur au site. Du côté de la destination, il vous faut un compte cPanel avec SSH (le shell sécurisé) activé et wp disponible en ligne de commande. La plupart des hébergeurs cPanel installent WP-CLI pour vous. Lancez wp --info en SSH ; s’il affiche une version de PHP et une version de WP-CLI, vous êtes prêt.
Avant de commencer, notez quatre choses pendant que l’ancien site est encore en ligne.
- Votre forfait et ce qu’il permet. Dans le tableau de bord WordPress.com, vérifiez si vous pouvez installer des extensions et si des identifiants SFTP (transfert de fichiers sécurisé) apparaissent dans les réglages d’hébergement. Cette réponse choisit votre chemin.
- Une vraie adresse d’article. Copiez l’adresse de n’importe quel article publié, par exemple
https://example.com/2024/03/15/spring-menu/. Vous reproduirez sa forme à l’étape 7. - L’endroit où le domaine est enregistré. Consultez l’écran Domaines. S’il indique que votre domaine est enregistré par WordPress.com, le domaine est une tâche à part, traitée à l’étape 10.
- L’endroit où vit le courriel. Lancez
dig +short MX example.comdepuis n’importe quel terminal. La réponse vous dit vers quel fournisseur de courriel vous devez continuer de pointer.
Prenez aussi des captures d’écran de l’outil de personnalisation du thème, des zones de widgets et des réglages du site. Le fichier d’export ne les transporte pas, et vous les rebâtirez à la main.
Comment ça fonctionne
WordPress.com et WordPress auto-hébergé font tourner le même logiciel de base. La différence, c’est qui contrôle le serveur autour. C’est pourquoi une migration ici revient à choisir entre deux chemins.
Chemin A, la copie complète du site. Si votre forfait permet d’installer des extensions et d’utiliser le SFTP, vous pouvez déplacer le site comme depuis n’importe quel hébergeur. Soit vous installez une extension de migration ou de sauvegarde et téléchargez son archive, soit vous copiez wp-content en SFTP et exportez la base de données. Les thèmes, les réglages des extensions et les widgets suivent, parce que toute la base suit. À partir de là, le guide de migration depuis un hébergeur générique couvre le reste en détail.
Chemin B, l’export du contenu. Tous les forfaits offrent Outils → Exporter dans le tableau de bord. Cette fonction produit un fichier WXR, pour WordPress eXtended RSS. Le WXR est un fichier XML qui liste vos articles, pages, commentaires, catégories, étiquettes, menus et auteurs, plus une référence à chaque fichier média. Sur le nouveau site, l’extension WordPress Importer lit ce fichier et peut télécharger chaque pièce jointe depuis WordPress.com au passage.
La carte ci-dessous montre ce qui arrive par le chemin B et ce que vous devez prendre en charge vous-même.
La dernière colonne mérite une précision. Les abonnés, les statistiques et certaines fonctions de la plateforme appartiennent au compte WordPress.com, pas au site. Jetpack, l’extension d’Automattic qui relie un site auto-hébergé aux services de WordPress.com, peut en ramener une partie si vous le souhaitez. Les pages de soutien de WordPress.com décrivent le transfert des abonnés vers un site qui fait tourner Jetpack ; vérifiez leurs consignes actuelles avant de fermer quoi que ce soit.
Si vous hésitez encore à partir, la comparaison entre WordPress.com et WordPress.org expose les compromis.
Étape par étape
Les étapes ci-dessous suivent le chemin B, parce qu’il fonctionne avec tous les forfaits. Si vous avez pris le chemin A, faites l’étape 1, importez ensuite votre archive comme le décrit le guide générique, puis reprenez à l’étape 6.
-
Créez la base de données sur cPanel. Utilisez l’écran MySQL Databases de cPanel, ou faites la même chose en SSH. cPanel ajoute le nom de votre compte en préfixe, donc
wpdevientcpuser_wp:uapi Mysql create_database name=cpuser_wp uapi Mysql create_user name=cpuser_wp password='a-long-random-password' uapi Mysql set_privileges_on_database user=cpuser_wp database=cpuser_wp privileges=ALL%20PRIVILEGESChaque appel doit se terminer par
status: 1. Unstatus: 0arrive avec une ligneerrors:, et la plus fréquente signifie qu’il manque le préfixe du compte dans le nom. -
Téléchargez et configurez WordPress. Travaillez dans la racine web du domaine, en général
~/public_html:cd ~/public_html wp core download wp config create --dbname=cpuser_wp --dbuser=cpuser_wp --prompt=dbpassAttendez-vous à
Success: WordPress downloaded.puis àSuccess: Generated 'wp-config.php' file.L’option--prompt=dbpassdemande le mot de passe pour qu’il n’aboutisse jamais dans l’historique de votre shell. -
Installez WordPress sur le domaine final. Utilisez le vrai domaine dès maintenant, pas un domaine temporaire, pour n’avoir rien à remplacer plus tard :
wp core install --url=https://example.com --title='Example' --admin_user=siteadmin --admin_email=you@example.com --prompt=admin_passwordAttendez-vous à
Success: WordPress installed successfully.Choisissez un nom d’administrateur différent de votre nom d’utilisateur WordPress.com, pour que l’importateur puisse associer les auteurs proprement. -
Exportez depuis WordPress.com. Dans le tableau de bord WordPress.com, ouvrez Outils → Exporter et exportez tout le contenu. Vous recevez un
.zippar téléchargement ou par courriel. Décompressez-le et téléversez le ou les fichiers.xmldans le répertoire personnel de votre compte cPanel :scp example.wordpress.com-2026-09-21.xml cpuser@cpanel.example.com:~/Les gros sites peuvent produire plusieurs fichiers XML. Gardez-les tous et importez-les l’un après l’autre. Le guide d’export de WordPress.com décrit l’écran actuel et le téléchargement séparé des médias qu’il propose, s’il y a lieu.
-
Importez le contenu avec WP-CLI. Installez l’importateur, puis lancez-le depuis le répertoire du site :
wp plugin install wordpress-importer --activate wp import ~/example.wordpress.com-2026-09-21.xml --authors=createLa première commande se termine par
Success: Installed 1 of 1 plugins.L’import affiche une ligne par élément créé et se termine parSuccess: Finished importing fromsuivi du nom du fichier.--authors=createcrée un utilisateur local pour chaque auteur du fichier. La référence de wp import liste les autres options pour les auteurs. Passer par SSH évite aussi la limite de taille de téléversement qui bloque souvent l’importateur du navigateur sur les gros fichiers.Par défaut, l’importateur télécharge chaque pièce jointe depuis WordPress.com. Des lignes
Failed to import Mediasignifient qu’un fichier n’a pas pu être récupéré. Notez leurs noms, parce que l’étape 6 repère tout ce qui pointe encore vers l’ancien hôte. -
Repérez et réécrivez les anciennes adresses des médias. Les images que l’importateur a récupérées sont en général réécrites vers votre domaine. Les copies redimensionnées, les liens de galerie et les images servies par le service d’images de WordPress.com ne le sont souvent pas. Regardez d’abord, sans rien changer :
wp search-replace 'example.files.wordpress.com' 'example.com/wp-content/uploads' --dry-run --report-changed-only wp search-replace 'i0.wp.com/example.com' 'example.com' --dry-run --report-changed-onlyChaque essai à blanc affiche un tableau de décomptes et une ligne finale
Success: N replacements to be made.Zéro sur les deux signifie que vous avez terminé. Avant d’appliquer, confirmez que le fichier existe localement. Un article qui pointait versexample.files.wordpress.com/2024/03/menu.jpga besoin dewp-content/uploads/2024/03/menu.jpgsur le disque. Vérifiez avecls ~/public_html/wp-content/uploads/2024/03/. Quand les fichiers sont là, relancez les mêmes commandes sans--dry-run. Les images peuvent aussi apparaître sousi1.wp.comoui2.wp.com; refaites l’essai à blanc pour ces adresses. Pour le comportement des données sérialisées pendant une réécriture, voyez le remplacement d’URL après un changement de domaine. -
Reproduisez l’ancienne structure de permaliens. Reprenez l’adresse d’article notée dans les prérequis et choisissez la règle qui correspond :
wp rewrite structure '/%postname%/' wp rewrite flushPrenez
'/%postname%/'si votre ancienne adresse ressemblait à/spring-menu/. Prenez'/%year%/%monthnum%/%day%/%postname%/'si elle ressemblait à/2024/03/15/spring-menu/. Attendez-vous àSuccess: Rewrite structure set.puis àSuccess: Rewrite rules flushed.Si vous choisissez volontairement une nouvelle forme, chaque ancienne adresse a besoin d’une redirection 301, c’est-à-dire une redirection permanente que les moteurs de recherche suivent. -
Rebâtissez ce que l’export a laissé de côté. Installez votre thème, ou son plus proche équivalent auto-hébergé. Refaites ensuite la personnalisation, les widgets, le titre du site, le slogan et les réglages de lecture à partir de vos captures. Installez les extensions qui remplacent les fonctions de WordPress.com dont vous dépendiez, comme un formulaire de contact, un plan du site ou un outil de sauvegarde. Si vous voulez garder les statistiques ou les fonctions d’abonnement de WordPress.com, installez Jetpack maintenant et connectez-le.
-
Prévisualisez le site avant que le DNS bouge. Dirigez seulement votre propre ordinateur vers le nouveau serveur avec une entrée dans le fichier hosts. Sur macOS ou Linux, ajoutez une ligne à
/etc/hosts, avec l’adresse IP de votre serveur cPanel :203.0.113.10 example.com www.example.comOuvrez le site dans une fenêtre de navigation privée et parcourez articles, pages, images et menus. Le navigateur affiche un avertissement de certificat tant qu’AutoSSL n’a pas tourné à l’étape 11, ce qui est normal ici. Retirez la ligne quand vous avez fini.
-
Planifiez le domaine et le courriel. Commencez par abaisser le TTL (la durée pendant laquelle les résolveurs gardent une réponse DNS) des enregistrements A à 300 secondes. Faites-le au moins 24 heures avant le déplacement, si votre fournisseur DNS le permet. Choisissez ensuite une voie pour un domaine enregistré par WordPress.com.
- Garder l’enregistrement là-bas. Changez les enregistrements A vers l’IP de cPanel, ou changez les serveurs de noms pour votre nouvel hôte DNS. Avant de changer les serveurs de noms, copiez chaque enregistrement MX et TXT, parce que votre courriel et son enregistrement SPF (la politique d’expéditeur) doivent être recréés chez le nouvel hôte DNS.
- Transférer l’enregistrement. Déverrouillez le domaine et demandez le code d’autorisation depuis l’écran Domaines, puis lancez le transfert chez votre nouveau registraire. L’ICANN, l’organisme qui fixe les règles des domaines, bloque en général les transferts pendant 60 jours après un enregistrement ou un transfert précédent ; vérifiez donc les dates d’abord.
Si votre courriel est hébergé ailleurs que sur cPanel, réglez le domaine sur Remote Mail Exchanger dans l’écran Email Routing de cPanel. Sinon, cPanel se considère comme le serveur de courriel et garde les messages destinés à votre vrai fournisseur.
-
Basculez et faites émettre le certificat. Changez l’enregistrement A, ou les serveurs de noms, pour pointer vers cPanel. Une fois que le domaine résout vers le nouveau serveur, lancez AutoSSL, le service de certificats gratuits de cPanel, depuis SSL/TLS Status, ou attendez son prochain passage automatique. Vérifiez ensuite la couverture :
uapi SSL installed_hosts | grep -E 'example\.com'example.cometwww.example.comdoivent tous deux apparaître. S’il en manque un, AutoSSL n’a pas pu le valider, ce qui veut en général dire que le DNS n’a pas encore atteint le nouveau serveur.
Vérifier que tout fonctionne
Lancez ces vérifications une fois que le DNS public pointe vers cPanel :
dig +short example.com @1.1.1.1
wp option get home
wp post list --post_type=post --format=count
wp search-replace 'files.wordpress.com' 'example.com' --dry-run --report-changed-only
La première ligne doit afficher l’adresse IP de votre serveur cPanel. home doit afficher https://example.com. Le nombre d’articles doit correspondre au nombre d’articles publiés sur WordPress.com. Le dernier essai à blanc doit indiquer 0 replacements to be made, ce qui signifie qu’aucun contenu ne se charge encore depuis l’ancien hôte.
Vérifiez ensuite quelques anciennes adresses depuis l’extérieur, dont vos cinq articles les plus consultés :
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/2024/03/15/spring-menu/
Chacune doit afficher 200. Un 404 veut dire que la structure de permaliens de l’étape 7 ne correspond pas. Terminez en envoyant un message à votre propre domaine et en remplissant votre formulaire de contact, pour savoir que le courriel circule dans les deux sens.
Dépannage
L’import s’arrête avec une erreur au sujet de l’importateur. L’extension WordPress Importer n’est pas active sur ce site. Lancez wp plugin list --status=active, vérifiez que wordpress-importer apparaît, puis réessayez.
Des images apparaissent brisées après l’import. L’importateur n’a pas pu télécharger certaines pièces jointes, souvent à cause d’un délai dépassé. Relancez la même commande wp import sur le même fichier. L’importateur saute les éléments qui existent déjà et réessaie seulement ce qui manque. Refaites ensuite les essais à blanc de l’étape 6.
Tous les articles appartiennent à l’administrateur. L’import a tourné avec une autre option d’auteur, ou les auteurs ont été associés à la main. Réattribuez-les avec wp post update, ou supprimez le contenu importé et relancez l’import avec --authors=create.
Les anciens liens renvoient un 404. La structure de permaliens ne correspond pas à vos anciennes adresses. Refaites l’étape 7 avec le bon modèle, puis videz de nouveau les règles. Si seuls certains liens échouent, ces articles utilisaient peut-être un identifiant personnalisé ; comparez-le avec wp post list --fields=ID,post_name.
Le courriel n’arrive plus après la bascule. Les enregistrements MX n’ont pas été recréés chez le nouvel hôte DNS, ou cPanel est réglé sur Local Mail Exchanger. Comparez dig +short MX example.com avec les enregistrements copiés à l’étape 10.
Quand cette approche n’est pas la bonne
Si votre site dépend de fonctions de WordPress.com que vous ne voulez pas remplacer, comme les mises à jour gérées, la sécurité intégrée et le soutien de la plateforme, l’auto-hébergement ajoute du travail. Les mises à jour, les sauvegardes, le cache et la sécurité deviennent les vôtres, et ces tâches ne disparaissent pas après la mise en ligne.
Si votre forfait permet les extensions, préférez le chemin A. Une copie complète garde les réglages du thème, les widgets et les données des extensions que l’export XML abandonne, donc vous rebâtissez moins.
Si vous avez une grosse boutique ou un site d’abonnement, testez le déplacement sur une copie de préproduction d’abord. L’export XML est conçu pour le contenu, et les commandes, les comptes clients et les abonnements ont besoin d’une copie complète de la base pour survivre.
Un WordPress qui rapporte vraiment mérite un opérateur — Stack Harbor opère cette pile sous WordPress Entreprise ; réservez une consultation d’infrastructure.