Por qué importa esta comparación
Si migras entre CMS, tus URLs sobreviven solo si los dos sistemas coinciden en cómo convertir un título en un slug. Casi nunca lo hacen.
WordPress quita un carácter, Contentful quita otro, Ghost pone minúsculas distinto, Strapi trunca en una longitud distinta. El mismo post titulado “Cómo crear una API REST” cae en como-crear-una-api-rest en un sistema y en c-mo-crear-una-api-rest en otro. Las redirecciones que pones después de migrar cubren los casos obvios. Las diferencias de slug son las silenciosas que sangran tráfico.
Esta es la referencia de campo, ordenada por lo que cada sistema hace de verdad en 2026.
WordPress
WordPress quita acentos usando una función incorporada que mapea é a e, ñ a n, y así. Los espacios se vuelven guiones. Minúsculas. Las stop words como “el” y “la” se mantienen por defecto pero pueden quitarse con un plugin.
La trampa: & se vuelve la palabra literal “and” en algunos locales pero se quita silenciosamente en otros. Si tu título tiene un ampersand, el slug es impredecible entre packs de idioma. Para previsualizar lo que produciría WordPress antes de publicar, el generador de slugs para WordPress replica la misma rutina remove_accents en tu navegador.
Ghost
Ghost es el más agresivo limpiando. Quita acentos, pone minúsculas, sustituye espacios por guiones, quita la mayoría de signos, y trunca a 50 caracteres por defecto. El resultado es consistentemente corto y limpio.
La trampa: los slugs de Ghost incluyen sufijos numéricos para duplicados (mi-post, mi-post-2, mi-post-3). Si publicas un borrador y luego una versión completa con el mismo título, acabas con dos URLs y una de ellas es lastre. El generador de slugs para Ghost de AldeaCode refleja el truncado a 50 caracteres para que veas la URL antes de importar.
Contentful
Contentful no genera slugs. Los slugs son un tipo de campo que defines en el modelo, y los rellenas a mano o con una función personalizada en código. Hay una UI de generador de slugs pero es opt in.
La trampa: nada impide que tu equipo escriba un slug con espacios o acentos. Si usas Contentful, configura una validación en el campo slug. El default es “vale cualquier cosa” y eso casi nunca es lo que quieres.
Strapi
Strapi tiene un tipo de campo uid que genera slugs a partir de un campo objetivo. El slug se pone en minúsculas, se quitan los acentos, los espacios se vuelven guiones. El límite por defecto es 100 caracteres pero se puede cambiar.
La trampa: el slug se regenera cada vez que cambia el campo de origen, a menos que lo marques como bloqueado. Edita el título de un post publicado y la URL cambia silenciosamente.
Webflow
Webflow genera slugs automáticamente desde el título de la página. Quita acentos, minúsculas, guiones. El límite es 256 caracteres (el mismo que el límite del path en la mayoría de navegadores).
La trampa: Webflow no fuerza unicidad entre colecciones, solo dentro. Dos colecciones con el mismo slug pueden chocar si reorganizas el mapa del sitio.
Notion
Notion como CMS (vía herramientas como Super o Potion) usa el título de la página tal cual, codificado como componente de URL. Los espacios se vuelven %20, los acentos quedan como UTF-8 con percent escapes.
La trampa: este es el peor patrón para SEO. Los buscadores indexan la URL pero los lectores ven cadenas codificadas feas. Si usas Notion como CMS, pasa el título por un campo slug aparte que mantengas a mano.
Astro y Next.js (basados en archivos)
En frameworks basados en archivos, el slug es el nombre del archivo. mi-post.md se vuelve /blog/mi-post. No hay generación automática, eliges el nombre del archivo cuando creas el post.
La trampa: tienes que acordarte de seguir tu propia convención. Los editores de texto plano no fuerzan guiones, minúsculas ni quita-acentos. El generador de slugs de AldeaCode es útil aquí, pega el título, copia el slug, nombra el archivo en consecuencia.
Sanity
Sanity tiene un tipo de campo slug con una función custom. El default source.current deriva el slug del campo título con normalización sensata. Puedes anularlo con cualquier función que devuelva una cadena.
La trampa: el campo slug acepta cualquier cadena hasta que añades una validación custom. Sin validación, un editor puede escribir un slug con mayúsculas o acentos y Sanity no lo para.
Hashnode y Dev.to
Las dos auto generan slugs igual: quitan acentos, minúsculas, espacios por guiones, añaden una cadena aleatoria al final (mi-post-3a4b5c). El sufijo aleatorio evita choques en toda la plataforma.
La trampa: el sufijo aleatorio hace que tu slug parezca generado, no curado. Para una marca personal, es ligeramente molesto. Para un blog corporativo, es poco profesional. Las dos plataformas te dejan editar el slug después de publicar, hazlo.
Una rutina práctica de migración
Cuando migres de un CMS a otro:
- Exporta cada URL del sistema viejo.
- Pasa los títulos de origen por el generador del nuevo sistema.
- Compara las dos listas. Donde difieran, monta una redirección 301 de viejo a nuevo.
- Para cualquier URL que acabe más corta, más larga o reestructurada, redirige igualmente. El equity SEO pierde un 5 a 10 por ciento por redirección, pero pierde el 100 por ciento en un 404.
- Prueba 50 URLs aleatorias en el sitio en vivo después de migrar. Si dos dan 404, arréglalas todas.
El generador de slugs, el buscar y reemplazar para mapas de redirección en lote, y el contador de texto para comprobar conteos de líneas, todos corren en tu navegador. El comportamiento de los slugs es el tipo de detalle que nadie documenta hasta que muerde. Saber qué hace cada CMS desde el principio te ahorra la tarde que de otra forma pasarías explicándole a tu equipo por qué bajó su tráfico de búsqueda.