Een klant belde me gisteren. Zijn webshop was offline na een serververhuizing die zijn hostingpartij “even had geregeld”. Drie uur later draaide de site weer, maar de helft van de formulieren deed het niet meer. Dit soort situaties had ik de afgelopen vijftien jaar tientallen keren. Een WordPress-migratie is geen ingewikkeld proces, maar het gaat bijna altijd mis als je stappen overslaat.
In dit artikel leg ik uit hoe je een WordPress-site correct verhuist, wat je van tevoren regelt en waar de meeste fouten zitten.
Wat er misgaat bij een onvoorbereide migratie
De meeste problemen beginnen niet tijdens de migratie zelf, maar ervoor. Iemand besluit van host te wisselen, kopieert de bestanden en importeert de database, en denkt dat het klaar is. Dat is het niet.
WordPress slaat absolute URL’s op in de database. Dat betekent dat intern links, afbeeldingspaden en widgetinstellingen verwijzen naar het oude domein of de oude serverlocatie. Als je die niet aanpast, werkt de site technisch wel, maar gedraagt hij zich vreemd. Afbeeldingen laden niet, menu’s linken verkeerd, en soms werkt de inlogpagina niet eens.
Een tweede veelgemaakte fout is het overslaan van de wp-config.php. Dit bestand bevat de databasenaam, gebruikersnaam en het wachtwoord. Op de nieuwe server zijn die gegevens anders. Als je dit bestand blindelings kopieert zonder het aan te passen, krijg je direct een foutmelding: “Error establishing a database connection.” Simpel te voorkomen, maar het kost mensen elke keer weer een halfuur zoeken.
Ten derde: rechten. Bestands- en maprechten op de nieuwe server zijn niet automatisch goed ingesteld. WordPress heeft specifieke permissies nodig om goed te functioneren. De map wp-content heeft doorgaans 755 nodig, individuele bestanden 644. Als dat niet klopt, kun je geen plugins installeren, geen media uploaden en soms geen thema activeren.
De voorbereiding: dit doe je voordat je ook maar één bestand aanraakt
Een goede migratie begint met een volledige back-up. Niet de back-up die je hosting automatisch maakt, maar een back-up die jij zelf controleert. Gebruik een plugin zoals Duplicator of All-in-One WP Migration en sla het bestand lokaal op. Verifieer dat het bestand compleet is en niet halverwege is afgebroken.
Daarna controleer je de PHP-versie op de nieuwe server. WordPress 6.x werkt het best met PHP 8.1 of 8.2. Staat de nieuwe omgeving nog op PHP 7.4, dan kun je problemen verwachten met nieuwere plugins. Dit is ook het moment om te kijken welke plugins je eigenlijk nog gebruikt. Een migratie is een goed excuus om rommel op te ruimen.
Noteer ook de exacte WordPress-versie, het actieve thema en de lijst van actieve plugins. Als er na de migratie iets misgaat, weet je precies waar je moet beginnen. Sla dit op in een tekstbestand, niet in je hoofd.
Controleer tot slot of de nieuwe host SSL al heeft ingericht. Als je na de migratie van http naar https wisselt, moet je dat verwerken in de WordPress-instellingen én in de database. Doe je dat niet, dan krijg je mixed content-meldingen of een redirect-loop.
De migratie stap voor stap
Exporteer eerst de volledige database via phpMyAdmin of een databasetool van je hosting. Kies voor een SQL-dump met de optie “voeg DROP TABLE toe” aangevinkt. Zo overschrijf je bij het importeren geen oude data als je het opnieuw moet proberen.
Kopieer daarna alle bestanden via FTP of SFTP. Gebruik een client zoals FileZilla en zet de overdracht op binaire modus. Sommige hostingpanelen bieden een bestandsbeheerder in de browser, maar die zijn traag bij grote sites en breken soms bestanden af. FTP is betrouwbaarder.
Op de nieuwe server maak je een nieuwe database aan en een databasegebruiker met volledige rechten op die database. Importeer de SQL-dump. Pas daarna wp-config.php aan met de nieuwe databasenaam, gebruikersnaam en wachtwoord.
Nu komt de stap die de meeste mensen vergeten: de URL’s in de database bijwerken. Gebruik hiervoor WP-CLI als je toegang hebt tot de commandoregel:
wp search-replace 'https://oudedomein.nl' 'https://nieuwedomein.nl' --all-tables
Heb je geen toegang tot de commandoregel, gebruik dan de plugin Better Search Replace. Voer de zoekopdracht uit op alle tabellen en schakel “Run as dry run” eerst in om te zien wat er verandert. Pas daarna voer je de echte vervanging uit.
Spoel daarna de cache. Als je een cacheplugin gebruikt zoals WP Rocket of W3 Total Cache, leeg die dan volledig. Doe hetzelfde met de servercache als je host dat aanbiedt. Controleer de site in een privévenster van je browser, zodat je eigen browsercache je niet op het verkeerde been zet.
Controleer de formulieren apart. Contactformulieren, offerteformulieren, nieuwsbriefinschrijvingen: die hebben vaak eigen instellingen voor het verzendadres of een koppeling met een externe dienst. Na een migratie zijn die koppelingen soms verbroken, zonder dat je er een foutmelding over krijgt. Stuur een testbericht en controleer of het aankomt.
Wat je na de migratie nog moet regelen
De migratie is klaar, maar je bent er nog niet. DNS is het eerste wat je moet aanpassen. Verander het A-record van je domein zodat het naar het IP-adres van de nieuwe server wijst. Houd rekening met een propagatietijd van enkele uren tot maximaal 48 uur. In die periode kunnen bezoekers op de oude of de nieuwe server terechtkomen, afhankelijk van hun DNS-cache.
Zet de oude server nog niet meteen uit. Laat hem nog minstens een week actief, zodat je kunt terugvallen als er toch iets niet klopt. Pas als je zeker weet dat alles werkt en de DNS volledig is overgegaan, zeg je de oude hosting op.
Controleer ook de robots.txt en de sitemap. Sommige migratieplugins schrijven de sitemap-URL hard in de database. Als die URL veranderd is, moet je dat aanpassen in je SEO-plugin. Controleer ook of de robots.txt geen Disallow: / bevat, wat soms automatisch wordt ingesteld in een testomgeving en vergeten wordt te verwijderen.
Kijk daarna naar de e-mailinstellingen. Veel WordPress-sites versturen e-mail via SMTP. Na een serverwissel zijn de SMTP-gegevens soms niet meer geldig. Controleer de instellingen in je SMTP-plugin en stuur een testmail. Dit is ook het moment om te controleren of SPF en DKIM correct zijn ingesteld voor het domein op de nieuwe server.
Tot slot: maak direct na de migratie een nieuwe back-up op de nieuwe server. Je wilt niet dat de eerste back-up die je hebt, de staat van de site op de oude server is. Sommige teams werken met maatwerk-omgevingen (https://www.aspect-ict.nl/software-development) waarbij back-ups en deployments geautomatiseerd zijn, maar voor de meeste WordPress-sites is een wekelijkse handmatige controle voldoende.
Wat je checkt bij een migratie
Dit is de lijst die ik zelf gebruik na elke verhuizing:
- Laadt de homepage correct in een privévenster
- Werken interne links en afbeeldingen
- Is SSL actief en is er geen mixed content
- Werken alle formulieren en komen testberichten aan
- Zijn de SMTP-instellingen bijgewerkt
- Klopt de sitemap-URL in de SEO-plugin
- Staat robots.txt niet op
Disallow: / - Zijn de bestandsrechten correct ingesteld
- Is de DNS volledig overgegaan
- Staat er een verse back-up op de nieuwe server
Gebruik deze lijst als je een migratie overdraagt aan een klant of collega. Het voorkomt dat je een week later wordt gebeld over een formulier dat al die tijd stil heeft gestaan.
Veelgestelde vragen over WordPress migraties
Kan ik een WordPress-site migreren zonder downtime?
Ja, dat kan. De truc is om de site eerst volledig op de nieuwe server te zetten en te testen voordat je de DNS aanpast. Zolang de DNS nog naar de oude server wijst, zien bezoekers de oude site. Pas als je zeker weet dat alles werkt op de nieuwe server, verander je het A-record. De overgang duurt dan alleen zo lang als de DNS-propagatie, wat voor de meeste bezoekers een paar uur is.
Wat doe ik als de database te groot is voor phpMyAdmin?
phpMyAdmin heeft standaard een uploadlimiet van 2 tot 8 MB. Grote databases passen daar niet in. Gebruik in dat geval de commandoregel met mysqldump om te exporteren en mysql om te importeren. Heb je geen toegang tot de commandoregel, vraag dan of je host de database rechtstreeks kan kopiëren via hun beheerpaneel. Sommige hosts bieden ook een tool als Adminer aan, die iets soepeler omgaat met grote bestanden.
Moet ik WordPress opnieuw installeren op de nieuwe server?
Nee. Je kopieert de bestaande installatie volledig, inclusief de wp-content-map met thema’s, plugins en uploads. Een nieuwe installatie is alleen nodig als je bewust wilt beginnen met een schone omgeving, bijvoorbeeld bij een grootschalige heropbouw van de site. Bij een gewone migratie kopieer je alles en pas je alleen de configuratie aan voor de nieuwe omgeving.