Slugify Teks (URL)
Normalisasi teks menjadi slug yang ramah URL, mendukung huruf kecil, pemisah, dan penghapusan kata stop khusus.
Mengapa Perlu Slugify?
🔍 Optimasi SEO
Kata kunci dalam URL membantu mesin pencari memahami konten halaman, meningkatkan peringkat. Misalnya, example.com/blog/how-to-learn-javascript lebih ramah daripada example.com/blog/123.
👁️ Keterbacaan & Berbagi
Pengguna dapat langsung memahami isi halaman dari URL, membuatnya lebih ramah saat dibagikan di media sosial, mudah diingat, dan mudah dimasukkan secara manual.
💻 Kompatibilitas Sistem
Hindari kesalahan akibat karakter khusus dalam nama file/URL, kompatibel lintas platform (Windows/Linux/Mac), hindari masalah encoding.
🗄️ Ramah Database
Sebagai identifikasi unik (misalnya username, tag), hindari risiko SQL injection, memudahkan pengindeksan dan pencarian.
Apa itu Slugify?
Slug adalah frasa yang dinormalisasi dari teks yang digunakan sebagai URL, nama file, atau identifikasi. Proses umum meliputi penyeragaman huruf, penghapusan tanda baca, dan penyambungan kata dengan pemisah.
- Prioritas ASCII: Hapus aksen dan simbol sebanyak mungkin, hanya pertahankan huruf, angka, dan spasi
- Kompatibel Unicode: Normalisasi NFKD untuk sebagian besar karakter bahasa sebelum diproses
- Ramah URL: Hasil hanya berisi huruf, angka, dan pemisah, siap digunakan langsung di path
Pertanyaan Umum
Q: Bagaimana karakter Cina ditangani?
A: Secara default, tanda aksen dihapus dan hanya huruf pinyin yang dipertahankan. Cina murni mungkin menjadi kosong; disarankan untuk mengonversi ke pinyin secara manual sebelum slugify, atau gunakan alat konversi pinyin Cina.
Q: Mengapa hasil saya kosong?
A: Mungkin input Anda hanya terdiri dari tanda baca/simbol/spasi, atau semua kata tersisa dihapus setelah filter stopword. Coba nonaktifkan opsi stopword atau sesuaikan konten input Anda.
Q: Sebaiknya menggunakan - atau _ sebagai pemisah?
A: Untuk SEO, disarankan menggunakan - (tanda hubung), karena Google menganggapnya sebagai spasi; _ (garis bawah) dianggap sebagai penghubung, yang kurang baik untuk pemisahan kata. Untuk nama file, keduanya boleh dipilih.
Q: Apakah ada batasan panjang slug?
A: Secara teknis tidak ada batasan, tetapi disarankan agar tetap di bawah 50 karakter agar lebih mudah ditampilkan di URL dan ramah SEO. Slug terlalu panjang berpotensi dipotong oleh mesin pencari.
Praktik Terbaik
Praktik yang Direkomendasikan
- ✓ Pertahankan singkat (disarankan < 50 karakter)
- ✓ Hindari karakter khusus; gunakan hanya huruf, angka, dan pemisah
- ✓ Gunakan huruf kecil untuk menghindari masalah sensitivitas huruf
- ✓ Hapus kata stop agar densitas semantik lebih tinggi
Praktik yang Harus Dihindari
- ✗ Jangan sertakan informasi sensitif (seperti ID, email, kata sandi)
- ✗ Jangan gunakan karakter khusus (seperti @#$%^&*)
- ✗ Jangan pertahankan spasi atau pemisah berurutan
- ✗ Jangan gunakan kata yang sama berulang-ulang
Penjelasan Teknis
Menggunakan dekomposisi NFKD + penghapusan tanda aksen gabungan (\p{M}), mengubah Café menjadi Cafe. Mendukung sebagian besar karakter Latin.
Berdasarkan kata umum bahasa Inggris (a/an/the/and/or/of/to/in/on/for/at/by/with), dapat diperluas secara kustom. Kata stop bahasa Cina memerlukan penanganan tambahan.
Memerlukan dukungan ES6+ dan ekspresi reguler Unicode (\p{...}). Browser modern (Chrome 64+, Firefox 78+, Safari 11.1+) sudah mendukung.
Bagaimana cara menghasilkan Slug melalui bahasa pemrograman?
JavaScript
function slugify(text) {
return text
.toLowerCase()
.normalize("NFKD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^\w\s-]/g, "")
.trim()
.replace(/[\s_-]+/g, "-")
.replace(/^-+|-+$/g, "");
}
PHP
function slugify($text) {
$text = mb_strtolower($text);
$text = iconv("UTF-8", "ASCII//TRANSLIT", $text);
$text = preg_replace("/[^\w\s-]/", "", $text);
$text = preg_replace("/[\s_-]+/", "-", $text);
return trim($text, "-");
}
Python
import re
import unicodedata
def slugify(text):
text = text.lower()
text = unicodedata.normalize("NFKD", text)
text = text.encode("ascii", "ignore").decode("ascii")
text = re.sub(r"[^\w\s-]", "", text)
text = re.sub(r"[\s_-]+", "-", text)
return text.strip("-")
Go
import (
"regexp"
"strings"
"golang.org/x/text/unicode/norm"
)
func Slugify(text string) string {
text = strings.ToLower(text)
text = norm.NFKD.String(text)
re := regexp.MustCompile(`[^\w\s-]`)
text = re.ReplaceAllString(text, "")
re = regexp.MustCompile(`[\s_-]+`)
text = re.ReplaceAllString(text, "-")
return strings.Trim(text, "-")
}
Ruby
require "unicode"
def slugify(text)
text = text.downcase
text = Unicode.nfkd(text).gsub(/[^\x00-\x7F]/, "")
text = text.gsub(/[^\w\s-]/, "")
text = text.gsub(/[\s_-]+/, "-")
text.strip.gsub(/^-+|-+$/, "")
end
Java
import java.text.Normalizer;
public static String slugify(String text) {
text = text.toLowerCase();
text = Normalizer.normalize(text, Normalizer.Form.NFKD);
text = text.replaceAll("[^\\w\\s-]", "");
text = text.replaceAll("[\\s_-]+", "-");
return text.replaceAll("^-+|-+$", "");
}