Konfigurasi Nginx untuk sitemap WordPress
Ada pertanyaan yang masuk soal Sitemap di WordPress yang dibuat secara otomatis lewat plugin tidak ditemukan (404 Not Found) pada situs yang dihosting menggunakan Nginx. Jadi kasus ini paling sering terjadi pada website yang baru dimigrasikan dari shared hosting ke VPS dan si pemilik belum seberapa paham perbedaannya. Ya salah satunya tidak ada dukungan .htaccess yang menyebabkan masalah diatas karena biasanya sudah otomatis disettingkan pluginnya.
Setidaknya saya mendapatkan pertanyaan untuk 2 jenis plugin populer, yang satu memang khusus untuk pembuatan sitemap.xml
dan yang satunya adalah plugin SEO paling terkenal.
Yang perlu dilakukan adalah mengedit konfigurasi virtual host Nginx, saya maksudkan adalah yang untuk website anda. Jadi bukan yang untuk setting Nginxnya sendiri. Kemudian tambahkan kode berikut dalam blok location / {}
- Google XML Sitemaps
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last; rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last; rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last; rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
- Yoast SEO
rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;
atau menambahkan blok location sendiri:
location ~ ([^/]*)sitemap(.*).x(m|s)l$ { rewrite ^/sitemap.xml$ /sitemap_index.xml permanent; rewrite ^/([a-z]+)?-?sitemap.xsl$ /index.php?xsl=$1 last; rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last; rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;}
Setelah itu restart Nginx dan tes kembali link sitemapnya. Seharusnya akan dapat diakses dengan normal.
Kalau boleh tahu mas menggunakan plugin sitemap apa?
Boleh mas. 🙂 Saya pakai The SEO Framework untuk pluginnya. Tapi blog ini ga pakai Nginx.
Saya sudah coba mas untuk plugin yoast kedua kode diatas (kode biasa dan blok location). Tetapi setelah saya cek dengan mengkases domainsaya/?sitemap=1 kok masih muncul ya. Padahal sesuai yoast seharusnya url diatas tidak muncul kalau sudah menggunakan kode itu. Apa yang salah ya mas?