jbroadway/urlify
A PHP slug generator that transliterates Unicode text to ASCII and creates clean, SEO-friendly URLs. Supports multiple languages, custom character mappings, and Laravel integration for easy slug creation.
/blog/10-tips-for-remote-work) versus opaque IDs (/blog/4521) is a measurable SEO, CTR, and link-sharing decision. URLify makes the slug option cheap to ship, so the roadmap conversation becomes "what slug policy do we want" rather than "can we afford slugs."str_replace chain, and frees engineering capacity for differentiating work./de/uber-uns) or use native-script paths (/de/über-uns) is a product and SEO call; this package makes the transliteration branch viable without new infrastructure.Adopt when:
Str::slug() already covers you and adding a dependency is unjustified.ext-intl or a heavier string-manipulation library, which matters on shared hosting or constrained containers.Look elsewhere or build thin app-level logic when:
intl/Normalizer or Symfony String with the intl polyfill.Practical adoption criteria: pin the version, wrap it in a small SlugService adapter so the dependency is swappable, and add fixture tests covering your top five markets' characters plus your max-length and duplicate-suffix rules.
To executives (30 seconds): We need clean, readable URLs to compete for search traffic and to look credible when links are shared. Today that's easy in English and hard in every other language — accented, Cyrillic, Greek, and Turkish characters either break the URL or produce gibberish. This is a mature, permissively licensed (BSD-3) library that solved that problem years ago, has no runtime dependencies, and is actively maintained, with a release as recent as April 2025. It's a small, low-risk component that unblocks international SEO and removes a class of bug we would otherwise pay engineers to rediscover. The cost is effectively zero; the alternative is weeks of in-house edge-case work.
To engineering (why it's the right call): Single class, no extensions or Composer baggage beyond itself, fast enough for bulk import jobs, and configurable for separator, casing, length, and custom character maps. It replaces hand-rolled str_replace and iconv chains that silently mangle characters. Wrap it behind a thin service interface with fixture tests per market so we keep the option to swap it for an intl-based solution later without touching call sites.
Risks and mitigations, stated honestly: It is community-maintained with a small contributor base, so we pin the version and keep the wrapper boundary; it does not do uniqueness or Unicode normalization, so those stay in our application and database layers; and if our future URL strategy shifts to native-script paths, we can retire it behind the same interface. Overall: high utility, commodity capability, low strategic risk — the right kind of dependency to take.
How can I help you explore Laravel packages today?