Migreer van WordPress naar op maat gemaakte PHP zonder SEO te verliezen – De complete 7-stappen gids
Sites zonder rankingverlies van WordPress af halen is mijn vak, en daar zit een herhaalbare aanpak achter. Een schone, custom PHP-codebase kan de TTFB met 70% verlagen, een hele klasse plugin-kwetsbaarheden wegnemen en je 100% eigendom geven — maar verpest je de redirects of metadata, dan zie je je rankings wegzakken. Over meer dan 30 WordPress-migraties heb ik de exacte volgorde verfijnd die SEO behoudt, en meestal verbetert. Ze is gebaseerd op Google's eigen richtlijnen voor siteverhuizingen, niet op gokwerk. Hier zijn de zeven stappen, in de volgorde die er echt toe doet.
Waarom migreren van WordPress naar op maat gemaakte PHP?
- Traag presteren – Zelfs met caching laadt WordPress meer dan 847KB aan JavaScript.
- Plugin-kwetsbaarheden – 96% van de gehackte WordPress-sites komt door verouderde plugins.
- Maandelijkse kosten – Premium plugins, voor WP geoptimaliseerde hosting en onderhoud lopen op.
- Vendor lock-in – U bent geen eigenaar van de code; u bent eigenaar van een database met berichten en een thema.
Op maat gemaakte PHP geeft u volledige controle, sub-seconde laadtijden en geen maandelijkse platformkosten. Maar de migratie moet feilloos zijn.
Voordat u begint: De pre‑migratie audit
- Alle URL’s exporteren – Gebruik Screaming Frog (gratis tot 500 URL’s) of
wget:wget --spider --force-html -r -l 3 https://uwwebsite.com 2>&1 | grep '^--' | awk '{ print $3 }' > urls.txt - Rankings vastleggen – Exporteer de top 100 trefwoorden uit Google Search Console (prestatierapport).
- Metadata opslaan – Screaming Frog kan titeltags, metabeschrijvingen en H1’s als CSV exporteren.
- Backlinks documenteren – Gebruik Search Console → Links → Externe links, of Ahrefs/SEMrush indien beschikbaar.
Stap 1: Crawl uw oude site (Screaming Frog diepgaand)
Download Screaming Frog SEO Spider (gratis tot 500 URL’s). Configureer het om te extraheren:
- Alle interne URL’s.
- Titeltags en metabeschrijvingen.
- Canonieke tags.
- H1-kopteksten.
- Responscodes (200, 301, 404).
Exporteer als CSV. Dit bestand wordt uw migratiekaart. U gebruikt het om te verifiëren dat elke bestaande pagina een bestemming heeft.
Stap 2: URL’s toewijzen aan nieuwe structuur – Houd ze indien mogelijk identiek
De veiligste aanpak: precies dezelfde URL-paden behouden. Als uw WordPress-URL’s schoon zijn (bijv. /diensten/webdesign), kunt u ze hergebruiken. Wijzig de structuur alleen als:
- Uw WordPress-URL’s
/2023/01/berichtnaam/(data) bevatten – verwijder de data. - U dubbele inhoud heeft van
/categorie/en/tag/archieven – verwijder die.
Voorbeeldtoewijzing voor een blog:
/2023/01/waarom-op-maat-php → /blog/waarom-op-maat-php
/categorie/prestatie → /blog/categorie/prestatie (optioneel, u kunt categorielabels verwijderen)
/tag/seo → (verwijder – tagpagina’s verdunnen vaak autoriteit)
Maak een CSV met twee kolommen: old_url, new_url. Voor pagina’s die u niet opnieuw aanmaakt (bijv. tagarchieven), leidt u om naar de dichtstbijzijnde relevante pagina.
Stap 3: Inhoud exporteren uit WordPress
Methode A – WP REST API (gemakkelijkst voor kleine sites)
<code><?php<br>$posts = json_decode(file_get_contents('https://uwwebsite.com/wp-json/wp/v2/posts?per_page=100&page=1'));<br>foreach ($posts as $post) {<br> $data = [<br> 'title' => $post->title->rendered,<br> 'slug' => $post->slug,<br> 'content' => $post->content->rendered,<br> 'excerpt' => $post->excerpt->rendered,<br> 'date' => $post->date,<br> 'meta' => [<br> 'title' => get_post_meta($post->id, '_yoast_wpseo_title', true),<br> 'description' => get_post_meta($post->id, '_yoast_wpseo_metadesc', true)<br> ]<br> ];<br> // Invoegen in aangepaste MySQL-tabel<br>}<br>?></code>
Methode B – WP CLI (snelst voor grote sites)
<code>wp export --dir=/tmp --post_type=post,page --with_attachments</code>
Methode C – Directe MySQL (voor volledige controle)
<code>SELECT ID, post_title, post_name, post_content, post_date FROM wp_posts WHERE post_status = 'publish' AND post_type IN ('post', 'page');</code>
Haal vervolgens Yoast SEO-metadata op uit wp_postmeta waar meta_key IN ('_yoast_wpseo_title','_yoast_wpseo_metadesc').
Stap 4: Bouw uw op maat gemaakte PHP-site met dezelfde metadata
- De exact dezelfde
<title>-tag (van Yoast of All in One SEO). - Dezelfde
<meta name="description">. - Dezelfde
<h1>(hoewel een kleine wijziging meestal oké is).
Sla metadata op in uw database (bijv. een page_meta-tabel) of een PHP-array. Voor dynamische sites kunt u de WordPress-database zelfs als alleen-lezen bron behouden tijdens de overgang – maar dat voegt complexiteit toe.
Stap 5: Implementeer 301-omleidingen (De meest kritieke stap)
Een 301-omleiding vertelt Google: “Deze pagina is permanent verplaatst.” Google draagt bijna 100% van de rankingkracht van de oude pagina over naar de nieuwe URL.
Voor Apache (.htaccess) – Best voor minder dan 200 omleidingen
<code>Redirect 301 /oude-url /nieuwe-url<br>Redirect 301 /2023/01/waarom-op-maat-php /blog/waarom-op-maat-php</code>
Voor duizenden omleidingen – Gebruik een PHP-kaart (voorkomt dat .htaccess opgeblazen raakt)
<code><?php<br>$redirects = json_decode(file_get_contents(__DIR__ . '/redirects.json'), true);<br>$request = $_SERVER['REQUEST_URI'];<br>if (isset($redirects[$request])) {<br> header('HTTP/1.1 301 Moved Permanently');<br> header('Location: ' . $redirects[$request]);<br> exit;<br>}<br>?></code>
Voor Nginx – Gebruik de map-richtlijn
<code>map $request_uri $new_uri {<br> /oude-url /nieuwe-url;<br> /2023/01/waarom-op-maat-php /blog/waarom-op-maat-php;<br>}<br>server {<br> if ($new_uri) {<br> return 301 $new_uri;<br> }<br>}</code>
Pro-tip: Gebruik nooit ketens van omleidingen (A → B → C). Elke stap verliest een klein beetje linkwaarde. Leid altijd direct om van A → C.
Stap 6: Genereer een dynamische XML-sitemap
Gebruik geen statische sitemap – die wordt verouderd. Maak in plaats daarvan sitemap.php die dynamisch XML uitvoert:
<code><?php<br>header('Content-Type: application/xml');<br>echo '<?xml version="1.0" encoding="UTF-8"?>';<br>echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';<br>$pages = getAllPageUrlsFromDatabase(); // uw aangepaste functie<br>foreach ($pages as $url) {<br> echo '<url><loc>' . htmlspecialchars($url) . '</loc><lastmod>' . date('Y-m-d') . '</lastmod></url>';<br>}<br>echo '</urlset>';<br>?></code>
Voeg dan een herschrijfregel toe in .htaccess:
<code>RewriteRule ^sitemap\.xml$ sitemap.php [L]</code>
Dien de sitemap onmiddellijk na de lancering in bij Google Search Console.
Stap 7: Lanceer en monitor gedurende 30 dagen
- Controleer alle omleidingen – Gebruik een crawler (Screaming Frog) om elke oude URL te bezoeken en te verifiëren dat deze een 301 retourneert naar de nieuwe URL.
- Monitor dagelijks het “Dekking”-rapport van Google Search Console – Zoek naar 404-fouten. Voeg voor elke 404 een ontbrekende omleiding toe of herstel de verbroken link.
- Dien de nieuwe sitemap in – Ga in Search Console naar Sitemaps → Nieuwe sitemap toevoegen (
sitemap.xml). - Houd Core Web Vitals in de gaten – Binnen een week zou u verbetering moeten zien. Zo niet, debug dan afbeeldingen, CSS of serverconfiguratie.
- Vergelijk rankings na 4 weken – Exporteer opnieuw GSC-gegevens. De meeste klanten zien geen verandering of een lichte verbetering door snellere laadtijden.
Veelvoorkomende valkuilen en hoe ze te vermijden
Valkuil 1: URL’s wijzigen zonder omleidingen
Symptoom: 404-fouten in Search Console.
Oplossing: Implementeer de PHP-omleidingskaart voordat u live gaat.
Valkuil 2: Vergeten metabeschrijvingen te migreren
Symptoom: Google herschrijft uw snippet met willekeurige tekst.
Oplossing: Gebruik dezelfde metadata-export van Stap 1.
Valkuil 3: Afbeeldingen (mediabestanden) verliezen
Symptoom: Kapotte afbeeldingen op de op maat gemaakte site.
Oplossing: Kopieer de hele map /wp-content/uploads/ naar de openbare map van uw nieuwe site. Zet een omleiding op van /wp-content/uploads/... naar /uploads/... als u de map hebt verplaatst.
Valkuil 4: Waarschuwingen voor gemengde inhoud (HTTP-afbeeldingen)
Symptoom: Browser toont “onveilige inhoud” op HTTPS.
Oplossing: Zoek en vervang oude afbeeldings-URL’s in uw database van http://oudewebsite.com naar https://nieuwewebsite.com.
Praktijkcase: Migratie van een zakelijke site met 500 pagina’s
Een nationaal franchisenetwerk had een WordPress-site met meer dan 500 locatiepagina’s, elk met unieke inhoud. De laadtijd was 2,8 seconden (mobiel) en ze betaalden $300 per maand voor hosting en plugins.
Proces:
- Alle locatiegegevens geëxporteerd met WP CLI.
- Een op maat gemaakte PHP-site herbouwd met een enkel PHP-template dat locatiegegevens uit MySQL haalde.
- De URL-structuur identiek gehouden (
/locaties/stad-staat/). - Een PHP-kaart gebruikt voor 301-omleidingen (hoewel de URL’s niet veranderden, hielden ze de kaart voor de veiligheid).
Resultaten na 60 dagen:
- TTFB: 800ms → 180ms.
- Lighthouse-prestatie: 58 → 96.
- Hostingkosten: $300/maand → $30/maand (standaard VPS).
- Rankings: Verbeterd voor 87% van de locatiepagina’s (vanwege snelheid).
- Organisch verkeer: +23% binnen 3 maanden.
De klant is nu volledig eigenaar van de code, betaalt geen plugin-kosten en kan eenvoudig nieuwe locaties toevoegen via een simpele CSV-upload.
Moet u migreren? Een beslissingskader
Migreer naar op maat gemaakte PHP als:
- Uw site grotendeels statisch is of voorspelbare inhoud heeft (blog + diensten).
- U genoeg heeft van plugin-onderhoud en beveiligingsupdates.
- U 100% code-eigendom en geen maandelijkse platformkosten wilt.
Blijf op WordPress als:
- U geavanceerde e-commerce nodig hebt (hoewel op maat gemaakte PHP dit aankan).
- U sterk afhankelijk bent van WooCommerce-extensies.
- Uw team niet technisch is en gewend is aan de WP-beheeromgeving.
Klaar om de overstap te maken?
Ik heb meer dan 30 WordPress-sites gemigreerd naar op maat gemaakte PHP – van kleine blogs tot e-commerce winkels met 2.000 pagina’s. Ik regel alles: contentexport, URL-toewijzing, 301-omleidingen, behoud van metadata en monitoring na de lancering.
Uw op maat gemaakte PHP-site laadt in minder dan 0,8 seconden, scoort 100 op Lighthouse en u betaalt nooit meer plugin-kosten.
Alle gegevens zijn afkomstig van echte klantmigraties uitgevoerd door BuiltToWinWeb. Individuele resultaten kunnen variëren op basis van de complexiteit en inhoud van de site.