سازهکلمه متن (آدرس اینترنتی)
ابزار حرفهای سازهکلمه متن که متن را به کلمات سازگار با آدرس اینترنتی نرمال میکند، از تبدیل به حروف کوچک، جداکنندههای سفارشی و حذف کلمات توقف انگلیسی پشتیبانی میکند. از نرمالسازی Unicode برای مدیریت اکثر کاراکترهای زبانها استفاده میکند تا اطمینان حاصل شود کلمات تولید شده از بهترین روشهای SEO پیروی میکنند. ایدهآل برای آدرسهای اینترنتی پستهای وبلاگ، نامگذاری فایلها، شناسههای پایگاه داده و سایر سناریوها. کاملاً به صورت محلی پردازش میشود تا حریم خصوصی شما محافظت شود - نیازی به ثبت نام نیست. راهنمای استفاده دقیق و توصیههای بهترین روشها را ارائه میدهد تا به شما در تولید کلمات باکیفیت کمک کند.
چرا از سازهکلمه استفاده کنیم؟
🔍 بهینهسازی SEO
کلمات کلیدی در URLها به موتورهای جستجو کمک میکنند تا محتوای صفحه را درک کنند و رتبهبندی را بهبود بخشند. به عنوان مثال، example.com/blog/how-to-learn-javascript مؤثرتر از example.com/blog/123 است.
👁️ خوانایی و اشتراکگذاری
کاربران میتوانند فوراً محتوا را از URL درک کنند. نامهای مستقیم (Slugs) در شبکههای اجتماعی بهتر به اشتراک گذاشته میشوند و به راحتی به خاطر سپرده میشوند یا به صورت دستی تایپ میشوند.
💻 سازگاری سیستم
از خطاهای ناشی از کاراکترهای ویژه در نام فایلها یا URLها جلوگیری میکند. سازگاری چندسکویی (Windows/Linux/macOS) را تضمین میکند و مشکلات رمزگذاری را جلوگیری میکند.
🗄️ سازگار با پایگاه داده
به عنوان شناسههای منحصر به فرد (مثلاً نام کاربری، برچسبها) استفاده میشود تا خطر تزریق SQL را کاهش داده و عملکرد نمایهسازی و پرسوجو را بهبود بخشد.
سازهکلمه چیست؟
یک کلمه، نسخه کوتاه و استاندارد شده متن است که به عنوان آدرس اینترنتی، نام فایل یا شناسه استفاده میشود. پردازشهای رایج شامل استاندارد کردن حالت حروف، حذف علائم نگارشی و اتصال کلمات با جداکنندهها است.
- اولویت ASCII: حذف لهجهها و نمادها، نگهداری فقط حروف، اعداد و فاصلهها
- سازگار با Unicode: نرمالسازی اکثر کاراکترهای زبانها با استفاده از NFKD قبل از پردازش
- آمن برای آدرس اینترنتی: خروجی فقط شامل حروف، اعداد و جداکنندهها است - آماده برای استفاده مستقیم در مسیرها
سوالات متداول
س: آیا کاراکترهای چینی چگونه مدیریت میشوند؟
پ: به طور پیشفرض، حروف ترکیبی (diacritics) حذف و حروف پینی (pinyin) حفظ میشوند. متن خالص چینی ممکن است خالی شود؛ توصیه میشود قبل از تبدیل به نام مستقیم، آن را به صورت دستی به پینی تبدیل کنید یا از ابزار تبدیل پینی چینی استفاده کنید.
س: چرا نتیجه من خالی است؟
پ: ممکن است ورودی شما کاملاً شامل علائم نگارشی، نمادها یا فضاها باشد، یا تمام کلمات توسط فیلتر کلمات توقف (stopword) حذف شده باشند. سعی کنید گزینه کلمات توقف را غیرفعال کنید یا ورودی خود را تنظیم کنید.
س: آیا باید از - یا _ به عنوان جداکننده استفاده کنم؟
پ: برای سئو، از - (خط تیره) استفاده کنید، زیرا Google آن را به عنوان فضا در نظر میگیرد؛ _ (خط پایین) به عنوان نماد اتصال در نظر گرفته میشود که مانع جداسازی کلمات میشود. برای نامهای فایل، هر دو قابل قبول هستند.
س: آیا محدودیت طول برای نامهای مستقیم وجود دارد؟
پ: محدودیت فنی وجود ندارد، اما توصیه میشود نامهای مستقیم زیر 50 کاراکتر باشند تا نمایش URL و سئو بهتر باشد. نامهای مستقیم بیش از حد طولانی ممکن است توسط موتورهای جستجو کوتاه شوند.
اقدامات بهینه
اقدامات توصیه شده
- ✓ کوتاه نگه دارید (توصیه شده کمتر از ۵۰ کاراکتر)
- ✓ از کاراکترهای خاص خودداری کنید؛ فقط از حروف، اعداد و جداکنندهها استفاده کنید
- ✓ از حروف کوچک استفاده کنید تا از مشکلات حساس به بزرگی و کوچکی حروف جلوگیری شود
- ✓ حروف اضافه را حذف کنید تا چگالی معنایی بهبود یابد
از این موارد اجتناب کنید
- ✗ اطلاعات حساس را وارد نکنید (مثلاً شناسهها، ایمیلها، رمزهای عبور)
- ✗ از کاراکترهای خاص استفاده نکنید (مثلاً @#$%^&*)
- ✗ فضاها یا جداکنندههای پی در پی را نگه ندارید
- ✗ همان کلمه را تکرار نکنید
جزئیات فنی
تجزیه NFKD + حذف نشانههای ترکیبی (\p{M})، تبدیل Café به Cafe. از اکثر حروف مبتنی بر لاتین پشتیبانی میکند.
بر اساس کلمات رایج انگلیسی (a/an/the/and/or/of/to/in/on/for/at/by/with); قابل تنظیم است. حروف اضافه چینی نیاز به مدیریت جداگانه دارند.
نیازمند پشتیبانی از ES6+ و یونیکد ریجکس (\p{...}). در مرورگرهای مدرن پشتیبانی میشود: Chrome 64+, Firefox 78+, Safari 11.1+.
چگونه یک اسلاگ را از طریق زبان برنامهنویسی تولید کنیم؟
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("^-+|-+$", "");
}