Generar slugs en WordPress: sanitize_title, acentos y planificación bulk de URLs
WordPress slugifica silenciosamente cada título de post que guardas y ese slug pasa a formar parte del permalink. Los títulos con tildes dan resultados sorprendentes, y una vez publicado el slug es la URL que conoce el mundo. Planificar slugs antes de publicar es el arreglo barato.
sanitize_title es la función bajo el capó
Cada vez que guardas un post, WordPress pasa el título por sanitize_title() para derivar el slug por defecto. Esa función llama a remove_accents(), pone todo en minúsculas, reemplaza espacios con guiones y quita lo que no sea alfanumérico, guion o guion bajo.
$slug = sanitize_title( 'Cómo posicionar tu web en 2026: guía SEO' );
// "como-posicionar-tu-web-en-2026-guia-seo"
Si estás scripteando importaciones masivas o migraciones, esta es la función que tienes que llamar. No te montes tu propio slugifier en un plugin: sanitize_title es el comportamiento canónico que esperan todos los temas, plugins y herramientas SEO downstream.
La rareza con los acentos depende del locale
remove_accents() quita diacríticos para la mayoría de scripts latinos. Para scripts no latinos el comportamiento depende del locale activo. Una web en zh_CN deja los caracteres chinos originales en el slug. Una web en en_US corriendo en un hosting que re-codifica la URL puede percent-encodearlos, dejando tu slug limpio en algo tipo %E5%8C%97%E4%BA%AC.
Si sirves a un público internacional, el movimiento más seguro es fijar el slug tú mismo en el editor (el campo URL bajo el título) usando ASCII que controlas, en lugar de fiarte del auto-slug para títulos no latinos. Plugins como Yoast SEO destacan ese campo por algo.
Los slugs se quedan fijos. Planifica antes de publicar.
Una vez publicado el post, el slug está en tu sitemap, en el índice de Google y posiblemente en enlaces entrantes. Cambiarlo después significa montar un 301 o ver cómo sangra el SEO acumulado. WordPress puede hacer ese redirect vía wp_old_slug_redirect, pero solo si el slug viejo estuvo alguna vez atado al post; si lo cambias antes de publicar no tienes ese paracaídas.
El flujo pragmático:
1. Redacta el post. 2. Genera el slug a partir del título de trabajo con una herramienta determinista. 3. Pégalo en el campo de URL antes de pulsar publicar. 4. No lo vuelvas a tocar.
Hacer el paso 2 fuera del editor de WordPress te permite planificar slugs en lote sobre un calendario editorial en una hoja de cálculo, que es mucho más rápido que abrir 30 borradores.
WP-CLI para arreglos bulk
Si has heredado un sitio con slugs caóticos, WP-CLI es la herramienta para cirugía en lote:
wp post list --post_type=post --field=ID --post_status=publish |
while read ID; do
TITLE=$(wp post get $ID --field=post_title)
NEW=$(wp eval "echo sanitize_title('$TITLE');")
wp post update $ID --post_name="$NEW"
done
Haz backup antes, prueba en staging primero, y monta los redirects de slugs viejos a nuevos con un plugin tipo Redirection. El SEO se recupera; los enlaces entrantes rotos no.
Ejemplo completo
php<?php
// Helper para functions.php que sugiere un slug limpio al guardar
add_filter( 'name_save_pre', 'aldeacode_slugify_on_save' );
function aldeacode_slugify_on_save( $slug ) {
if ( empty( $slug ) ) {
$title = isset( $_POST['post_title'] ) ? wp_unslash( $_POST['post_title'] ) : '';
$slug = sanitize_title( $title );
}
return $slug;
}
// Uso directo en cualquier sitio de WP
$slug = sanitize_title( 'Neo-Brutalist Web Design: A Manifesto' );
// "neo-brutalist-web-design-a-manifesto" ¿Solo necesitas el resultado?
Cuando estás planificando un calendario editorial en una hoja de cálculo y quieres slugs limpios antes de redactar en WordPress, el generador de slugs en el navegador hace el mismo NFD-y-strip que sanitize_title, pero en lote. Pega una lista de títulos, copia de vuelta una lista de slugs, mete cada uno en el campo URL al publicar.
Abrir Generador de Slugs para URLs →Preguntas frecuentes
¿Por qué mi slug sale con caracteres raros tras un acento?
remove_accents maneja los diacríticos latinos comunes pero el locale importa. Fija el slug a mano en el campo URL bajo el título para títulos con tildes o no latinos, sobre todo antes de publicar.
¿WordPress redirige slugs antiguos automáticamente?
Sí si el post estuvo publicado con el slug viejo en algún momento. wp_old_slug_redirect intercepta peticiones y devuelve 301 a la URL nueva. Si cambias el slug antes del primer publish no hay historial y no hay redirect.
¿Pueden dos posts compartir el mismo slug?
No dentro del mismo post type. WordPress añade -2, -3 y demás para hacerlo único. Si quieres de verdad un slug limpio, cambia el slug del post existente primero o pásalo a la papelera.