WordPress adalah CMS paling populer di dunia, tetapi juga merupakan salah satu platform yang paling berat dan rentan terhadap serangan. Migrasi dari WordPress ke website statis menawarkan kecepatan, keamanan, dan biaya yang jauh lebih baik. Artikel ini membahas cara memigrasi WordPress ke static website secara lengkap.
Pengertian Migrasi WordPress ke Static Website
Migrasi WordPress ke static website adalah proses mengubah konten yang sebelumnya dikelola oleh WordPress (PHP + MySQL) menjadi file HTML/CSS/JS statis yang berjalan tanpa server backend. Website statis menghasilkan file HTML di build time, bukan di request time.
Mengapa Migrasi ke Static Website?
- Kecepatan: Website statis 10-100x lebih cepat dari WordPress
- Keamanan: Tidak ada database, PHP, atau admin panel yang bisa dieksploitasi
- Biaya: Tidak perlu server database atau hosting mahal
- Skalabilitas: Static website bisa menangani traffic berapa pun tanpa load balancing
- Performance: CDN statis didistribusikan ke seluruh dunia
- Maintenance: Tidak perlu update WordPress, plugin, atau security patches
Alat yang Dibutuhkan
- Akses ke WordPress yang akan dimigrasi
- Node.js terinstal
- Static site generator (SSG)
- Tidak perlu server atau database
Pilihan Static Site Generator
1. Next.js (Recommended)
Framework React yang mendukung Static Site Generation (SSG):
npx create-next-app@latest my-portfolio2. Astro
Astro sangat ideal untuk konten-heavy website:
npm create astro@latest3. Hugo
Generator tercepat, ditulis dalam Go:
# Install Hugo
apt install hugo
# Buat project baru
hugo new site my-portfolio4. Eleventy (11ty)
JavaScript-based static generator:
npm init eleventy@latestLangkah-Langkah Migrasi
1. Export Konten WordPress
# Export semua konten dari WordPress
# Dashboard WordPress → Tools → Export
# Hasilnya file XMLAtau gunakan WP-CLI:
wp export --dir=/tmp/wordpress-export2. Konversi Konten ke Markdown
Gunakan wordpress-export-to-markdown:
# Install tool
npm install -g wordpress-export-to-markdown
# Konversi XML ke Markdown
wordpress-export-to-markdown \
--input-file /tmp/wordpress-export.xml \
--output-folder ./content \
--wordpress-url https://masyarakat.id3. Buat Struktur Static Website
my-portfolio/
├── content/
│ ├── blog/
│ │ ├── artikel-1.md
│ │ ├── artikel-2.md
│ │ └── artikel-3.md
│ ├── about.md
│ └── contact.md
├── src/
│ ├── components/
│ ├── layouts/
│ └── styles/
├── public/
│ ├── images/
│ ├── m.png
│ └── og.png
├── package.json
└── next.config.js4. Konfigurasi Markdown ke HTML
// next.config.js (Next.js)
const withMarkdown = require('@next/third-party/markdown');
/** @type {import('next').NextConfig} */
const nextConfig = {
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
};
module.exports = withMarkdown(nextConfig);5. Buat Halaman dari Konten
// src/pages/articles/[slug].tsx
export async function getStaticPaths() {
const posts = getAllPosts(); // Baca dari Markdown files
return {
paths: posts.map(post => ({ params: { slug: post.slug } })),
fallback: false,
};
}
export async function getStaticProps({ params }) {
const post = getPostBySlug(params.slug);
return { props: { post } };
}
export default function Article({ post }) {
return (
<article className="fade-in">
<h1>{post.title}</h1>
<div dangerouslySetInnerHTML={{ __html: post.content }} />
</article>
);
}6. Pertahankan URL Lama (Redirect)
Agar SEO tidak hilang, redirect URL WordPress ke URL baru:
// next.config.js
module.exports = {
async redirects() {
return [
{
source: '/:path*',
has: [{ type: 'host', value: 'masyarakat.id' }],
destination: 'https://masyarakat.id/:path*',
permanent: true,
},
// Redirect lama ke baru
{
source: '/2024/01/:slug',
destination: '/articles/:slug',
permanent: true, // 308 redirect
},
];
},
};Konfigurasi SEO untuk Migrasi
1. Pertahankan Meta Tags
// Setiap halaman artikel
export async function generateMetadata({ params }) {
const post = getPostBySlug(params.slug);
return {
title: post.title,
description: post.excerpt,
openGraph: {
title: post.title,
description: post.excerpt,
images: ['/og.png'],
},
};
}2. Redirect 301 untuk URL Lama
// Redirect semua URL lama WordPress
const oldUrls = [
'/2024/01/judul-artikel/',
'/?p=123',
'/category/teknologi/',
];
// Buat redirect di Vercel
// vercel.json
{
"rewrites": [
{ "source": "/2024/(.*)", "destination": "/articles/:splat" }
],
"redirects": [
{ "source": "/:path*", "destination": "https://masyarakat.id/:path*", "permanent": true }
]
}3. Sitemap Baru
// app/sitemap.ts
export default async function sitemap() {
const posts = await getAllPosts();
const baseUrl = 'https://masyarakat.id';
return [
{ url: baseUrl, lastModified: new Date() },
...posts.map(post => ({
url: `${baseUrl}/articles/${post.slug}`,
lastModified: new Date(post.date),
changeFrequency: 'weekly' as const,
})),
];
}Backup dan Rollback
1. Backup WordPress Sebelum Migrasi
# Backup database
mysqldump -u root -p wordpress_db > wordpress_backup.sql
# Backup file WordPress
tar -czf wordpress-files-backup.tar.gz /var/www/html/2. Jaga WordPress Aktif Sebagai Redirect
# Jangan hapus WordPress langsung
# Biarkan WordPress jalan dengan redirect ke static website3. Rollback Plan
# Jika ada masalah, aktifkan kembali WordPress
systemctl start apache2
# Atau restore dari backupVerifikasi Migrasi
1. Cek Semua Halaman Berfungsi
# Crawl website untuk cek broken links
npx @vercel/analytics
npx serve -s dist
curl -s http://localhost:3000 | grep -c "404"2. Cek Redirect Berfungsi
# Test redirect lama ke baru
curl -I https://masyarakat.id/2024/01/judul-artikel/
# Harusnya return 308 → new URL3. Cek SEO
# Verifikasi Google Search Console
# Submit sitemap baru
# Cek semua halaman terindexKesimpulan
Migrasi WordPress ke static website memberikan peningkatan kecepatan, keamanan, dan biaya yang signifikan. Dengan tools modern seperti Next.js atau Astro, konten WordPress dapat dikonversi ke format Markdown dan di-generate menjadi website statis yang cepat dan aman.
Kunci utama:
- Backup WordPress sebelum migrasi
- Gunakan redirect 301 untuk mempertahankan SEO
- Konversi konten ke Markdown dengan tool otomatis
- Jaga WordPress sebagai redirect sampai migrasi selesai
- Verifikasi semua URL dan redirect berfungsi
- Submit sitemap baru ke Google Search Console
- Pertahankan semua meta tag dan OG image
Catatan penting: Jangan pernah menghapus WordPress secara langsung sebelum memastikan semua konten sudah berhasil dimigrasi dan semua URL redirect sudah berfungsi. Backup database dan file WordPress sebelum memulai proses migrasi. Selalu pertahankan URL lama yang berfungsi sebagai redirect ke URL baru agar peringkat pencarian dan traffic tidak hilang. Proses migrasi sebaiknya dilakukan secara bertahap — mulai dari beberapa halaman, verifikasi, lalu luncurkan secara penuh.
Ingat: Migrasi WordPress ke static website bukan berarti konten Anda hilang — ini adalah peningkatan dari sistem yang berat ke sistem yang ringan dan efisien. Konten Anda tetap sama, hanya cara penyajiannya yang berubah. Website statis tidak kehilangan SEO, justru mendapatkannya karena kecepatan dan performance yang lebih baik.
Dipublikasikan untuk membantu para administrator WordPress dalam bermigrasi ke website statis yang lebih cepat dan aman.