URL Amigável para SEO: Como Criar Slugs que Ranqueiam
A URL é sinal de ranqueamento menor — mas pesa em CTR, compartilhamento e arquitetura de informação. Veja a estrutura ideal, regras de slug, hierarquia flat vs nested, padrões multi-idioma, geração programática e os 10 erros que matam SEO.
Por Vitor Morais
Fundador do MochaLabz ·
Gere slugs SEO-friendly em segundos
Remove acentos, espaços e caracteres especiais automaticamente — pronto para copiar.
Usar gerador de slug →A URL é um dos elementos mais visíveis do seu conteúdo: aparece na SERP, no compartilhamento, no autocomplete do navegador e na memória do usuário. Tecnicamente é sinal menor de ranqueamento, mas o impacto indireto em CTR, compartilhamento e arquitetura de informação é grande. Este guia cobre a estrutura ideal, as regras de slug em 2026, hierarquia flat vs nested, padrões multi-idioma e os erros mais comuns.
Anatomia de uma URL ideal
https://meusite.com/artigos/url-amigavel-seo/
│ │ │ │ │
│ │ │ │ └── trailing slash (opcional, mas padronize)
│ │ │ └────────────────── slug (descritivo, com keyword)
│ │ └──────────────────────────── seção / categoria
│ └──────────────────────────────────────── domínio
└──────────────────────────────────────────────── protocolo (https sempre)
❌ URL ruim:
https://meusite.com/?p=42&category_id=15
✅ URL boa:
https://meusite.com/artigos/url-amigavel-seoAs 8 regras de ouro para slugs em 2026
- Sempre minúsculas: /Sobre-Nós e /sobre-nos são URLs diferentes para bots.
- Hífen como separador: nunca underscore (_) ou espaço.
- Sem acentos: café → cafe, português → portugues.
- Sem stopwords desnecessárias: “como-criar-um-blog-de-seo” → “criar-blog-seo”.
- 3 a 5 palavras: idealmente 15–60 caracteres.
- Keyword principal próxima ao domínio: peso maior.
- Sem caracteres especiais: apenas a–z, 0–9 e hífen.
- Estável: escolha bem na primeira vez — mudar custa caro.
Hífen vs. underscore: o detalhe que importa
A diferença é técnica e definida pelo Google:
| Critério | Como o Google lê | Quando usar |
|---|---|---|
| Hífen ( - ) | Separador de palavras: "url-amigavel" = "url amigavel" | URLs (sempre) |
| Underscore ( _ ) | Conector: "url_amigavel" = "url_amigavel" (palavra única) | Variáveis de código (snake_case), não URLs |
| Espaço ( %20 ) | Tecnicamente válido, péssima UX | Nunca em URLs |
| Camel ou Pascal Case | Quebra padrão de minúsculas, vira URL diferente em alguns servers | Nunca em URLs |
Tamanho ideal: 60 caracteres no slug, ~75 totais
O Google trunca URLs com mais de ~60 caracteres no snippet da SERP. Para a URL completa (com domínio), o limite prático é entre 75 e 100 caracteres antes de virar visualmente poluída:
| Critério | Caracteres | Impacto |
|---|---|---|
| Slug 1 palavra (5–10 chars) | Muito curto, perde oportunidade de keyword | |
| Slug 3–5 palavras (20–50 chars) | ✅ Sweet spot ideal | |
| Slug 6–8 palavras (50–75 chars) | Aceitável; revise se há stopwords removíveis | |
| Slug 9+ palavras (75+ chars) | Poluído; truncado na SERP, baixo CTR | |
| URL com query string (?id=, ?p=) | Geralmente ruim — prefira slug semântico |
Geração programática de slugs
JavaScript / TypeScript
function toSlug(text: string): string {
return text
.toLowerCase()
.trim()
// Remove acentos via decomposição Unicode NFD
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, '')
// Substitui caracteres especiais por hífen
.replace(/[^a-z0-9]+/g, '-')
// Remove hífens nas pontas
.replace(/^-+|-+$/g, '');
}
toSlug("Como Criar URL Amigável para SEO")
// "como-criar-url-amigavel-para-seo"
toSlug("Café & Restaurante São Paulo!")
// "cafe-restaurante-sao-paulo"
toSlug("100% gratuito 🔥")
// "100-gratuito"
// Versão com remoção opcional de stopwords
const STOPWORDS = ['de', 'da', 'do', 'das', 'dos', 'para', 'com',
'um', 'uma', 'o', 'a', 'os', 'as', 'e', 'ou'];
function toSlugSEO(text: string, removeStopwords = true): string {
let slug = toSlug(text);
if (removeStopwords) {
slug = slug
.split('-')
.filter((w) => !STOPWORDS.includes(w))
.join('-');
}
return slug;
}
toSlugSEO("Como Criar URL Amigável para SEO")
// "como-criar-url-amigavel-seo" (removeu "para")Python
import re
import unicodedata
def to_slug(text: str) -> str:
# Normaliza Unicode (remove acentos)
text = unicodedata.normalize('NFD', text)
text = text.encode('ascii', 'ignore').decode('ascii')
# Minúsculas e troca não-alfanuméricos por hífen
text = re.sub(r'[^a-zA-Z0-9]+', '-', text.lower())
# Remove hífens nas pontas
return text.strip('-')
to_slug("Como Criar URL Amigável para SEO")
# "como-criar-url-amigavel-para-seo"
# Ou use a lib python-slugify (mais robusta):
# from slugify import slugify
# slugify("Café & Restaurante", lowercase=True)Estrutura: flat vs nested vs híbrida
Como organizar a hierarquia de URLs depende do tamanho e do tipo do site:
| Critério | Exemplo | Vantagens | Desvantagens |
|---|---|---|---|
| Flat (raiz direta) | /artigo-x | Flexibilidade, slug curto | Perde estrutura semântica em sites grandes |
| Nested (hierárquica) | /blog/seo/artigo-x | Estrutura clara, breadcrumb natural, herda autoridade | Difícil mover conteúdo (gera 301) |
| Híbrida (1 nível) | /artigos/slug, /produtos/slug | ✅ Sweet spot — estrutura sem rigidez | Categoria fixa por tipo |
| Subdomínio | blog.meusite.com/artigo | Separação total, SEO independente | Tratada como propriedade separada pelo Google |
Recomendação para a maioria dos sites
Estrutura híbrida com uma camada categórica: /artigos/slug, /produtos/slug, /categoria/slug. Dá estrutura suficiente para organização e flexibilidade para mover conteúdo dentro de cada categoria.
Trailing slash: padronize uma única forma
/artigo e /artigo/ são URLs diferentes para o Google. Ter as duas indexadas causa conteúdo duplicado. Escolha uma e configure 301 da outra:
// Next.js — força trailing slash em tudo
// next.config.js
module.exports = {
trailingSlash: true, // /artigo/ vira canônico
};
# Apache .htaccess — remover trailing slash
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
# Nginx — adicionar trailing slash
location ~ ^([^.]+[^/])$ {
return 301 $1/;
}URL em sites multi-idioma
Para conteúdo em múltiplos idiomas, o Google recomenda estruturas claras:
| Critério | Exemplo | Vantagens | Quando usar |
|---|---|---|---|
| Subdiretório | /pt/artigo, /en/article | ✅ Compartilha autoridade do domínio | Padrão recomendado pela maioria |
| Subdomínio | pt.site.com, en.site.com | Independência operacional | Quando equipes diferentes gerenciam |
| ccTLD | site.com.br, site.es | Sinal forte de geo-targeting | Para mercados muito específicos |
| Parâmetro | site.com/artigo?lang=pt | ❌ Evite | Não recomendado por dificultar indexação |
Sempre traduza o slug também
/pt/artigo e /en/article — não mantenha /en/artigo. Slug traduzido melhora CTR no idioma local e sinaliza ao Google que o conteúdo é realmente localizado, não só uma tradução automática.
hreflang: o complemento essencial em multi-idioma
<head>
<!-- Em /pt/artigo -->
<link rel="alternate" hreflang="pt" href="https://site.com/pt/artigo" />
<link rel="alternate" hreflang="en" href="https://site.com/en/article" />
<link rel="alternate" hreflang="es" href="https://site.com/es/articulo" />
<link rel="alternate" hreflang="x-default" href="https://site.com/en/article" />
</head>Os 10 erros que matam SEO via URL
Lista negra
- IDs dinâmicos no lugar de slug:
/artigo?id=42é ruim — prefira/artigo/titulo-descritivo. - Parâmetros de sessão na URL:
;sid=abc123cria infinitas URLs duplicadas. - Underscore em vez de hífen: Google trata como conector, não separador.
- Letras maiúsculas misturadas:
/Artigoe/artigoviram URLs diferentes. - Acentos e caracteres especiais:
/café-é-bomaparece como%C3%A9. - URLs muito longas: Google trunca na SERP, CTR despenca.
- Keyword stuffing no slug:
/seo-marketing-seo-otimizacao-seopode ser penalizado. - Mudar slug sem 301: backlinks externos quebram, autoridade some.
- Trailing slash inconsistente:
/xe/x/ambos indexados causa duplicação. - HTTPS misturado com HTTP: dois sites na prática, divide autoridade.
Boas práticas por tipo de site
Blog
✅ /artigos/url-amigavel-para-seo
✅ /blog/url-amigavel-para-seo
❌ /2026/04/19/post-id-12345
❌ /artigo/12345-url-amigavel-para-seoE-commerce
✅ /produtos/tenis-corrida-nike-pegasus
✅ /eletronicos/notebooks/dell-xps-13
❌ /products/45872
❌ /produto.php?id=45872&category=10SaaS / institucional
✅ /precos
✅ /recursos/automacao-vendas
✅ /clientes/case-empresa-x
❌ /page?id=12
❌ /index.php?route=pricingMudou o slug? Configure o redirect
Sempre que mudar uma URL existente, configure redirect 301 PERMANENTE. Sem isso, você perde backlinks externos e a autoridade acumulada na URL antiga. Veja o guia completo de redirect 301 vs 302 vs 307 vs 308 para SEO.
Checklist da URL ideal
- ✅ HTTPS sempre (sem HTTP misturado).
- ✅ Tudo em minúsculas.
- ✅ Hífen como separador (nunca underscore).
- ✅ Sem acentos nem caracteres especiais.
- ✅ 3–5 palavras no slug, 15–60 caracteres.
- ✅ Keyword principal próxima ao domínio.
- ✅ Stopwords removidas quando não prejudicam clareza.
- ✅ Estrutura híbrida:
/categoria/slug(uma camada). - ✅ Trailing slash padronizado (sempre com ou sempre sem).
- ✅ Sem IDs dinâmicos visíveis (?id=, ?p=).
- ✅ Multi-idioma com subdiretório (/pt/, /en/) + hreflang.
- ✅ 301 configurado se mudou slug existente.
- ✅ URL incluída no sitemap.xml.
Perguntas frequentes
URL é fator de ranqueamento no Google?+
Sim, mas é um sinal menor. O Google reconhece a presença de keywords na URL e usa para reforçar o tema da página, mas não é fator decisivo. Onde a URL realmente importa: CTR nas SERPs (URLs limpas geram mais cliques), compartilhamento (URLs feias afastam), arquitetura de informação (URLs hierárquicas ajudam o crawler) e usabilidade humana (lembrar e digitar).
Qual o tamanho ideal de uma URL para SEO?+
O Google trunca URLs com mais de ~60 caracteres na SERP. Para o slug em si, a recomendação é entre 3 e 5 palavras (15–60 caracteres). URLs até 75 caracteres totais funcionam bem; acima de 100 começam a parecer poluídas. URLs muito curtas (1 palavra) podem perder oportunidades de incluir keyword. O equilíbrio: descritivo o suficiente para indicar o conteúdo, curto o suficiente para caber na SERP.
Devo usar hífen ou underscore em URLs?+
Sempre hífen. O Google trata hífen (-) como separador de palavras ("url-amigavel" = "url amigavel"), enquanto underscore (_) é tratado como conector ("url_amigavel" vira uma palavra única para o algoritmo). Para SEO, hífen ganha. Underscore continua sendo padrão em variáveis de código, mas não em URLs.
Devo manter ou remover acentos em slugs?+
Remova. Apesar de URLs poderem tecnicamente conter caracteres Unicode (incluindo acentos via percent-encoding), na prática isso quebra em copy-paste, navegadores antigos exibem como %C3%A1, e ferramentas de analytics frequentemente decodificam errado. Padronize: café → cafe, português → portugues, são paulo → sao-paulo.
Devo incluir stopwords no slug?+
Em geral, não. Palavras como "de", "para", "com", "o", "a" agregam pouco e gastam caracteres preciosos. "como-criar-url-para-seo" → "criar-url-seo". Mas não corte stopwords se isso prejudica entendimento humano: "como-funciona-jwt" lê melhor que "funciona-jwt". Equilíbrio: brevidade sem sacrificar clareza.
URL com trailing slash (/) ou sem?+
Padronize uma das duas opções no site inteiro. /artigo e /artigo/ são URLs DIFERENTES para o Google e podem causar duplicação. Configure 301 da versão não-canônica para a canônica. Não há vantagem SEO entre as duas; o que importa é consistência. Em Next.js, controla via trailingSlash no config; em WordPress, no painel de Permalinks; em Apache/Nginx, via rewrite.
Posso mudar o slug de um artigo já publicado?+
Pode, mas com cuidado. Mudar slug quebra backlinks externos e perde a autoridade acumulada. Sempre configure redirect 301 da URL antiga para a nova (mantenha PARA SEMPRE). Re-submeta sitemap ao GSC. Em casos críticos, monitore a queda temporária de tráfego (~30 dias) até o índice se ajustar.
Estrutura flat (/artigo) ou hierárquica (/blog/seo/artigo)?+
Hierárquica é melhor para sites grandes com muito conteúdo (estrutura semântica clara, breadcrumb natural, herda autoridade da seção). Flat é melhor para sites pequenos e blogs simples (mais flexibilidade, menos quebra ao reorganizar). A híbrida é o sweet spot: /artigos/slug, /tools/slug — uma única camada categórica.
Continue lendo
Robots.txt: Allow, Disallow, User-agent e Wildcards Explicados
Guia completo das diretivas do robots.txt: Disallow, Allow, User-agent, Sitemap, Crawl-delay, wildcards, ancoragem e regras de precedência. Com exemplos prontos por CMS.
Crawl Budget: O que é e Como Otimizar para Indexar Mais Páginas
Crawl budget é o número de URLs que o Googlebot rastreia no seu site. Aprenda como funciona, quando se preocupar, os 7 maiores desperdiçadores e o checklist completo de otimização — com exemplos reais de robots.txt, canonical, sitemap e arquitetura.
Redirect 301 vs 302 vs 307 vs 308 para SEO: Guia Completo (2026)
Quando usar cada tipo de redirect HTTP, como afeta SEO e link equity, implementação em Next.js, Apache, Nginx, Vercel e Cloudflare, mapeamento em massa para migrações e auditoria de chains/loops.