FaizBlog LogoFaizBlog
Back to all articles
cloudflareworkersredirecttutorial

Membuat Redirect Dinamis dengan Cloudflare Workers

Redirect URL berdasarkan kondisi seperti negara, device, waktu, atau A/B testing pakai Cloudflare Workers — semua di edge, tanpa server.

AI Insights

Generate a summary and suggested tags for this post.

Kadang kita butuh redirect yang berbeda tergantung kondisi — misalnya user Indonesia ke halaman ID, user mobile ke versi m.domain.com, atau split traffic 50/50 untuk A/B test. Semua bisa dilakukan di edge pakai Cloudflare Workers.

Redirect Dinamis dengan Workers

1. Redirect Berdasarkan Negara

Cloudflare inject header cf-ipcountry di setiap request.

export default {
  async fetch(request) {
    const country = request.cf?.country || request.headers.get("cf-ipcountry");

    if (country === "ID") return Response.redirect("https://example.com/id", 302);
    if (country === "MY") return Response.redirect("https://example.com/my", 302);
    return Response.redirect("https://example.com/en", 302);
  }
};

2. Redirect Berdasarkan Device

Deteksi mobile dari User-Agent:

const ua = request.headers.get("user-agent") || "";
const isMobile = /Mobile|Android|iPhone|iPad/.test(ua);

return Response.redirect(
  isMobile ? "https://m.example.com" : "https://example.com",
  302
);

3. Redirect Berdasarkan Waktu

Tampilkan promo di jam tertentu:

const hour = new Date().getUTCHours() + 7; // WIB
if (hour >= 9 && hour < 17) {
  return Response.redirect("https://example.com/promo-siang", 302);
}
return Response.redirect("https://example.com/", 302);

4. A/B Testing (Split Traffic 50/50)

const variant = Math.random() < 0.5 ? "A" : "B";
return Response.redirect(`https://example.com/landing-${variant}`, 302);

Kombinasikan dengan cookie biar user dapat variant konsisten:

const cookie = request.headers.get("cookie") || "";
let variant = cookie.match(/variant=([AB])/)?.[1];
if (!variant) variant = Math.random() < 0.5 ? "A" : "B";

return new Response(null, {
  status: 302,
  headers: {
    Location: `https://example.com/landing-${variant}`,
    "Set-Cookie": `variant=${variant}; Path=/; Max-Age=2592000`
  }
});

5. Bulk Redirect dari KV

Simpan mapping di KV:

// old-url → new-url
await REDIRECTS.put("/blog/lama", "/blog/baru");
await REDIRECTS.put("/promo-2023", "/promo-2024");

Worker:

const target = await REDIRECTS.get(url.pathname);
if (target) return Response.redirect(new URL(target, url).toString(), 301);

Jenis Redirect Status Code

StatusNamaKapan Pakai
301PermanentURL pindah selamanya (SEO baik)
302Found (Temporary)Redirect sementara (promo, A/B test)
307Temporary RedirectMethod HTTP dipertahankan
308Permanent RedirectMethod HTTP dipertahankan (permanent)

Use Case Real

  • E-commerce — user ID ke /id, US ke /us
  • News site — mobile user ke AMP version
  • Marketing — A/B test landing page
  • Migration — redirect URL lama ke struktur baru

Kesimpulan

Redirect dinamis di edge = cepat & tanpa hit ke origin server. Cocok untuk lokalisasi, deteksi device, A/B testing, atau bulk redirect saat migrasi. Cloudflare Workers menyediakan request.cf object yang kaya (country, city, timezone, ASN, dll) — manfaatkan!