Ce guide vous accompagne pour déménager un blogue de Blogger, le service de blogue gratuit de Google, vers WordPress autohébergé sur un serveur cPanel/WHM. La plupart des propriétaires de blogues Blogger arrivent ici avec des années de billets, de commentaires et de trafic de recherche qu’ils ne veulent pas perdre. Bonne nouvelle : Blogger fournit un vrai fichier d’exportation, et WordPress a un importateur officiel qui sait le lire. Garder votre trafic dépend de ce que vous faites après l’importation. Vous reproduisez la forme des URL de Blogger, vous rapatriez les images des serveurs de Google et vous ajoutez des redirections 301 pour tout le reste. À la fin, vos anciennes adresses de billets s’ouvriront sur WordPress, et toutes les autres anciennes adresses redirigeront vers leur nouvel emplacement.
Ce que vous allez accomplir
- Exporter chaque billet, page et commentaire de Blogger dans un seul fichier de sauvegarde, puis compter ce qu’il contient.
- Importer ce fichier dans WordPress sur un nom d’hôte temporaire pendant que Blogger continue de servir vos lecteurs.
- Régler les permaliens de WordPress pour que les URL des billets restent identiques à celles de Blogger.
- Copier les images des serveurs d’images de Google dans votre propre médiathèque.
- Rediriger les pages, les pages d’étiquettes, les fils et les liens mobiles
?m=1de Blogger, puis déplacer le DNS sans toucher au courriel.
Prérequis
- Un accès administrateur au tableau de bord de Blogger.
- Un accès au DNS de votre domaine personnalisé, habituellement chez le registraire où vous l’avez acheté. Si le blogue vit seulement à une adresse
blogspot.com, lisez d’abord la section « Quand ce n’est pas la bonne approche », car les redirections y fonctionnent autrement. - Un compte cPanel sur un serveur que vous contrôlez, ou un accès root à WHM pour en créer un.
- Un accès SSH avec WP-CLI, l’outil en ligne de commande de WordPress. Vérifiez avec
wp --info. Chaque étape WP-CLI a un équivalent plus lent dans l’admin WordPress. curletdigsur votre propre poste, pour tester les URL et le DNS.- Apache ou LiteSpeed sur le serveur cPanel. Les deux lisent les règles de réécriture de
.htaccessavec la même syntaxe.
Comment ça fonctionne
La sauvegarde de Blogger est un fichier Atom, un format de fil XML standard, qui contient vos billets, pages, commentaires et réglages. L’extension Blogger Importer de WordPress lit ce fichier sous Outils > Importer. Elle ne lit pas les fichiers WXR, et la commande wp import de WP-CLI ne lit que le WXR. Cette importation-là se fait donc dans le navigateur.
Trois choses ne suivent pas d’elles-mêmes. Les images restent chez Google (blogger.googleusercontent.com ou de 1.bp.blogspot.com à 4.bp.blogspot.com). Votre thème et vos gadgets restent derrière. Et les formes d’URL de Blogger exigent soit un réglage de permaliens équivalent, soit une redirection.
Les billets sont la partie facile. Blogger les publie à /2021/04/porch-repair.html, et WordPress peut produire exactement cette forme avec la structure de permaliens /%year%/%monthnum%/%postname%.html. Quand l’adresse est identique, aucune redirection n’est nécessaire, et les moteurs de recherche ne voient aucun changement.
Tout le reste demande une règle. Le paramètre ?m=1 mérite une attention particulière. Blogger l’ajoute aux liens mobiles, et WordPress lit m comme son propre paramètre d’archives par date. Laissés tels quels, ces liens peuvent aboutir sur une archive vide ou une page 404. Vous le retirez donc avec une redirection.
L’endroit où vit votre blogue aujourd’hui détermine ce que vous contrôlez.
Étapes
-
Listez chaque URL en ligne à partir du sitemap de Blogger. Blogger publie les billets dans
sitemap.xml, parfois découpé en plusieurs pages, et les pages statiques danssitemap-pages.xml.{ curl -s https://www.example.com/sitemap.xml; curl -s https://www.example.com/sitemap-pages.xml; } \ | grep -o '<loc>[^<]*</loc>' | sed 's|</*loc>||g' > ~/sm1.txt grep 'sitemap.xml?page=' ~/sm1.txt | while read -r s; do curl -s "$s"; done \ | grep -o '<loc>[^<]*</loc>' | sed 's|</*loc>||g' > ~/sm2.txt cat ~/sm1.txt ~/sm2.txt | grep -v 'sitemap.xml?page=' | sort -u > ~/blogger-urls.txt wc -l < ~/blogger-urls.txt grep -c '/p/' ~/blogger-urls.txtAttendu : un total comme
193, puis le nombre de pages comme6. Conservez ce fichier. C’est votre liste de contrôle pour tous les tests qui suivent. -
Téléchargez la sauvegarde Blogger. Dans Blogger, ouvrez Paramètres, descendez jusqu’à Gérer le blog, puis choisissez Sauvegarder le contenu et Télécharger. Téléversez le fichier dans votre compte cPanel et comptez ce qu’il contient :
grep -oE 'kind#(post|page|comment)|<blogger:type>[A-Z]+</blogger:type>' ~/blog-backup.xml | sort | uniq -cAttendu, selon le format d’exportation que Blogger vous remet :
412 kind#comment 6 kind#page 187 kind#postLe nombre de billets peut dépasser le total du sitemap, parce que les brouillons sont inclus. Un compte de zéro pour les deux motifs veut dire que le fichier est incomplet : téléchargez-le de nouveau.
-
Montez WordPress sur un nom d’hôte temporaire. Créez le compte dans WHM sous Account Functions > Create a New Account. Pointez
new.example.comvers le serveur avec un enregistrement A, puis installez :cd ~/public_html wp core download wp config create --dbname=exmpl_wp --dbuser=exmpl_wp --dbpass='REPLACE_ME' wp core install --url=https://new.example.com --title='Example Blog' \ --admin_user=admin --admin_email=you@example.com --skip-email wp option update timezone_string 'America/Toronto' wp rewrite structure '/%year%/%monthnum%/%postname%.html' --hardAttendu :
Success: WordPress installed successfully., puisSuccess: Updated 'timezone_string' option., puisSuccess: Rewrite structure set.Utilisez le fuseau horaire affiché dans Blogger sous Paramètres > Mise en forme. Un écart peut faire glisser un billet publié vers minuit dans le mauvais mois, ce qui change son URL. -
Importez les billets et les commentaires. Installez l’importateur, puis vérifiez la limite de téléversement :
wp plugin install blogger-importer --activate wp eval 'echo size_format( wp_max_upload_size() ) . PHP_EOL;' ls -lh ~/blog-backup.xmlAttendu :
Success: Plugin installed successfully., puis une limite comme64 MB. Si la sauvegarde est plus grosse, augmentezupload_max_filesizeetpost_max_sizedans le MultiPHP INI Editor de cPanel. Allez ensuite dans Outils > Importer > Blogger, téléversez le fichier et suivez les invites, y compris l’attribution des auteurs. Comptez ensuite le résultat :wp post list --post_type=post --post_status=any --format=count wp post list --post_type=page --post_status=any --format=count wp comment list --format=countAttendu : des nombres proches de ceux de l’étape 2. Le comportement exact varie d’une version de l’extension à l’autre, alors comparez au lieu de supposer. Les pages qui ne sont pas arrivées sont assez peu nombreuses pour être refaites à la main. Si les billets affichent
0, voyez la section Dépannage. -
Vérifiez que les URL des billets correspondent. Testez chaque billet du sitemap contre le nouveau site :
grep -v '/p/' ~/blogger-urls.txt | sed 's#https://www.example.com#https://new.example.com#' \ | while read -r u; do printf '%s %s\n' "$(curl -s -o /dev/null -w '%{http_code}' "$u")" "$u"; done \ | grep -v '^200'Attendu : aucune sortie. Chaque ligne qui apparaît est un billet dont le slug ou le mois diffère de Blogger. Corrigez le slug avec
wp post update 42 --post_name=porch-repair, où42est l’identifiant du billet obtenu avecwp post list --s='Porch' --fields=ID,post_name. -
Copiez les images dans la médiathèque. Repérez chaque image hébergée chez Google dans l’exportation :
grep -oE 'https://(blogger\.googleusercontent\.com|[0-9]\.bp\.blogspot\.com)/[^"&<> ]+' ~/blog-backup.xml \ | sort -u > ~/blogger-images.txt wc -l < ~/blogger-images.txtAttendu : un compte comme
340. Blogger lie souvent une petite vignette à un grand original, alors attendez-vous à deux URL par image. Pour chaque image, importez-la et remplacez l’adresse dans le contenu des billets :url='https://blogger.googleusercontent.com/img/b/AVvXsEi/s1600/porch.jpg' id=$(wp media import "$url" --post_id=42 --porcelain) new=$(wp eval "echo wp_get_attachment_url($id);") wp search-replace "$url" "$new" wp_posts --include-columns=post_contentAttendu : un identifiant de fichier joint, puis
Success: Made 1 replacement.Pour des centaines d’images, une extension qui rapatrie les images externes fait le même travail en lot. Utilisezwp search-replaceplutôt que du SQL brut, parce qu’il gère les données sérialisées, où PHP enregistre chaque chaîne avec sa longueur. -
Écrivez les règles de redirection. Ouvrez
~/public_html/.htaccesset ajoutez ce bloc au-dessus de# BEGIN WordPress. Les règles placées entre les marqueurs WordPress sont effacées quand on enregistre les permaliens.# --- Anciens chemins Blogger : garder au-dessus du bloc WordPress --- <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} (^|&)m=[01](&|$) RewriteRule ^(.*)$ /$1? [R=301,L] RewriteRule ^p/([^/]+)\.html$ /$1/ [R=301,L] RewriteRule ^feeds/posts/default/?$ /feed/ [R=301,L] RewriteRule ^(\d{4})_(\d{2})_\d{2}_archive\.html$ /$1/$2/ [R=301,L] RewriteRule ^search/label/Home\sRepair$ /category/home-repair/ [R=301,L] RewriteRule ^search/label/([^/]+)$ /category/$1/ [R=301,L] </IfModule> # --- fin des anciens chemins Blogger ---La première règle retire
?m=1; le?final supprime la chaîne de requête. Générez une ligne d’étiquette explicite pour chaque catégorie dont le nom contient des espaces ou des majuscules :wp term list category --fields=name,slug --format=csv | tail -n +2Attendu : des lignes comme
Home Repair,home-repair. Chaque nom qui diffère de son slug obtient sa propre ligne, au-dessus de la règle générale des étiquettes. UtiliserRewriteRulepartout garde l’ordre prévisible, car la directiveRedirectd’Apache s’exécute à une autre phase. -
Basculez le DNS. La veille, abaissez le TTL des enregistrements
wwwet racine à 300 secondes. Vérifiez ensuite ce qui existe :dig +short CNAME www.example.com dig +short A example.com dig +short MX example.comAttendu pour un domaine personnalisé Blogger :
ghs.google.com., puis les quatre adresses de Google216.239.32.21,216.239.34.21,216.239.36.21et216.239.38.21, puis votre hôte de courriel. Chez votre hébergeur DNS, remplacez les quatre enregistrements A par un seul enregistrement A vers l’IP de votre serveur cPanel. Faites pointer le CNAMEwwwversexample.com. Ne touchez pas aux enregistrements MX et TXT. Blogger n’a jamais géré votre courriel, donc le courriel continue de circuler. Terminez ensuite sur le serveur :wp search-replace 'https://new.example.com' 'https://www.example.com' --all-tables wp option get siteurlAttendu : un nombre de remplacements, puis
https://www.example.com. Lancez AutoSSL depuis la page SSL/TLS Status de cPanel dès que le DNS pointe vers la nouvelle IP.
Valider que tout fonctionne
Passez la liste complète contre le domaine en production et affichez tout ce qui est inattendu :
while read -r u; do
printf '%s %s\n' "$(curl -s -o /dev/null -w '%{http_code}' "$u")" "$u"
done < ~/blogger-urls.txt | grep -vE '^(200|301)'
Attendu : aucune sortie. Les billets répondent 200 ; les pages /p/ répondent 301. Vérifiez ensuite les cas particuliers :
curl -sI 'https://www.example.com/2021/04/porch-repair.html?m=1' | grep -i '^location'
curl -sI 'https://www.example.com/search/label/Home%20Repair' | grep -i '^location'
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_content REGEXP 'googleusercontent|bp.blogspot';" --skip-column-names
Attendu : deux lignes location: qui pointent vers l’URL propre du billet et vers /category/home-repair/, puis 0. Nos tests de fumée après migration couvrent le reste de la première journée.
Dépannage
- L’importateur termine, mais n’importe aucun billet. Blogger a changé son format d’exportation au fil des ans, et le soutien de l’importateur a parfois pris du retard. Confirmez que l’extension est à jour avec
wp plugin list --name=blogger-importer. Si l’échec persiste, convertissez le fichier en WXR avec un convertisseur Blogger vers WXR, puis lancezwp import converted.xml --authors=createaprèswp plugin install wordpress-importer --activate. wp media importéchoue sur certaines URL de Google. Certaines adressesgoogleusercontent.comse terminent par un code de taille comme=w640, sans extension de fichier. WordPress refuse les fichiers dont il ne reconnaît pas le type. Essayez la même URL avec/s1600/à la place du code de taille, ou téléchargez-la aveccurl -o porch.jpgpuis lancezwp media import porch.jpg --post_id=42.- Quelques billets répondent 404 sur WordPress. Blogger raccourcit les longs titres pour en faire des slugs, et WordPress peut bâtir un slug différent à partir du titre complet. L’étape 5 les liste ; corrigez chacun avec
wp post update <ID> --post_name=<slug>. Si c’est le mois qui cloche, vérifiez le fuseau horaire du site. - Les redirections d’étiquettes aboutissent sur une 404. Le slug de la catégorie diffère du texte de l’étiquette. Ajoutez une règle explicite pour cette étiquette au-dessus de la règle générale, comme à l’étape 7. Notre guide sur les permaliens brisés après une migration détaille les vérifications de réécriture.
- Les commentateurs n’ont pas d’avatar. L’exportation de Blogger enregistre souvent une adresse courriel générique pour les commentateurs, alors Gravatar n’a rien à associer. Les commentaires eux-mêmes sont intacts.
Quand ce n’est pas la bonne approche
Si votre blogue vit seulement à example.blogspot.com, vous ne pouvez pas y ajouter de redirections côté serveur, car c’est Google qui exploite ce serveur. Si un domaine personnalisé était rattaché au blogue, Blogger redirige l’adresse blogspot.com vers ce domaine tant qu’il reste rattaché. Google ne documente pas si cela continue une fois le DNS déplacé ailleurs. Gardez donc le domaine personnalisé configuré dans Blogger et testez avec curl -sI. Sans domaine personnalisé, l’option qui reste est un script dans le <head> du thème, ajouté sous Thème > Modifier le code HTML :
<script>
window.location.replace('https://www.example.com' + window.location.pathname);
</script>
Google indique qu’il peut suivre les redirections JavaScript, mais une 301 côté serveur envoie un signal plus fort. Attendez-vous à perdre un peu de positionnement, et laissez le blogue Blogger publié. Notre guide pour préserver son positionnement pendant une migration explique quoi surveiller.
Si vous publiez rarement et que vous tenez à un blogue gratuit sans entretien, rester sur Blogger est un choix raisonnable. WordPress sur cPanel veut dire que les mises à jour, les sauvegardes et la sécurité deviennent votre affaire. Pour la syntaxe de réécriture utilisée plus haut, consultez la documentation de mod_rewrite d’Apache.
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.