Migrasi WordPress ke Astro: Studi Kasus dengan Hasil 6× Lebih Cepat
Step-by-step migrasi blog WordPress dengan ratusan post ke Astro. Plus tips redirect, gambar, dan SEO yang sering terlewat.
Kenapa migrasi?
WordPress masih oke, tapi:
- Performa lambat — average LCP 3-6 detik, vs Astro 1-2 detik
- Hosting mahal — butuh PHP + MySQL + cache layer, vs Astro static (free di Cloudflare Pages)
- Maintenance ribet — update PHP, plugin, security patch tiap minggu
- Bloat — JS terinject dari setiap plugin, sering tidak dipakai
Step-by-step migrasi
1. Export konten dari WordPress
Plugin WP All Export atau via REST API:
curl https://oldsite.com/wp-json/wp/v2/posts?per_page=100&page=1 > posts.json
Loop pages sampai habis.
2. Convert ke Markdown
Tools: wordpress-export-to-markdown (npm package). Atau script Node sederhana:
import TurndownService from 'turndown';
const td = new TurndownService();
const md = td.turndown(post.content.rendered);
fs.writeFileSync(`src/content/blog/${post.slug}.md`,
`---
title: "${post.title.rendered}"
date: ${post.date}
slug: ${post.slug}
---
${md}`);
3. Setup Astro content collection
// src/content.config.ts
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
export const collections = {
blog: defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }),
schema: z.object({
title: z.string(),
date: z.coerce.date(),
slug: z.string(),
}),
}),
};
4. Download & re-host gambar
WP simpan gambar di /wp-content/uploads/. Download semua ke public/images/ lalu update path di markdown.
Tips: pakai AVIF/WebP instead of original JPG/PNG. Sharp + Astro <Image> handle ini otomatis saat build.
5. Setup redirect dari URL lama
Astro permalink mungkin beda dari WP. Buat _redirects (Cloudflare/Netlify):
/2024/06/old-post-slug /blog/old-post-slug 301
/category/foo /blog/tag/foo 301
/wp-admin/* / 302
Atau di nginx/Caddy:
redir /2024/* /blog{path} permanent
6. SEO preserve
Yang harus migrate:
- Meta title & description per post
- OG image (atau generate baru dari template)
- Canonical URL point ke domain baru
- Sitemap — Astro auto-generate
- Structured data (Article schema)
- Hreflang kalau multi-language
7. Submit perubahan ke Google
- Google Search Console → Add property baru
- Submit sitemap:
https://newsite.com/sitemap.xml - URL Inspection untuk top 10 URL — request indexing
- Monitor “Coverage” report selama 2-4 minggu
Hasil dari project nyata
Klien retail kami: WP blog dengan 280 post, traffic 50K/bulan.
| Metric | WordPress | Astro |
|---|---|---|
| LCP (mobile 4G) | 4.8 s | 0.9 s |
| Lighthouse score | 42 | 98 |
| Build time | n/a | 18 s |
| Hosting cost | $40/bulan | $0 (Cloudflare Pages) |
| Maintenance hours/bulan | ~6 | ~0.5 |
Trafik organik biasanya ikut membaik setelah migrasi karena fondasi SEO dan performa yang lebih kuat.
Yang sering jadi pitfall
- Lupa redirect — ranking langsung drop saat URL berubah tanpa 301.
- Image path broken — relative path WP beda dari Astro.
- Form submission — WP punya plugin Contact Form 7, Astro static perlu external (Formspree, Netlify Forms, atau backend sendiri).
- Comment system — Disqus sebagai drop-in replacement, atau Giscus untuk dev blog.
- WP shortcode — Markdown tidak punya equivalent, harus convert manual atau bikin custom MDX component.
Konsultasi migrasi WordPress — kami sudah migrate 30+ site WordPress ke Astro/Next.js.