RIZKYEMHA
โ† Back to Blog๐Ÿ‡ฌ๐Ÿ‡ง English
Next.jsReactDebugging

Bug Path Relatif vs Absolut di Next.js ?

15 Mei 2025ยท4 min read
Bug Path Relatif vs Absolut di Next.js ?

Jadi ceritanya aku lagi asik-asiknya bikin halaman blog di portfolio. Semuanya jalan lancar โ€” sampai aku sadar ada yang aneh.

Di halaman /en, link ke artikel blog mengarah dengan benar ke /en/blogs/nama-artikel. Tapi begitu aku buka /en/blogs, link yang sama malah mengarah ke /en/en/blogs/nama-artikel. Ada /en yang dobel. Aneh banget.

Investigasi

Aku mulai curiga di komponen Blog โ€” khususnya bagian href-nya:

<Link href={`${lang}/blogs/${blog.slug}`}>{blog.frontmatter.title}</Link>

Kelihatannya normal. Tapi setelah aku perhatikan lagi, ternyata tidak ada / di depan. Aku ubah jadi:

<Link href={`/${lang}/blogs/${blog.slug}`}>{blog.frontmatter.title}</Link>

Dan langsung fixed. Sesederhana itu. Tapi kenapa?

Kenapa Ini Terjadi?

Ternyata ini bukan bug Next.js โ€” ini perilaku standar URL yang sudah ada sejak lama.

Tanpa / di depan, browser memperlakukannya sebagai relative path โ€” path yang dihitung relatif terhadap URL halaman saat ini.

URL saat ini: /en
href: en/blogs/artikel
hasil: /en/blogs/artikel โœ…

URL saat ini: /en/blogs
href: en/blogs/artikel
hasil: /en/blogs/en/blogs/artikel โŒ

Sedangkan dengan / di depan, browser memperlakukannya sebagai absolute path โ€” selalu dihitung dari root, tidak peduli halaman mana yang sedang dibuka.

URL saat ini: /en          โ†’ /en/blogs/artikel โœ…
URL saat ini: /en/blogs    โ†’ /en/blogs/artikel โœ…
URL saat ini: /en/projects โ†’ /en/blogs/artikel โœ…

Apakah Dokumentasi Next.js Menyebutkan Ini?

Aku langsung cek dokumentasi Next.js. Dan jawabannya โ€” tidak secara eksplisit.

Dokumentasi Next.js di bagian <Link> hanya menunjukkan contoh dengan absolute path seperti /about, /blog/post, tanpa pernah secara khusus memperingatkan tentang bahaya relative path. Perilaku ini dianggap sudah dipahami sebagai standar web โ€” bukan sesuatu yang perlu dijelaskan ulang.

Jadi kalau kamu mengharapkan Next.js yang akan mengingatkan kamu soal ini โ€” tidak akan. Ini murni pengetahuan dasar URL yang ternyata masih bisa bikin kita kecolongan, terutama saat kita sedang fokus ke hal lain.

Pelajaran yang aku ambil: kalau ada dynamic segment seperti lang di URL, selalu gunakan absolute path.

// โŒ jangan
href={`${lang}/blogs/${slug}`}
 
// โœ… selalu
href={`/${lang}/blogs/${slug}`}

Dan untuk komponen global atau reusable yang bisa dipakai di berbagai halaman โ€” pastikan semua href yang masuk selalu diawali dengan /. Tanggung jawab ada di si pemanggil komponen, bukan di komponen itu sendiri.


Moral of the story: kadang bug paling sederhana justru yang paling lama dicarinya. Dan ya โ€” sepertinya aku memang harus lebih banyak baca dokumentasi. Wkwkwk.

โ† All ArticlesShare on X โ†—