テキストのSlugify(URL)
テキストをURLに適したスラッグに正規化します。小文字化、区切り文字の設定、カスタム停止語の削除をサポートします。
なぜスラッグ化が必要ですか?
🔍 SEO最適化
URLに含まれるキーワードは、検索エンジンがページ内容を理解し、ランキングを向上させるのに役立ちます。例:example.com/blog/how-to-learn-javascript は example.com/blog/123 より優れています。
👁️ 読みやすさと共有性
ユーザーはURLを見ただけでコンテンツの内容を把握でき、ソーシャルメディアでの共有や記憶、手動入力がしやすくなります。
💻 システム互換性
特殊文字によるファイル名やURLのエラーを回避し、Windows/Linux/Macなどのプラットフォーム間で互換性を確保し、エンコーディング問題を防ぎます。
🗄️ データベースに最適
ユーザー名やタグなどの一意の識別子として使用し、SQLインジェクションのリスクを回避し、インデックス作成とクエリ実行を容易にします。
よくある質問
Q: 中文文字はどのように処理されますか?
A: デフォルトでは音符を削除し、ピンインのアルファベットを保持します。純粋な中国語は空になる可能性があるため、事前に手動でピンインに変換してからslug化するか、中国語ピンイン変換ツールをご利用ください。
Q: 結果が空になるのはなぜですか?
A: 入力がすべて句読点/記号/空白文字であるか、停止語フィルターを有効にした結果、残る単語がなくなった可能性があります。停止語オプションを無効化するか、入力内容を調整してください。
Q: 区切り文字は - と _ のどちらを使えばよいですか?
A: SEOの観点からは -(ハイフン)を推奨します。Googleはこれをスペースと認識します。一方、_(アンダースコア)は連結文字と見なされるため、単語の区切りに適していません。ファイル名の場合はどちらでも構いません。
Q: Slugの長さに制限はありますか?
A: 技術的には制限はありませんが、URLの表示とSEOの観点から50文字以内に抑えることを推奨します。長すぎるslugは検索エンジンに切断される可能性があります。
プログラミング言語で Slug を生成する方法
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("^-+|-+$", "");
}