Artigo Grow·SEO·13 min de leitura de leitura

O Que é Slug de URL (2026): Guia Completo com Boas Práticas e Código

Slug é a parte da URL que identifica a página — e uma das decisões de SEO mais fáceis de acertar e difíceis de desfazer. Este guia cobre o que é, por que importa, regras de criação, normalização de acentos e caracteres especiais, e como gerar slugs em JavaScript, Python e PHP.

Vitor Morais

Por Vitor Morais

Fundador do MochaLabz ·

🔗

Gere slugs em segundos

Digite o título, receba o slug limpo sem acento e pronto pra publicar.

Usar gerador →

Slug é a parte final de uma URL que identifica uma página específica, derivada geralmente do título. Na URL https://mochalabz.com/artigos/o-que-e-slug-url, o slug é o-que-e-slug-url. Pode parecer detalhe, mas é uma das decisões mais visíveis de arquitetura de informação de um site. Slug bom é curto, descritivo, separado por hífens, sem acentos e consistente em todo o site.

Este guia cobre o que caracteriza um bom slug, como gerar em diferentes linguagens, como evitar armadilhas de acentuação e caracteres especiais, e o que fazer quando precisar mudar slug já publicado.

Por que slug importa

Slug afeta quatro coisas em ordem de importância:

  1. Compartilhabilidade: URL legível em WhatsApp, Slack, e-mail gera mais clique. /guia-de-seo vence /?p=4821.
  2. Confiança: usuário sabe para onde clica antes de clicar.
  3. SEO direto: palavra-chave na URL é um dos sinais de relevância do Google (fraco, mas existe).
  4. Organização interna: estrutura de URL facilita code review, analytics, debug.

Regras universais de um bom slug

Checklist de um slug bem feito
CritérioExemplo bomExemplo ruim
Minúsculasguia-de-seoGuia-DE-SEO
Hífen separa palavraso-que-e-slug-urlo_que_e_slug_url
Sem acentossao-paulosão-paulo
Sem caracteres especiaisprecificacaoprecificação!
Palavra-chave principalguia-prompt-engineeringcomo-usar
Curto e descritivoab-test-titulosteste-a-b-em-titulos-de-blog-para-conversao
Sem stop words desnecessáriasguia-seoo-guia-de-como-fazer-seo
Sem números (exceto quando fazem parte do tema)redirect-301artigo-42

Atenção

Nunca use espaços em slug. Navegador codifica espaço como %20 e URL vira feia. Pior: alguns sistemas interpretam espaço como delimitador e quebram a rota.

Acentos e caracteres especiais: a dor brasileira

Em português, títulos têm acentos naturais: “São Paulo”, “Pré- Requisitos”, “Café”, “Ação”. Converter pra slug exige normalização.

Tabela de conversão padrão

Mapeamento de acentos para ASCII
CritérioVira
á, à, â, ã, äa
é, ê, ëe
í, ïi
ó, ô, õ, öo
ú, üu
çc
ñn
ßss

Caracteres especiais: remover ou substituir?

  • Pontos, vírgulas, exclamação: remover.
  • E comercial (&): substituir por “e” (“gatos & cachorros” → “gatos-e-cachorros”).
  • Porcentagem (%): substituir por “porcento”.
  • Barra (/): remover ou substituir por hífen — conflita com hierarquia de rota.
  • Aspas e parênteses: remover.

Algoritmo para gerar slug

Qualquer biblioteca de slug segue esses passos:

  1. Converte para minúsculas.
  2. Normaliza Unicode para forma decomposta (NFD), separando acento do caractere.
  3. Remove os caracteres de acento remanescentes (categoria Unicode “Mn”).
  4. Substitui caracteres não alfanuméricos por hífen.
  5. Colapsa hífens consecutivos em um só.
  6. Remove hífens no início e no fim.

Implementação em JavaScript

function slugify(texto) { return texto .toLowerCase() .normalize("NFD") // separa acento do caractere .replace(/[\u0300-\u036f]/g, "") // remove marcas de acento .replace(/[^a-z0-9\s-]/g, "") // remove especiais .trim() .replace(/\s+/g, "-") // espaços viram hífen .replace(/-+/g, "-"); // colapsa hífens duplicados } slugify("Como Criar Slugs de URL?"); // "como-criar-slugs-de-url" slugify("Ações da São Paulo & Cia."); // "acoes-da-sao-paulo-cia" slugify(" Guia Completo 2026 "); // "guia-completo-2026"

Versão TypeScript mais robusta

export function slugify( texto: string, options: { maxLength?: number; stopWords?: string[] } = {}, ): string { const { maxLength = 60, stopWords = ["de", "a", "o", "e"] } = options; let slug = texto .toLowerCase() .normalize("NFD") .replace(/[\u0300-\u036f]/g, "") .replace(/[^a-z0-9\s-]/g, "") .trim() .split(/\s+/) .filter((word) => !stopWords.includes(word)) .join("-") .replace(/-+/g, "-"); if (maxLength && slug.length > maxLength) { slug = slug.substring(0, maxLength).replace(/-[^-]*$/, ""); } return slug; } slugify("O Guia Completo de SEO para Iniciantes"); // "guia-completo-seo-para-iniciantes"

Dica

Remover stop words (“de”, “a”, “o”, “e”) gera slugs mais curtos e com melhor densidade de keyword. Use com cuidado: em frases onde a stop word faz parte do sentido (“no meio do caminho”), remover quebra a narrativa.

Bibliotecas populares em JavaScript

Bibliotecas de slug em npm
CritérioTamanhoSuporte Unicode
slugify5 KBCompleto com mapeamentos custom
slug3 KBSim, com transliteração
speakingurl14 KBSim, sobretudo para não-latinas
@sindresorhus/slugify6 KBSim, com locale específico
import slugify from "slugify"; slugify("Ações da São Paulo", { lower: true, strict: true, locale: "pt", }); // "acoes-da-sao-paulo" slugify("João & Maria's Café", { lower: true, strict: true, replacement: "-", remove: /[*+~.()'"!:@]/g, }); // "joao-and-maria-s-cafe"

Implementação em Python

# Função manual import re from unicodedata import normalize def slugify(texto: str) -> str: # NFD separa acento; encoding ASCII remove slug = normalize("NFD", texto).encode("ascii", "ignore").decode() slug = slug.lower() slug = re.sub(r"[^a-z0-9\s-]", "", slug) slug = re.sub(r"\s+", "-", slug.strip()) slug = re.sub(r"-+", "-", slug) return slug slugify("Ações da São Paulo & Cia.") # "acoes-da-sao-paulo-cia" # Ou usar biblioteca: # pip install python-slugify from slugify import slugify as py_slugify py_slugify("Ações da São Paulo & Cia.", separator="-") # "acoes-da-sao-paulo-and-cia"

Implementação em PHP

function slugify(string $texto): string { $slug = iconv("UTF-8", "ASCII//TRANSLIT", $texto); $slug = strtolower($slug); $slug = preg_replace("/[^a-z0-9\s-]/", "", $slug); $slug = preg_replace("/\s+/", "-", trim($slug)); $slug = preg_replace("/-+/", "-", $slug); return $slug; } slugify("Ações da São Paulo & Cia."); // "acoes-da-sao-paulo-cia"

Uso em CMS e frameworks

WordPress

WordPress gera slug automaticamente do título ao salvar. Campo editável abaixo do título no editor. Usa a função sanitize_title() internamente — boa por padrão, mas ignora stop words em PT-BR. Para controle avançado, use plugin Yoast ou Rank Math que oferece sugestões baseadas em keyword principal.

Next.js App Router

// app/blog/[slug]/page.tsx interface PageProps { params: Promise<{ slug: string }>; } export async function generateStaticParams() { const posts = await getPosts(); return posts.map((post) => ({ slug: slugify(post.title), })); } export default async function BlogPost({ params }: PageProps) { const { slug } = await params; const post = await getPostBySlug(slug); // ... }

Django

Django tem SlugField nativo e função django.utils.text.slugify()que já cobre Unicode, acentos e normalização. Padrão da indústria.

Slug único: evitando colisões

Dois posts com títulos iguais ou muito parecidos geram mesmo slug. Estratégias:

  • Adicionar contador: meu-titulo, meu-titulo-2, meu-titulo-3.
  • Adicionar ID: meu-titulo-a1b2c3 (menos legível, mas único).
  • Adicionar ano: guia-seo-2025, guia-seo-2026.
  • Diferenciar no editor: humano escolhe slug único manualmente.
async function generateUniqueSlug(titulo: string): Promise<string> { const baseSlug = slugify(titulo); let slug = baseSlug; let counter = 2; while (await postExists(slug)) { slug = `${baseSlug}-${counter}`; counter++; } return slug; }

Mudando slug: a regra do 301

Se você mudar slug de /guia-seo para /guia-seo-iniciantes, precisa configurar redirect 301 da URL antiga para a nova. Sem isso:

  • Todo link externo aponta para 404.
  • Autoridade SEO acumulada vira zero.
  • Ranqueamento cai.
  • Usuários perdem histórico de bookmarks.

Configuração em Next.js:

// next.config.js module.exports = { async redirects() { return [ { source: "/guia-seo", destination: "/guia-seo-iniciantes", permanent: true, // 301 }, ]; }, };

Vai mais fundo

Em migração grande (novo CMS, rebuild de site), exporte mapeamento completo de slugs antigos → novos. Use planilha ou arquivo JSON. Implemente redirects em lote no CDN (Cloudflare Page Rules, Netlify _redirects) para não sobrecarregar o servidor.

Estruturas de URL flat vs hierárquica

Flat vs hierárquica
CritérioExemploQuando usar
Flat/guia-seoBlogs simples, sites pequenos
Hierárquica 1 nível/blog/guia-seoBlog + outras seções (docs, loja)
Hierárquica 2 níveis/blog/seo/guiaE-commerce, portais grandes
Com data (NYT style)/2026/04/guia-seoNews sites, blogs onde data importa

Caracteres a evitar a qualquer custo

  • Espaços: codificados como %20, feios.
  • Underscores: Google trata como parte da palavra.
  • Maiúsculas: URLs são case-sensitive em Linux; risco de duplicação (Artigo vs artigo).
  • Acentos: codificação feia, incompatibilidades.
  • Pontuação: pontos, vírgulas, aspas — remover tudo.
  • Múltiplos hífens seguidos: sinal de processo de slug ruim.
  • Tamanho excessivo: mais de 5 palavras raramente agrega valor.

Erros clássicos

  • Usar ID em vez de slug: /post/4821 é feio e inútil para SEO.
  • Slug igual ao title inteiro: 80 caracteres é demais. Resuma nas 3–5 palavras-chave.
  • Gerar slug no frontend sem validação no backend: usuário mal- intencionado envia slug inválido.
  • Não testar Unicode exótico: emojis e caracteres chineses/japoneses podem quebrar slugify mal feito.
  • Mudar slug sem redirect: mata SEO acumulado.
  • Slug case-sensitive em produção: a mesma URL em minúscula e maiúscula retorna páginas diferentes ou 404.

Slug e versões em idioma

Em sites multi-idioma, cada versão precisa de slug próprio. Exemplo:

PT: /pt-br/guia-seo-iniciantes EN: /en/seo-beginners-guide ES: /es/guia-seo-principiantes <link rel="alternate" hreflang="pt-BR" href=".../pt-br/guia-seo-iniciantes"> <link rel="alternate" hreflang="en" href=".../en/seo-beginners-guide"> <link rel="alternate" hreflang="es" href=".../es/guia-seo-principiantes">

Slug em uma frase

Slug é decisão pequena com consequência grande: afeta SEO, compartilhabilidade e confiança do usuário, e é dolorosa de mudar depois de publicar. Escrever 5 minutos de slug bom uma vez economiza horas de redirect e ranqueamento perdido depois. É um dos investimentos de menor esforço e maior retorno em SEO on-page.

Perguntas frequentes

O que é exatamente um slug de URL?+

Slug é a parte final da URL que identifica uma página específica, normalmente após a última barra. Em https://seusite.com/blog/guia-de-seo, o slug é 'guia-de-seo'. É uma versão legível, amigável ao usuário e otimizada para SEO, criada a partir do título da página. Slug bom é curto, descritivo, com hífens separando palavras e sem caracteres especiais ou acentos.

Slug influencia ranqueamento no Google?+

Influencia, mas o peso é moderado. O Google lê palavras da URL como um dos sinais de relevância. Slug com palavra-chave principal ajuda, especialmente em queries específicas. Estudos mostram ~3% de impacto no CTR (usuário confia mais em URL descritiva). O grande benefício é compartilhabilidade: URL legível é mais clicada em WhatsApp, Slack e e-mail.

Devo usar hífen ou underscore no slug?+

Hífen. O Google trata hífen como separador de palavras (guia-de-seo vira três palavras); underscore é tratado como caractere único (guia_de_seo vira uma palavra só). Essa é a única regra absoluta do SEO sobre slugs — válida desde 2005 e confirmada por Matt Cutts, John Mueller e qualquer guia oficial do Google. Use hífen, sempre.

Posso usar acentos e caracteres especiais no slug?+

Tecnicamente, sim — URLs aceitam UTF-8 desde RFC 3987. Na prática, não. Acentos geram URL-encoding feio no clipboard (guia-de-são-paulo vira guia-de-s%C3%A3o-paulo), quebram em alguns sistemas antigos e prejudicam compartilhamento. A convenção em PT-BR é: remova acentos, troque por letras ASCII equivalentes (são → sao, café → cafe).

Qual o tamanho ideal de um slug?+

Entre 3 e 60 caracteres. Até 5 palavras separadas por hífen é o sweet spot para SEO e legibilidade. Slugs muito curtos (1-2 palavras) deixam espaço na margem e são difíceis de diferenciar em URLs similares. Muito longos ficam feios em compartilhamento e podem ser truncados pelo Google em alguns contextos. Se o título tem 10 palavras, priorize as 3-5 principais no slug.

Posso mudar o slug de uma página depois que ela foi publicada?+

Pode, mas configure redirect 301 da URL antiga para a nova. Sem isso, você perde todo o SEO acumulado e deixa links quebrados em quem compartilhou. Em WordPress, plugins como Redirection automatizam. Em Next.js, configure em next.config.js. Em Nginx/Apache, rule de rewrite. Nunca simplesmente deletar a URL antiga — é trair quem te linkou.

Devo incluir ano ou categoria no slug?+

Em geral, não. /2026/04/guia-de-seo ou /seo/artigos/guia-de-seo são padrões antigos que hoje são considerados ruins para SEO: dificultam atualização (o ano fica preso) e adicionam ruído à URL. Prefira slug flat: /guia-de-seo. Exceção: news sites onde data é parte da informação (G1, NYT). Para blogs evergreen, flat vence.

Qual a diferença entre slug e permalink?+

Permalink é a URL completa e permanente de uma página. Slug é só a parte identificadora dentro do permalink. Em https://meublog.com/guia-seo, o permalink é a URL inteira e o slug é 'guia-seo'. WordPress tradicionalmente chama a parte editável de &ldquo;permalink&rdquo; na interface, mas tecnicamente está se referindo ao slug. Os termos se sobrepõem na prática.

#slug#url#seo#permalink#wordpress#next.js#javascript#python#url amigável

Artigos relacionados