Le WordPress d'aujourd'hui, décodé pour les développeurs

Headless & API

Migrer un blog Blogger vers WordPress headless sans perdre ses URLs

En 2008, Blogger imposait encore ses URLs en /année/mois/titre.html. Retour sur une migration vers une API REST WordPress consommée par un front Gatsby, sans casser un seul lien historique.

Par WordPress Développement • 14 septembre 2020 • 4 min de lecture • Aucun commentaire
Migrer un blog Blogger vers WordPress headless sans perdre ses URLs

En 2008, Blogger imposait encore ses URLs sous la forme /2008/03/titre-du-billet.html, une structure figée que son propriétaire avait fini par accepter faute d’alternative simple à l’époque. Douze ans plus tard, ce blog personnel devenu une référence dans sa niche a migré vers un WordPress consommé en headless par un front Gatsby, avec une contrainte non négociable : ne perdre aucun des liens qui pointaient vers ce blog depuis des centaines de sites tiers.

Ce retour d’expérience détaille la mécanique de préservation des URLs, pas l’aspect éditorial de la migration. Le contenu lui-même — plus de deux cents billets — avait déjà été exporté au format Atom via l’export natif de Blogger, puis transformé en articles WordPress par un script d’import ponctuel.

Comprendre la structure d’URL héritée

Blogger génère ses permaliens à partir de la date de publication et d’un identifiant dérivé du titre, sans jamais exposer de rubrique ni de catégorie dans le chemin. Un article de mars 2008 se retrouve donc sous /2008/03/titre-du-billet.html, quelle que soit sa thématique.

WordPress, de son côté, structure ses permaliens différemment par défaut, et l’API REST expose les articles via leur identifiant ou leur slug, sans reproduire nativement cette arborescence par année et mois suivie du suffixe .html.

Construire le tableau de correspondance avant tout import

La première étape, bien avant d’écrire la moindre ligne de code d’import, a consisté à extraire l’intégralité des URLs Blogger existantes à partir du fichier d’export Atom, puis à les associer à un slug WordPress cible encore inexistant à ce stade.

{
  "ancienne_url": "/2008/03/titre-du-billet.html",
  "nouveau_slug": "titre-du-billet",
  "date_origine": "2008-03-14"
}

Ce tableau, stocké dans une table personnalisée plutôt que dans les métadonnées natives, a servi de source unique de vérité pour générer ensuite les règles de redirection, indépendamment de l’ordre dans lequel les articles seraient réellement importés.

L'essentiel à retenir : Blogger structure ses URLs par année et mois de publication ; Un tableau de correspondance précède tout import de contenu ; Les redirections se gèrent côté front, pas dans WordPress

Exposer la correspondance via une route REST dédiée

Plutôt que de gérer les redirections dans WordPress lui-même, ce qui aurait nécessité de maintenir un thème actif juste pour cette fonction, la correspondance a été exposée par une route REST simple, interrogée par le front Gatsby au moment du build.

register_rest_route( 'migration/v1', '/redirections', array(
    'methods'             => 'GET',
    'callback'            => 'migration_get_redirections',
    'permission_callback' => '__return_true',
) );

Le front Gatsby, lors de sa génération statique, consomme cette route une seule fois et génère un fichier de redirections consommé ensuite par l’hébergeur du site statique, sans jamais solliciter WordPress au moment où un visiteur clique réellement sur un ancien lien.

Ce qui aurait cassé sans cette étape

  • Les backlinks accumulés depuis douze ans vers des URLs au format .html
  • Les partages sur les réseaux sociaux archivés dans des captures d’écran ou des messages anciens
  • Les citations dans d’autres blogs de la même niche, impossibles à faire corriger a posteriori

Une migration qui néglige les URLs historiques ne déplace pas un contenu, elle en efface une partie de l’audience acquise.

Le cas particulier des billets sans titre exploitable

Une dizaine de billets anciens, publiés à une époque où l’auteur ne renseignait qu’un titre générique du type Sans titre, ont posé un problème distinct : le slug généré automatiquement par WordPress à partir d’un tel titre entrait en collision avec plusieurs autres billets similaires. Ces cas isolés ont été traités manuellement, en forçant un slug unique directement dans le tableau de correspondance plutôt qu’en laissant l’import automatique en décider.

Vérification finale avant bascule

Avant la mise en production du nouveau front, un script a comparé systématiquement chaque ancienne URL du tableau de correspondance à la redirection effectivement générée, en s’assurant qu’aucune entrée n’avait été omise lors du passage entre l’export Atom et l’import WordPress.

En résumé

Préserver des URLs historiques lors d’une migration headless repose avant tout sur un travail de cartographie fait en amont, indépendant du contenu lui-même : extraire, associer, exposer via une route dédiée, puis vérifier exhaustivement avant bascule. Ce retour d’expérience ne traite volontairement pas du référencement du contenu une fois migré, qui relève d’un travail distinct mené après la stabilisation technique.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi