ToolDeck

منشئ الـ Slug

حوّل أي نص إلى slug نظيف وملائم لعناوين URL

جرب مثالاً
الفاصل

نص الإدخال

Slug

يعمل محليًا · آمن للصق الأسرار
سيظهر الـ slug هنا…

ما هو الـ URL Slug؟

الـ URL slug هو الجزء من عنوان الويب الذي يُعرّف صفحةً محددة بصيغة مقروءة للإنسان. في العنوان https://example.com/blog/my-first-post، الـ slug هو my-first-post. يُحوّل منشئ الـ slug عنوان الصفحة أو وصفها إلى سلسلة نصية تحتوي فقط على أحرف صغيرة وأرقام وشرطات (أو فاصل آخر مختار). تُزيل هذه العملية المسافات وتُزيل التشكيل اللاتيني وتحذف الأحرف الخاصة وتُوحّد المسافات البيضاء في فاصل واحد.

توليد الـ slug خطوة معيارية في أنظمة إدارة المحتوى ومولّدات المواقع الساكنة ومنصات التدوين وأي تطبيق يستخرج عناوين URL من مدخلات المستخدم. تتضمن WordPress وGhost وHugo وNext.js وDjango منطق توليد الـ slug لأن عناوين URL القابلة للقراءة تُحسّن قابلية الاستخدام والسيو معًا. الـ slug المُنسَّق جيدًا يُخبر المستخدم بمحتوى الصفحة قبل أن ينقر على الرابط.

جاء مصطلح "slug" من عالم النشر الصحفي، حيث كان يشير إلى تسمية مختصرة تُستخدم لتعريف مقالة ما أثناء الإنتاج. في تطوير الويب، يؤدي الـ slug الوظيفة ذاتها: إنه معرّف مضغوط وفريد وآمن لعناوين URL، مستخرج من عنوان أو اسم أطول. ولأن الـ slugs تُستخرج برمجيًا، يضمن منشئ الـ slug الموثوق الاتساق عبر كل الصفحات والمناطق الجغرافية.

لماذا تستخدم منشئ الـ Slug هذا؟

إنشاء slugs لعناوين URL يدويًا عُرضة للأخطاء. نسيان إزالة حرف ذي علامة لهجية، أو ترك شرطة مزدوجة، أو إغفال حالة حافة في مدخلات Unicode يمكن أن ينتج عناوين URL معطوبة أو قبيحة. تُعالج هذه الأداة تلك المشكلات تلقائيًا.

تحويل فوري
الصق أي نص أو اكتبه وشاهد تحديث الـ slug في الوقت الفعلي. لا إرسال نموذج ولا إعادة تحميل صفحة. مفيد عند الحاجة إلى slugs لمجموعة من عناوين المقالات أو أسماء المنتجات.
🔒
معالجة تحافظ على الخصوصية
تتم جميع عمليات توليد الـ slug في متصفحك. نصّك لا يغادر الصفحة أبدًا، لذا يمكنك بأمان تحويل عناوين المسودات أو أسماء المشاريع الداخلية أو أسماء المنتجات غير المُعلنة.
⚙️
إخراج قابل للتخصيص
اختر بين الشرطة (-) أو الشرطة السفلية (_) أو النقطة (.) كفاصل. شغّل الأحرف الصغيرة أو أوقفها. هذا يغطي أكثر اصطلاحات الـ slug شيوعًا عبر أطر العمل وأنظمة إدارة المحتوى المختلفة.
🌐
معالجة Unicode والتشكيل
يُطبّق المنشئ تطبيع NFD لإزالة العلامات اللهجية من الأحرف اللاتينية. يُصبح Café كـcafe، وnaïve كـnaive. الأحرف غير اللاتينية التي لا يمكن نقلها حرفيًا تُزال بشكل نظيف.

حالات استخدام منشئ الـ Slug

مطوّر الواجهة الأمامية — تخطيط المسارات
توليد slugs متسقة لمسارات الصفحات في React Router أو Next.js أو Nuxt قبل ربط مقاطع المسار الديناميكية. التحقق من أن العناوين التي تحتوي على أحرف خاصة تُنتج مسارات نظيفة.
مهندس الواجهة الخلفية — معرّفات قاعدة البيانات
إنشاء slugs آمنة لعناوين URL لسجلات قاعدة البيانات التي تحتاج إلى معرّفات قابلة للقراءة. تعمل الـ slugs جيدًا كمفاتيح ثانوية إلى جانب المعرّفات الرقمية لنقاط نهاية REST API مثل /api/products/wireless-headphones.
DevOps — تسمية ملفات الإعداد
تحويل أسماء الخدمات أو تسميات البيئات إلى سلاسل نصية آمنة لنظام الملفات لملفات الإعداد أو وسوم صور Docker أو أسماء موارد Kubernetes حيث لا تُسمح الأحرف الخاصة.
مهندس ضمان الجودة — توليد بيانات الاختبار
توليد متغيرات الـ slug بسرعة من عناوين حالات الاختبار للتحقق من توجيه URL وقواعد إعادة التوجيه وسلوك الوسوم الأساسية عبر بيئات التجريب.
مهندس البيانات — تطبيع الأعمدة
تطبيع رؤوس الأعمدة الفوضوية من استيرادات CSV أو Excel إلى معرّفات snake_case أو kebab-case متسقة للاستخدام في مخططات قواعد البيانات أو مسارات البيانات.
الطالب — مشاريع CMS والتدوين
تعلّم كيفية عمل توليد الـ slug عند بناء مدوّنة باستخدام WordPress أو Jekyll أو نظام CMS مخصص. استخدم هذه الأداة لمقارنة الـ slugs التي تُنشئها يدويًا بتطبيق مرجعي.

قواعد توليد الـ Slug ومعالجة الأحرف

يتبع توليد الـ slug تسلسلًا متوقعًا من التحويلات. فهم كل خطوة يساعدك في تصحيح الإخراج غير المتوقع أو بناء دالة slugify الخاصة بك.

  1. 1. تطبيع Unicode (NFD)
    تحليل الأحرف المدمجة إلى حرف أساسي + علامة دمج. على سبيل المثال، é (U+00E9) يُصبح e + accent مدمج (U+0301). هذا يجعل إزالة التشكيل ممكنة في الخطوة التالية.
  2. 2. إزالة التشكيل
    إزالة جميع الأحرف في كتلة علامات Unicode للتشكيل المدمجة (U+0300–U+036F). بعد هذه الخطوة، يُصبح café كـcafe ويُصبح Ñ كـN.
  3. 3. إزالة الأحرف الخاصة
    استبدال أي حرف ليس حرفًا أو رقمًا أو مسافة بيضاء أو شرطة بمسافة. هذا يحذف علامات الترقيم والرموز والأحرف التي لا تُكافئها في ASCII.
  4. 4. قص المسافات البيضاء وضغطها
    إزالة المسافات البيضاء الأولى والأخيرة، ثم ضغط جميع تسلسلات المسافات أو الشرطات السفلية أو الشرطات المتتالية في فاصل واحد مختار.
  5. 5. تطبيق حالة الأحرف والفاصل
    التحويل إلى أحرف صغيرة (اختياري) وضم الكلمات بحرف الفاصل المختار: شرطة (-) أو شرطة سفلية (_) أو نقطة (.).

مرجع تحويل الأحرف

يوضح الجدول أدناه كيفية معالجة الأحرف الشائعة أثناء توليد الـ slug:

المدخلالمخرجالقاعدة المطبَّقة
Hello Worldhello-worldLowercase + space → hyphen
Café au Laitcafe-au-laitNFD normalization strips é → e
naïve résuménaive-resumeMultiple diacritics removed
Price: $9.99!price-9-99Symbols ($, !, :) removed
too many too-manyWhitespace trimmed and collapsed
one--two___threeone-two-threeMixed separators collapsed
Привет мирprivet-mirCyrillic (if transliteration) or removed
file_name.txtfile-name-txtDots and underscores replaced
React & Vuereact-vueAmpersand removed
2026-03-302026-03-30Digits and hyphens preserved

أمثلة الكود

توليد الـ slug في اللغات وأطر العمل الشائعة. كل مثال يُعالج تطبيع Unicode وإزالة التشكيل وإدراج الفاصل.

JavaScript
function slugify(text, separator = '-') {
  return text
    .normalize('NFD')                   // decompose accented chars
    .replace(/[\u0300-\u036f]/g, '')    // strip diacritics
    .toLowerCase()
    .replace(/[^\w\s-]/g, ' ')          // drop special chars
    .trim()
    .replace(/[\s_-]+/g, separator)     // collapse whitespace → separator

  // slugify('Café au Lait')      → "cafe-au-lait"
  // slugify('Hello World', '_')  → "hello_world"
}

// Node.js alternative using the `slugify` npm package:
// npm install slugify
// const slugify = require('slugify')
// slugify('Hello World', { lower: true, strict: true }) → "hello-world"
Python
import re
import unicodedata

def slugify(text: str, separator: str = '-') -> str:
    """Convert text to a URL-safe slug."""
    text = unicodedata.normalize('NFD', text)
    text = text.encode('ascii', 'ignore').decode('ascii')  # strip non-ASCII
    text = text.lower()
    text = re.sub(r'[^\w\s-]', ' ', text)
    text = text.strip()
    text = re.sub(r'[\s_-]+', separator, text)
    return text

# slugify('Café au Lait')      → "cafe-au-lait"
# slugify('Hello World', '_')  → "hello_world"

# Alternative: python-slugify (pip install python-slugify)
# from slugify import slugify
# slugify('Café au Lait')  → "cafe-au-lait"
Go
package main

import (
	"regexp"
	"strings"
	"unicode"

	"golang.org/x/text/unicode/norm"
	"golang.org/x/text/transform"
	"golang.org/x/text/runes"
)

func slugify(text string) string {
	// NFD normalize and strip diacritics
	t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)
	result, _, _ := transform.String(t, text)

	result = strings.ToLower(result)
	re := regexp.MustCompile(`[^\w\s-]+`)
	result = re.ReplaceAllString(result, " ")
	result = strings.TrimSpace(result)
	re = regexp.MustCompile(`[\s_-]+`)
	result = re.ReplaceAllString(result, "-")
	return result
}

// slugify("Café au Lait") → "cafe-au-lait"
// slugify("Hello World")  → "hello-world"
PHP
function slugify(string $text, string $separator = '-'): string {
    // Transliterate non-ASCII characters
    $text = transliterator_transliterate(
        'Any-Latin; Latin-ASCII; Lower()', $text
    );
    // Remove anything that is not a word char, space, or hyphen
    $text = preg_replace('/[^\w\s-]/', ' ', $text);
    $text = trim($text);
    $text = preg_replace('/[\s_-]+/', $separator, $text);
    return $text;
}

// slugify('Café au Lait')      → "cafe-au-lait"
// slugify('Hello World', '_')  → "hello_world"

الأسئلة الشائعة

ما الفرق بين الـ slug ومسار URL؟
مسار URL هو المقطع الكامل بعد النطاق، مثل /blog/2026/my-post. الـ slug هو الجزء القابل للقراءة الذي يُعرّف موردًا محددًا ضمن هذا المسار، وعادةً ما يكون المقطع الأخير: my-post. كثيرًا ما تُستخرج الـ slugs من العناوين، بينما يعكس بقية المسار بنية التوجيه في الموقع.
كيف يتعامل توليد الـ slug مع الخطوط غير اللاتينية كالصينية أو العربية؟
منشئات الـ slug القياسية التي تستخدم تطبيع NFD وإزالة التشكيل لا تستطيع نقل الخطوط غير اللاتينية حرفيًا. الأحرف مثل الحروف الصينية أو العربية لا تُكافئها في ASCII، لذا تُزال أثناء خطوة تنظيف الأحرف الخاصة. للحفاظ على المحتوى غير اللاتيني في الـ slugs، تحتاج إلى مكتبة نقل حرفي مثل limax (JavaScript) أو python-slugify مع خلفية unidecode أو جدول تعيين مخصص.
هل أستخدم الشرطات (-) أم الشرطات السفلية (_) في slugs لعناوين URL؟
تُعامل Google الشرطات كفواصل بين الكلمات بينما تُعامل الشرطات السفلية كواصلات. الـ slug الـ my-first-post يُقرأ كثلاث كلمات (my، first، post)، بينما يُقرأ my_first_post كرمز واحد. لأغراض تحسين محركات البحث، تُعدّ الشرطات الاختيار المعياري لـ slugs عناوين URL. أما الشرطات السفلية فشائعة في أسماء الملفات وأعمدة قواعد البيانات ومعرّفات البرمجة حيث تُستخدم كواصلات آمنة للمتغيرات.
كم يجب أن يكون طول الـ URL slug؟
تعرض Google ما يقارب 60 حرفًا من عنوان URL في نتائج البحث قبل الاقتطاع. الـ slugs الأقصر أسهل في القراءة والمشاركة والكتابة. اهدف إلى 3 إلى 6 كلمات. احذف الكلمات الوقفية (the، a، an، and، or، in) عندما لا تُغير المعنى: how-to-build-nextjs-app أفضل من how-to-build-a-next-js-app-in-2026.
هل توليد الـ slug هو نفسه ترميز URL؟
لا. ترميز URL (الترميز بالنسبة المئوية) يستبدل الأحرف غير الآمنة بثلاثيات علامة النسبة مثل %20 للمسافة. أما توليد الـ slug فيُزيل الأحرف غير الآمنة أو يستبدلها كليًا، منتجًا سلسلة نظيفة بلا بقايا ترميز. الـ slug لا يحتوي أبدًا على علامات نسبة أو مسافات أو أحرف خاصة. ترميز URL يحافظ على المحتوى الأصلي؛ أما توليد الـ slug فيُحوّله إلى شيء جديد.
هل يمكن لعنوانين مختلفين أن يُنتجا الـ slug ذاته؟
نعم. العناوين التي تختلف فقط في علامات الترقيم أو التشكيل أو حالة الأحرف كثيرًا ما تُفضي إلى نفس الـ slug. على سبيل المثال، Résumé Tips وResume Tips كلاهما يُنتجان resume-tips. في سياقات CMS أو قواعد البيانات، تحتاج إلى فحص تفرّد يُضيف لاحقة رقمية (resume-tips-2) عند حدوث تعارض.
كيف أُولّد الـ slugs في WordPress أو Django؟
تُولّد WordPress الـ slugs تلقائيًا من عنوان المنشور باستخدام sanitize_title(). يمكنك تعديل الـ slug في محرر المنشورات. يوفّر Django الدالة slugify() في django.utils.text، التي تتعامل جيدًا مع مدخلات ASCII. لدعم Unicode، مرّر allow_unicode=True. كلتا المنصتين تخزّنان الـ slug في قاعدة البيانات إلى جانب العنوان الكامل.