Slug 생성기/ URL 친화적 이름 만들기

제목을 URL 친화적인 slug로 변환. 악센트 문자, CJK 문자, 사용자 정의 구분자, 최대 길이를 지원합니다.

구분자
최대 길이
텍스트 / 제목 입력
Slug
0
Slug가 여기에 표시됩니다…
예시 사용

이 도구가 도움이 되었나요?

URL 슬러그란 무엇인가

URL 슬러그는 특정 페이지를 식별하는 URL의 사람이 읽기 쉬운 부분으로,通常 소문자, 숫자, 하이픈으로 구성됩니다. 예를 들어 `example.com/posts/how-to-seo`에서 `how-to-seo`가 슬러그입니다. 좋은 슬러그는 짧고 읽기 쉬우며 키워드를 포함하여 SEO와 사용자 경험 모두에 중요합니다.

좋은 슬러그를 만드는 방법

제목을 소문자로 변환하고, 공백과 특수문자를 하이픈으로 바꾸며, 불용어를 제거하고 핵심 키워드를保留합니다. 예를 들어 '파이썬 프로그래밍 배우기'는 `how-to-learn-python`이 됩니다. URL은 짧을수록 좋지만 가독성은 유지해야 합니다. 필요한 경우가 아니면 날짜나 ID를 슬러그에 포함하지 마세요.

코드 예제

JavaScript / Node.js
// npm install slugify
import slugify from 'slugify';

slugify('Hello World!', { lower: true })
// 'hello-world'

slugify('Cafe au Lait', { lower: true })
// 'cafe-au-lait'

// npm install limax (CJK support)
import limax from 'limax';
limax('你好世界')       // 'ni-hao-shi-jie' (pinyin)
limax('東京')           // 'dong-jing'

// Manual (no deps)
const slugify = (s) => s
  .toLowerCase()
  .normalize('NFD')
  .replace(/[\u0300-\u036f]/g, '')
  .replace(/[^a-z0-9]+/g, '-')
  .replace(/^-|-$/g, '');
Python
# pip install python-slugify
from slugify import slugify

slugify('Hello World!')
# 'hello-world'

slugify('Cafe au Lait')
# 'cafe-au-lait'

slugify('你好世界', allow_unicode=True)
# '你好世界'

# With max length
slugify('A very long title that should be truncated',
        max_length=30, word_boundary=True)
# 'a-very-long-title-that-should'
Go
// go get github.com/gosimple/slug
import "github.com/gosimple/slug"

slug.Make("Hello World!")
// "hello-world"

slug.Make("Cafe au Lait")
// "cafe-au-lait"

// Custom separator
slug.CustomMake("Hello World", "_")
// "hello_world"

// Truncate
s := slug.Make("A very long title here")
if len(s) > 50 {
    s = s[:50]
}
PHP / WordPress
<?php
// WordPress built-in
$slug = sanitize_title('Hello World! Cafe');
// 'hello-world-cafe'

// PHP custom
function to_slug(string $s): string {
    $s = mb_strtolower($s, 'UTF-8');
    $s = iconv('UTF-8', 'ASCII//TRANSLIT', $s);
    $s = preg_replace('/[^a-z0-9]+/', '-', $s);
    return trim($s, '-');
}

// Laravel
use Illuminate\Support\Str;
Str::slug('Hello World!');    // 'hello-world'
Str::slug('Hello World', '_'); // 'hello_world'

자주 묻는 질문

URL Slug란 무엇인가요?
Slug는 URL에서 특정 페이지를 식별하는 사람이 읽을 수 있는 문자열 부분입니다. 소문자, 숫자, 하이픈으로 구성됩니다(예: /blog/my-first-post). 좋은 slug는 간결하고, 읽기 쉬우며, SEO에 유리합니다. 특수 문자, 공백, 대문자, 비 ASCII 문자(네이티브 언어 URL을 사용하지 않는 한)를 피해야 합니다.
Slug에서 밑줄 대신 하이픈을 사용해야 하는 이유는?
Google은 하이픈(-)을 단어 구분자로 인식하여 my-blog-post를 3개의 독립된 단어로 처리합니다. 밑줄(_)은 연결자로 취급되어 my_blog_post는 하나의 단어로 인식됩니다. 따라서 하이픈이 SEO에 더 유리합니다. WordPress, GitHub, Shopify 등 주요 플랫폼도 기본적으로 하이픈을 사용합니다.
CJK 문자를 slug에서 어떻게 처리해야 하나요?
두 가지 주요 접근법이 있습니다: 1) 핀인/로마자로 음역(예: 你好世界 → ni-hao-shi-jie) - 라틴 문자 SEO에 유리. 2) 네이티브 문자를 직접 사용(예: /blog/你好世界) - 최신 브라우저와 검색 엔진이 지원하지만, 링크 공유 시 퍼센트 인코딩됩니다. 이 도구는 두 모드를 모두 지원합니다.
Slug의 이상적인 길이는?
SEO 모범 사례에 따르면 검색 결과에서 잘림을 방지하기 위해 slug를 60-75자 이내로 유지하는 것이 좋습니다. 대상 키워드를 포함하고, 불용어(a, the, of 등)를 제거하세요. 예: 'how-to-optimize-nextjs-performance'는 효과적인 slug입니다. 너무 긴 slug는 키워드 가중치를 희석시킵니다.
Slug 생성 시 어떤 문자를 제거해야 하나요?
제거 또는 교체해야 할 것: 공백(→ 구분자), 특수 기호(!@#$%^&*()+=[]{}|;:',.<>?/\`~), 악센트 문자(e→e, u→u), 제어 문자. 유지해야 할 것: 알파벳(a-z), 숫자(0-9), 구분자(-._). CJK 문자를 유지할지는 사용 사례에 따라 다릅니다.
Next.js나 Node.js에서 slug를 생성하려면?
Node.js에서: npm install slugify 또는 limax(CJK/핀인 지원). 기본 수동 구현: str.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''). Next.js 파일 기반 라우팅에서 slug는 일반적으로 파일 이름이나 데이터베이스 필드에서 가져옵니다. WordPress에는 sanitize_title()가 내장되어 있습니다.