# Dupliquer un site WordPress en préproduction

> Tester une mise à jour ou un développement sur une copie fidèle du site, avant de toucher à la production, suppose presque toujours de changer l’URL (site.fr vers preprod.site.fr ou un sous-dossier). Ce changement d’URL est le point technique le plus mal maîtrisé de ce type de copie.

- Source canonique : [https://allaux.fr/wordpress-woocommerce/migration/dupliquer-en-preproduction](https://allaux.fr/wordpress-woocommerce/migration/dupliquer-en-preproduction)
- Langue : FR
- Dernière mise à jour : 2026-08-03

## Réponse directe

> Copiez les fichiers et la base sur le sous-domaine, puis, sur la copie seulement, faites trois choses avant d’ouvrir quoi que ce soit : cochez dans Réglages, Lecture la case demandant aux moteurs de ne pas indexer, coupez les e-mails transactionnels, et remettez les passerelles de paiement en mode test. Réenregistrez ensuite Réglages, Permaliens, faute de quoi toutes les pages autres que l’accueil renvoient une 404.

## Pourquoi changer l’URL casse des réglages si on s’y prend mal

WordPress stocke une partie de ses données (réglages de thème, configuration de widgets, certaines métadonnées, options de plugins) sous forme de données PHP sérialisées dans les colonnes texte de la base MySQL. Une chaîne sérialisée encode la longueur exacte de chaque sous-chaîne qu’elle contient, par exemple s:22:"https://ancien-site.fr". Si on remplace l’URL par un simple rechercher-remplacer SQL, avec une requête du type UPDATE wp_options SET option_value = REPLACE(...), le nombre déclaré avant les guillemets ne correspond plus à la nouvelle longueur de chaîne, et WordPress échoue à désérialiser la donnée.

Une copie de préproduction multiplie les occasions de tomber dans ce piège, car l’URL change souvent une deuxième fois par la suite : une adresse de test provisoire au moment de la copie, puis une adresse définitive de préprod une fois l’environnement stabilisé. Chaque changement doit repasser par le même outil, pas seulement le premier.

Le résultat n’est pas toujours visible immédiatement : réglages de thème réinitialisés, widgets qui disparaissent, options de plugin vidées, parfois sans message d’erreur clair. La bonne méthode passe par un outil qui recalcule ces longueurs à chaque remplacement, typiquement la commande wp search-replace ancienne-url nouvelle-url --all-tables de WP-CLI, ou un plugin de migration qui fait ce travail en interne, comme All-in-One WP Migration ou WP Migrate DB.

## Ce qu’il faut prévoir en plus d’une copie classique

- Empêcher l’indexation par les moteurs de recherche : un doublon de contenu indexé nuit au référencement du site principal
- Couper l’envoi réel d’e-mails (confirmations de commande, notifications) pour ne pas alerter de vrais clients pendant les tests
- Neutraliser les passerelles de paiement en les laissant strictement en mode test, pour ne jamais déclencher un paiement réel
- Un écart qui se creuse avec le temps entre la préprod et la production si aucune synchronisation régulière n’est prévue

## Comment je conduis une duplication en préproduction

1. **Copie complète des fichiers et de la base** — Je duplique l’intégralité des fichiers du site et un export de la base de données vers l’environnement de préproduction.
2. **Remplacement d’URL avec wp search-replace** — L’URL de production est remplacée par celle de la préprod avec WP-CLI, qui recalcule correctement les longueurs des données sérialisées.
3. **Blocage de l’indexation** — J’ajoute une balise noindex ou un fichier robots.txt dédié à la préprod, pour qu’aucun moteur de recherche n’indexe le doublon.
4. **Neutralisation des e-mails sortants** — J’utilise un service de capture d’e-mails ou je désactive le plugin d’envoi, pour qu’aucune notification ne parte vers un vrai client depuis la préprod.
5. **Passage des passerelles de paiement en mode test** — Les identifiants de paiement réels sont remplacés par leurs équivalents de test, pour ne jamais déclencher un mouvement d’argent réel.
6. **Resynchronisation si nécessaire** — Si l’écart entre préprod et production devient trop important avec le temps, je relance une copie complète depuis la production plutôt que de corriger la préprod au cas par cas.

## Ne jamais remplacer une URL par un simple SQL brut

> Un remplacement texte direct dans la base sans passer par un outil qui gère la sérialisation PHP casse silencieusement des réglages, parfois de façon difficile à repérer avant plusieurs jours.

## Vérifier après la copie

> Je contrôle que le fichier robots.txt ou la balise noindex de la préprod est bien active, qu’aucun e-mail de test n’atteint une vraie boîte de réception, et que les widgets et réglages de thème s’affichent normalement après le remplacement d’URL.

## Pour aller plus loin

- **Migration d’hébergeur sans interruption** — Le même mécanisme de sérialisation appliqué à une vraie bascule d’hébergeur. ([/wordpress-woocommerce/migration/hebergeur-sans-interruption](/wordpress-woocommerce/migration/hebergeur-sans-interruption))
- **Comprendre la sérialisation PHP** — La définition complète du mécanisme et de ses pièges. ([/glossaire/serialisation](/glossaire/serialisation))
- **Sauvegarder sa boutique avant intervention** — Ce qu’il faut sauvegarder avant toute copie de site. ([/guides/sauvegarder-boutique-avant-intervention](/guides/sauvegarder-boutique-avant-intervention))
- **Activer le mode debug WordPress** — Utile pour repérer une erreur silencieuse sur l’environnement de préproduction. ([/guides/activer-mode-debug-wordpress](/guides/activer-mode-debug-wordpress))

## FAQ

### Pourquoi ma préproduction apparaît-elle dans Google alors que je ne l’ai jamais partagée ?

Sans balise noindex ou fichier robots.txt dédié, les moteurs de recherche peuvent découvrir et indexer la préprod comme n’importe quel site public, créant un doublon de contenu qui nuit au référencement du site principal.

### Un vrai client peut-il recevoir un e-mail depuis mes tests en préproduction ?

Oui, si l’envoi d’e-mails n’est pas coupé. C’est pour cela que je désactive le plugin d’envoi ou j’utilise un service de capture d’e-mails avant de commencer à tester des commandes sur la préprod.

### Peut-on utiliser un simple copier-coller SQL pour changer l’URL en préproduction ?

Non. WordPress sérialise certaines données en base, avec la longueur exacte de chaque chaîne encodée. Un remplacement texte brut casse ces longueurs et corrompt silencieusement des réglages de thème et de plugins.

### Faut-il refaire une copie complète à chaque test ?

Pas systématiquement, mais si l’écart entre la préprod et la production devient important avec le temps, une resynchronisation complète évite de corriger des différences au cas par cas.

### Un paiement réel peut-il être déclenché pendant un test en préproduction ?

Seulement si la passerelle de paiement reste configurée en mode réel. Je remplace systématiquement les identifiants réels par leurs équivalents de test avant toute manipulation du tunnel de commande.
