Slugify de texto (URL)

Normaliza o texto em um slug amigável para URL, com suporte a minúsculas, separadores e remoção personalizada de palavras desnecessárias.

Parâmetros e entrada

Recomenda-se usar - ou _, com comprimento de 1 a 3 caracteres

Resultado

Por que usar Slugify?

🔍 Otimização SEO

Palavras-chave em URLs ajudam os mecanismos de busca a entender o conteúdo da página, melhorando seu ranking. Por exemplo, example.com/blog/how-to-learn-javascript é mais amigável do que example.com/blog/123.

👁️ Legibilidade e compartilhamento

Usuários conseguem entender o conteúdo apenas olhando a URL, tornando-a mais amigável para redes sociais e mais fácil de lembrar ou digitar manualmente.

💻 Compatibilidade do sistema

Evita erros causados por caracteres especiais em nomes de arquivos ou URLs, garantindo compatibilidade entre plataformas (Windows/Linux/macOS) e evitando problemas de codificação.

🗄️ Amigável para bancos de dados

Como identificador único (ex: nome de usuário, etiquetas), evita riscos de SQL injection e facilita indexação e consultas.

O que é Slugify?

Um slug é uma sequência de texto padronizada usada como URL, nome de arquivo ou identificador. Processamentos comuns incluem padronização de maiúsculas/minúsculas, remoção de pontuação e junção de palavras com separadores.

  • Prioridade ASCII: remova acentos e símbolos, mantendo apenas letras, números e espaços
  • Compatibilidade Unicode: normalize os caracteres de quase todas as línguas usando NFKD antes do processamento
  • Amigável para URL: o resultado contém apenas letras, números e separadores, prontos para uso em caminhos

Cenários de uso

URL de artigos de blog

Como Aprender JavaScript?

how-to-learn-javascript

Nomeação de Arquivos

Documento de Requisitos do Produto v2.0.docx

product-requirements-v2-0.docx

Identificadores de Banco de Dados

Usuário-张三

user-zhang-san

Perguntas Frequentes

Q: Como os caracteres chineses são tratados?

A: Por padrão, os acentos são removidos e mantêm-se as letras pinyin. Textos exclusivamente em chinês podem se tornar vazios; recomenda-se converter manualmente para pinyin antes de aplicar slugify, ou usar uma ferramenta de conversão pinyin-chinês.

Q: Por que meu resultado está vazio?

A: Pode ser que a entrada contenha apenas pontuação, símbolos ou espaços, ou que todos os termos tenham sido removidos pela filtragem de palavras desnecessárias. Tente desativar a opção de palavras desnecessárias ou ajustar o conteúdo de entrada.

Q: Devo usar - ou _ como separador?

A: Para SEO, recomenda-se usar - (hífen), pois o Google o interpreta como espaço; _ (sublinhado) é tratado como um conector, dificultando a separação de palavras. Para nomes de arquivos, ambas as opções são aceitáveis.

Q: Existe limite de comprimento para o slug?

A: Tecnicamente, não há limite, mas recomenda-se manter abaixo de 50 caracteres para facilitar a exibição na URL e o SEO. Slugs muito longos podem ser truncados pelos motores de busca.

Práticas Recomendadas

Boas Práticas

  • Mantenha curto (recomendado: < 50 caracteres)
  • Evite caracteres especiais; use apenas letras, números e separadores
  • Use letras minúsculas para evitar problemas de sensibilidade a maiúsculas/minúsculas
  • Remova palavras desnecessárias para aumentar a densidade semântica

Práticas a Evitar

  • Não inclua informações sensíveis (como IDs, e-mails ou senhas)
  • Não use caracteres especiais (como @#$%^&*)
  • Não mantenha espaços ou separadores consecutivos
  • Não repita palavras iguais

Notas Técnicas

Normalização Unicode:

Utiliza NFKD para decomposição + remoção de marcas combinatórias (\p{M}), convertendo Café em Cafe. Suporta a maioria dos caracteres latinos.

Lista de Palavras Desnecessárias:

Baseada em palavras comuns em inglês (a/an/the/and/or/of/to/in/on/for/at/by/with); pode ser expandida personalizadamente. Palavras desnecessárias em chinês exigem tratamento adicional.

Compatibilidade com Navegadores:

Requer suporte a ES6+ e expressões regulares Unicode (\p{...}). Navegadores modernos (Chrome 64+, Firefox 78+, Safari 11.1+) já suportam.

Como gerar um Slug usando uma linguagem de programação?

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("^-+|-+$", "");
}