Pindah Blog dari WordPress ke Astro + Cloudflare: Sebab, Langkah, Kos & Pengajaran (2026)
Blog ini berpindah dari WordPress ke Astro yang dihoskan di Cloudflare pada 24 Oktober 2026. Semua 140 artikel, 175 komen dan 753 gambar ikut sekali, dan tiada satu pun URL artikel berubah. Sebab utama: keselamatan dan penyelenggaraan. Laman statik tidak ada pangkalan data, tidak ada plugin dan tidak ada halaman login untuk diserang.
Ini catatan penuh: apa yang saya jumpa di server lama, langkah pemindahan, berapa kosnya sekarang, tujuh pengajaran keselamatan, dan tiga kesilapan yang saya buat selepas berpindah supaya anda tidak ulang.
| Perkara | Maklumat |
|---|---|
| Tarikh pindah | 24 Oktober 2026 |
| Dari | WordPress (tema Newspack, AMP, Yoast, Site Kit) di VPS Singapura |
| Ke | Astro 5 (laman statik) di Cloudflare Workers |
| Yang dipindahkan | 140 artikel, 3 halaman, 175 komen, 753 gambar |
| URL artikel | Sama seperti dulu (slug dikekalkan) |
| Masa bina laman | 174 halaman dalam kira-kira 2 saat |
| Saiz HTML halaman utama | 25.7 KB (6.9 KB selepas mampatan) |
| Kos hosting | RM0; tinggal kos domain |
Kenapa saya tinggalkan WordPress?
Sebab WordPress yang tidak dijaga ialah liabiliti, dan blog ini tidak dijaga selama enam tahun. Pada 23 Oktober 2026 saya nampak sendiri berapa besar liabiliti itu.
Saya dah cerita macam mana blog ini mati dengan “critical error” pada Julai 2026 sebab dua plugin bergaduh. Saya baiki, dan sangka dah selesai. Tiga bulan kemudian, php2shell muncul: dua kelemahan kritikal dalam PHP yang membolehkan orang luar menjalankan kod di server. Tampalan dikeluarkan pada 21 Oktober 2026 untuk PHP 8.2 ke atas. Server saya masih guna PHP 8.1, versi yang sudah tamat sokongan dan tidak dapat tampalan.
Itu yang memaksa saya buka server dan semak semuanya. Ini yang saya jumpa:
| Jumpaan | Butiran |
|---|---|
| PHP tamat sokongan | Semua laman di server guna PHP 8.1; tiada tampalan untuk php2shell |
| Malware | Satu salinan backup laman WordPress lain di server yang sama sudah dijangkiti: folder plugin dan tema bernama rawak, fail login palsu wp-log1n.php, dan fail teras wp-includes yang dikosongkan |
| Akaun spam | 427,622 pengguna berdaftar di blog ini, kerana tetapan “Anyone can register” terbuka bertahun-tahun |
| Akaun admin lama | Satu akaun admin milik orang lain masih aktif; kali terakhir log masuk sekitar 2021–2022 |
| Kemas kini tertunggak | WordPress teras dan 12 hingga 15 plugin menunggu kemas kini pada setiap laman |
| Log tak terkawal | Fail debug.log pernah membesar sampai 8.7 GB (dijumpai Julai 2026) |
Pada semakan saya, blog ini sendiri bersih: folder akar dan folder pluginnya tidak diusik. Tetapi itu nasib, bukan hasil kerja saya. Semua laman di server itu berjalan di bawah satu akaun sistem yang sama, jadi malware dalam satu laman boleh menulis ke dalam semua laman lain.
Apa yang saya buat dalam empat hari
- 23 Oktober: naik taraf semua laman ke PHP 8.3.36 (versi yang ditampal), padam laman backup yang dijangkiti bersama pangkalan datanya, matikan pendaftaran pengguna, dan tukar semua kata laluan pangkalan data.
- 24 Oktober: bina semula blog ini sebagai laman statik dan padam pemasangan WordPress-nya.
- 25–26 Oktober: pindahkan baki laman di server itu satu demi satu.
- 26 Oktober: padam server.
Saya menulis beberapa kali setahun, bukan setiap hari. Untuk blog macam itu, menjaga PHP, MySQL, plugin, tema dan firewall setiap bulan memang tak berbaloi. Menampal sekali lagi dan berharap pun bukan jawapan.
Apa itu Astro dan kenapa laman statik lebih selamat?
Astro ialah alat yang menukar fail Markdown kepada fail HTML siap. Pelawat menerima fail HTML itu terus, tanpa PHP dan tanpa pangkalan data.
Bezanya dengan WordPress:
| WordPress | Astro (statik) | |
|---|---|---|
| Setiap kali pelawat datang | PHP bina halaman dari pangkalan data | Fail HTML siap dihantar |
| Halaman login | Ada (/wp-login.php) | Tiada |
| Plugin | Perlu dikemas kini selalu | Tiada |
| Tulis artikel | Papan pemuka dalam pelayar | Fail Markdown + satu arahan |
| Komen, borang, carian | Sedia ada | Perlu perkhidmatan luar |
Tiada login bermaksud tiada apa untuk diteka. Tiada pangkalan data bermaksud tiada 427,622 akaun spam. Tiada PHP bermaksud php2shell yang seterusnya bukan masalah saya.
Macam mana saya pindahkan 140 artikel tanpa ubah URL?
Enam langkah, dan langkah paling penting ialah yang kedua.
- Eksport melalui REST API WordPress. Saya tarik artikel dalam kelompok 10. Bila cuba 100 sekali gus, server balas ralat 504 sebab tak larat.
- Kekalkan slug. Artikel
/persediaan-banjir/di WordPress kekal/persediaan-banjir/di Astro. Ini yang jaga kedudukan di Google. - Tukar HTML kepada Markdown dengan pustaka Turndown. Jadual tanpa tajuk dan komen berganda perlu dibetulkan dengan skrip.
- Kecilkan gambar. Semua 753 gambar dihadkan kepada lebar 1600 piksel dan disimpan di
/media/, dengan redirect dari/wp-content/uploads/. - Bekukan komen. 175 komen lama dipaparkan sebagai teks di bawah artikel masing-masing.
- Tulis redirect untuk URL lama. Lebih 70 peraturan:
/tag/,/category/,/author/,/feed/,/page/dan sitemap lama semuanya ada destinasi baharu.
Selepas itu baru tukar DNS, semak semua 140 URL lama membalas 200, dan hantar sitemap baharu di Google Search Console.
Saya bukan developer. Kerja teknikal di atas dibuat dengan AI coding agent (Claude Code) dalam terminal; saya tentukan apa yang mesti kekal, semak hasil dan luluskan setiap langkah.
Berapa kos hosting sekarang?
Hosting kini RM0. Yang tinggal hanya kos domain.
| Kos | Dulu (WordPress) | Sekarang (Astro) |
|---|---|---|
| Server | VPS berbayar di Singapura | Tiada |
| Panel pengurusan server | Langganan bulanan | Tiada |
| Hosting laman | Termasuk dalam VPS | Cloudflare Workers, percuma |
| Domain | RM50–RM60 setahun | RM50–RM60 setahun |
Dua perkara tentang “percuma” di Cloudflare (setakat November 2026):
- Permintaan kepada fail statik adalah percuma dan tanpa had.
- Laman ini menjalankan sedikit kod Worker dahulu (untuk redirect
farizizhan.comkewww), jadi setiap permintaan dikira. Pelan percuma Workers beri 100,000 permintaan sehari, lebih daripada cukup untuk blog peribadi.
Selepas semua laman di server lama siap dipindahkan, saya batalkan langganan panel dan padam VPS itu pada 26 Oktober 2026.
Pengalaman saya: tiga kesilapan selepas berpindah
Laman nampak sempurna pada hari pertama. Masalah sebenar muncul kemudian, dan semuanya benda yang WordPress buat secara senyap melalui plugin.
1. ID Google Analytics salah selama 11 hari. Saya masukkan Measurement ID lama. Laman berjalan elok, tetapi Google Analytics menunjukkan sifar pelawat dari 24 Oktober hingga 4 November. Pengajaran: buka laporan Realtime pada hari yang sama anda berpindah.
2. Fail ads.txt hilang. Di WordPress, plugin yang jana fail ini. Di laman baharu, tiada siapa jana. Saya hanya perasan pada 5 November semasa menyemak syarat Google AdSense.
3. URL AMP lama membalas 404. WordPress saya dulu ada versi AMP untuk setiap artikel (/slug/amp/). Google masih simpan URL itu, jadi saya perlu tambah redirect kemudian.
Yang saya rindu dari WordPress: borang komen, dan boleh betulkan typo dari telefon. Yang saya tak rindu langsung: notis “12 updates available”.

Apa pengajaran keselamatan daripada kejadian ini?
Tujuh pengajaran, dan semuanya terpakai walaupun anda kekal dengan WordPress.
- Laman yang anda lupa ialah laman yang paling bahaya. Malware bukan masuk melalui blog yang saya buka setiap minggu. Ia duduk dalam salinan backup lama yang tidak dijaga. Kalau laman itu tak digunakan, padam; jangan simpan “untuk jaga-jaga” di server yang hidup.
- Satu server, satu akaun sistem = satu nasib. Bila semua laman berkongsi satu pengguna sistem, laman paling lemah menentukan keselamatan semua. Asingkan setiap laman di bawah pengguna berbeza, atau jangan kongsi server.
- Matikan “Anyone can register”. Settings → General → Membership. Kalau blog anda tak perlukan pengguna mendaftar, kotak itu mesti kosong. 427,622 akaun spam saya datang daripada satu kotak itu.
- Semak versi PHP, bukan plugin sahaja. Papan pemuka WordPress menjerit tentang plugin, tetapi senyap tentang PHP yang tamat sokongan. Semak di panel hosting dua kali setahun.
- Audit akaun admin. Buka Users → Administrator. Setiap nama yang anda tak kenal atau tak aktif bertahun-tahun ialah kunci pendua rumah anda di tangan orang lain.
- Tukar kata laluan selepas sebarang jumpaan. Laman yang dijangkiti boleh membaca
wp-config.phplaman jiran. Saya tukar kata laluan semua pangkalan data pada hari yang sama. - “Tiada apa berlaku” bukan bukti selamat. Blog ini nampak sihat dari luar sepanjang masa itu. Satu-satunya cara tahu ialah buka file manager dan tengok.
Senarai semak 15 minit untuk pemilik WordPress
- Settings → General: “Anyone can register” dimatikan.
- Users: tiada akaun Administrator yang tidak dikenali; bilangan pengguna munasabah.
- Panel hosting: versi PHP masih disokong (8.3 ke atas setakat November 2026).
- Plugin dan tema yang tidak digunakan dipadam, bukan sekadar dinyahaktifkan.
- File manager: tiada folder bernama rawak dalam
wp-content/pluginsdanwp-content/themes. - Tiada fail PHP pelik di akar laman (contoh yang saya jumpa:
wp-log1n.php,goods.php). -
wp-content/debug.logtidak membesar;WP_DEBUG_LOGdimatikan di laman produksi. - Laman lama, laman ujian dan salinan backup di server yang sama sudah dipadam.
Patutkah anda pindah juga?
Pindah jika blog anda jarang dikemas kini dan anda penat menjaga plugin. Kekal jika WordPress masih memudahkan kerja anda.
Sesuai pindah ke laman statik:
- Blog peribadi atau laman syarikat yang kandungannya jarang berubah.
- Anda selesa dengan Markdown dan Git, atau sanggup guna AI untuk bahagian teknikal.
- Anda mahu kos hosting hampir sifar dan laman yang laju.
Lebih baik kekal dengan WordPress:
- Ramai penulis yang perlukan papan pemuka dan aliran kerja editor.
- Kedai online, keahlian, atau apa-apa yang perlukan akaun pengguna.
- Anda menulis dari telefon dan tidak mahu sentuh terminal.
Senarai semak sebelum tukar DNS
- Semua slug artikel sama dengan yang lama.
- Redirect untuk
/tag/,/category/,/author/,/feed/,/amp/dan/wp-content/uploads/. -
robots.txt,sitemap,ads.txtdan RSS wujud di laman baharu. - ID Google Analytics betul; semak laporan Realtime.
- Tag pengesahan Google Search Console masih ada.
- Halaman 404 membalas kod 404, bukan 200.
- Simpan salinan eksport WordPress sebelum padam server.
Bacaan berkaitan
- Blog ini senyap 6 tahun, saya hidupkan semula dengan AI: cerita “critical error” yang memulakan semua ini.
- Syarat mohon Google AdSense 2026: apa yang perlu ada pada laman sebelum dihantar untuk semakan.
- Nirwayar: blog teknologi saya tentang internet, WiFi dan 5G.
Sumber fakta: rekod semakan server dan pemindahan blog ini (23–26 Oktober 2026), ukuran laman pada 5 November 2026, laporan media keselamatan tentang php2shell (tampalan PHP 8.2.35, 8.3.36, 8.4.27 dan 8.5.12 pada 21 Oktober 2026), dan dokumentasi Cloudflare Workers tentang had pelan percuma dan bil fail statik.
Soalan Lazim
Macam mana nak tahu laman WordPress dijangkiti malware?
Tanda yang saya jumpa sendiri: folder plugin dan tema dengan nama rawak yang anda tak pernah pasang, fail PHP yang menyamar seperti wp-log1n.php, dan fail teras dalam wp-includes yang hilang atau diubah. Semak melalui file manager hosting, bukan melalui papan pemuka WordPress, kerana malware boleh menyembunyikan dirinya di sana.
Kenapa ada ratusan ribu pengguna spam dalam WordPress saya?
Kerana tetapan Settings → General → Membership 'Anyone can register' dihidupkan. Bot mendaftar akaun secara automatik setiap hari. Blog ini mengumpul 427,622 akaun begitu. Matikan tetapan itu jika laman anda tidak perlukan pendaftaran pengguna.
Adakah SEO jatuh selepas pindah dari WordPress ke Astro?
Tidak, jika URL dikekalkan. Blog ini mengekalkan slug yang sama untuk semua 140 artikel dan menambah redirect 301 untuk URL lama seperti /tag/, /feed/, /category/ dan /amp/. Pada 4 November 2026, 11 hari selepas berpindah, Google Search Console menunjukkan 147 halaman diindeks.
Berapa kos hosting blog Astro di Cloudflare?
Fail statik di Cloudflare Workers dihantar secara percuma dan tanpa had. Jika Worker dijalankan dahulu untuk setiap permintaan, pelan percuma memberi 100,000 permintaan sehari. Kos tetap yang tinggal hanyalah pembaharuan domain, sekitar RM50 hingga RM60 setahun.
Apa jadi dengan komen WordPress selepas berpindah?
175 komen lama dieksport dan dipaparkan sebagai teks statik di bawah artikel asal. Laman statik tidak ada pangkalan data, jadi borang komen ditutup. Untuk komen baharu, anda perlu perkhidmatan luar seperti Cusdis atau Giscus.
Perlu pandai coding untuk guna Astro?
Perlu selesa dengan Markdown, terminal dan Git, atau guna AI coding agent untuk kerja teknikal. Menulis artikel baharu bermaksud menulis satu fail Markdown dan menjalankan satu arahan deploy. Jika anda mahu menulis dari telefon melalui papan pemuka, kekal dengan WordPress.
Berapa lama masa untuk pindahkan 140 artikel?
Kerja utama siap dalam sehari, 24 Oktober 2026: eksport, tukar format, bina laman, tukar DNS, semak semua URL dan hantar sitemap. Kerja susulan seperti redirect AMP, ID Google Analytics dan ads.txt mengambil masa hampir dua minggu untuk dijumpai dan dibetulkan.