Generador de slugs
Convierte un título en un slug de URL, con transliteración de hebreo, árabe, cirílico y griego, la forma Unicode y detección de colisiones.
creme-brulee-grusse-aus-munchencrème-brûlée-grüße-aus-münchencr%C3%A8me-br%C3%BBl%C3%A9e-gr%C3%BC%C3%9Fe-aus-m%C3%BCnchenEl navegador muestra la forma legible de arriba y envía esta. Ambas son la misma ruta.
Qué hace esta herramienta
Pega un título en cualquier escritura y vuelve convertido en el slug que una URL puede llevar: minúsculas, sin puntuación, palabras unidas por el separador que elijas. Los acentos latinos se retiran, y el hebreo, el árabe, el cirílico y el griego se transliteran a letras latinas.
Junto al slug está el mismo título conservado en su propia escritura. Esa forma también es una ruta legal, y para las escrituras que más pierden en la transliteración suele ser la mejor respuesta, así que ambas se producen a partir de un título en lugar de que la herramienta elija por ti.
Para qué sirve un slug
Un slug es la parte legible de una URL: el trozo que sigue a la última barra y que nombra la página en vez de numerarla. Existe porque una ruta que se lee como palabras sobrevive a ser pegada en un mensaje, impresa en una diapositiva o leída en voz alta por teléfono, y un identificador numérico no hace ninguna de esas cosas.
Esa es también la razón de que su forma esté tan restringida. Un slug debe ser estable —cambiarlo rompe todos los enlaces que ya apuntan a la página— y debe ser inequívoco al escribirlo a mano, lo que descarta los espacios, las mayúsculas que un lector puede reproducir o no, y la puntuación que significa algo para un intérprete de órdenes o de Markdown.
Cómo se quitan los acentos
La mayoría de los diacríticos latinos los retira la plataforma y no una tabla. Unicode define é como descomponible en una e simple seguida de un acento agudo combinante, así que normalizar a esa forma descompuesta y descartar después cada marca combinante deja atrás la letra simple. La misma operación sirve para ñ, ç, ő y unos cuantos cientos más, y no puede quedarse anticuada, porque usa los datos Unicode que el navegador ya trae.
No sirve para todo, y conviene conocer el hueco. Una letra cuya marca es un trazo que atraviesa el glifo en lugar de un signo encima —ø, ł, đ, ħ, ŧ— es un único carácter indivisible sin descomposición alguna, así que retirar marcas la deja exactamente como estaba. Lo mismo ocurre con una ligadura: ß, æ y œ representan cada una una secuencia de sonidos, no una letra más un adorno. Todas ellas necesitan una grafía explícita, y sin ella desaparecerían sin más del slug.
Por qué el ajuste de idioma cambia la respuesta
No existe una única romanización correcta de ü. El alemán la escribe ue desde antes de que existiera la diéresis —los dos puntos empezaron siendo una pequeña e volada—, así que Müller es propiamente mueller, y a un lector alemán muller le parecerá mal. El francés, el español y el portugués tratan sus diacríticos como acentos sobre una letra que por lo demás es ella misma, así que crème brûlée es propiamente creme-brulee, y escribirlo cruemme no tendría sentido.
Las lenguas nórdicas discrepan entre sí de la misma manera. El danés y el noruego duplican la vocal, siguiendo la grafía antigua a la que la letra sustituyó; el sueco no:
- Alemán: ä pasa a ae, ö a oe, ü a ue, ß a ss. München es muenchen.
- Danés y noruego: æ pasa a ae, ø a oe, å a aa. Ålborg es aalborg.
- Sueco: ä pasa a a, ö a o, å a a. Ålborg es alborg.
- Genérico: se descarta toda marca y se conserva la letra base. Ålborg es alborg, München es munchen.
No son aproximaciones rivales a una sola respuesta; son cuatro respuestas correctas distintas a cuatro preguntas distintas. Solo una puede ser la predeterminada, así que el ajuste está a la vista y la herramienta dice qué convención produjo lo que estás mirando. Una letra es igual en todas partes: ß es una ligadura y no un acento, de modo que descartarla borraría un sonido, y aquí es ss en todos los ajustes.
Las escrituras que necesitan una tabla
Nada en el navegador romaniza el cirílico, el griego, el hebreo ni el árabe, así que cada uno es una tabla escrita a mano contra un estándar publicado. Dos de ellos salen bien, porque escriben sus vocales:
- El cirílico sigue BGN/PCGN, la romanización de los mapas y los pasaportes en inglés: ж es zh, ч es ch, щ es shch, х es kh. Москва queda en moskva y Чехов en chekhov.
- El griego sigue ELOT 743, incluidos los dígrafos que define: ου es ou y no oy, y ευ es ev. Αθήνα queda en athina y Ευρώπη en evropi.
ISO 9 es el otro estándar cirílico conocido y aquí no se usa a propósito. Es reversible, que es su razón de ser, pero lo consigue con diacríticos: ж es ž. Un slug no tiene sitio para un caron, así que se aplanaría de inmediato a z, y Жуков y Зуков acabarían siendo el mismo slug. El dígrafo de BGN sobrevive al aplanado.
Un detalle de la tabla cirílica es fácil de errar y merece decirse. ё y й parecen letras con acento, y Unicode las descompone así, pero la marca es lo que las convierte en letras distintas y no un adorno sobre la misma. Retirar las marcas antes de consultar la tabla —el orden correcto para todas las demás escrituras de aquí— convierte calladamente Ёлка en elka y Андрей en andrei.
El hebreo y el árabe, y lo que pierden
Ambas escrituras escriben consonantes y dejan la mayoría de las vocales a unos puntos que el texto corriente no lleva. No es un problema de codificación que esta herramienta pudiera resolver con una tabla mejor: la información no está en el texto. «מאמר» son cuatro letras, mem-álef-mem-resh, y la lectura maamar procede de un lector que ya conoce la palabra. Letra a letra solo puede ser mamr.
Lo que se puede hacer, se hace. Allí donde una letra funciona también como signo vocálico se aprovecha la posición, porque es la única señal que deja un texto sin puntos:
- ו e י son consonantes al principio de una palabra y letras vocálicas dentro de ella, que es lo que convierte שלום en shlom y no en shlvm.
- Una וו o una יי dobles son la consonante en ambos sitios: ese doblado es justamente como el hebreo distingue las dos lecturas.
- ב, כ y פ son oclusivas al principio de una palabra y fricativas dentro de ella. El daguesh que marca la diferencia es un signo vocálico, así que la posición es lo único que queda.
- Una letra seguida de guéresh es el sonido para el que el alfabeto no tiene letra: ג׳ es j, צ׳ es ch, ז׳ es zh. Ignorarlo convertiría ג׳אז en otra palabra.
- Las consonantes enfáticas árabes se funden con sus equivalentes simples, porque ASCII no tiene dónde poner el punto inferior que las distingue. صابر y سابر producen el mismo slug.
El resultado es legible y reconocible, y no es una grafía que nadie llamaría correcta. La herramienta lo dice en cada resultado hebreo o árabe en lugar de presentar una respuesta con pérdidas como si estuviera acabada, y señala la forma de abajo, que no pierde nada en absoluto.
La ruta Unicode, que no necesita transliteración
La ruta de una URL no se limita a ASCII. El RFC 3987 define el IRI —un identificador que puede contener cualquier carácter Unicode— y la regla para ponerlo en el cable es codificar los bytes UTF-8 como escapes de porcentaje. Todo navegador lleva dos décadas haciéndolo, y por eso Wikipedia sirve sus títulos hebreos y rusos bajo su propio nombre y la barra de direcciones los muestra legibles.
Así que la segunda salida de aquí es el título con la puntuación y los espacios limpios y nada más tocado, y la tercera es lo que eso parece de verdad en el cable. Son la misma ruta: la legible es lo que muestra el navegador y lo que copia una persona, y la codificada es lo que registra el servidor.
Cuál usar es una decisión de verdad y no un trámite. La forma Unicode no pierde nada, se lee correctamente para quien hable el idioma y es lo que mostrará un buscador. La forma transliterada sobrevive a pegarse en sitios que estropean las codificaciones, encaja en sistemas que dan por hechas las rutas ASCII y se puede leer en voz alta por teléfono. Para el hebreo y el árabe en particular la forma Unicode suele ser la mejor respuesta, precisamente porque la transliteración no puede recuperar las vocales.
Colisiones, y por qué no se resuelven por ti
Hacer un slug quita la puntuación, así que los títulos que solo se diferencian en la puntuación dejan de diferenciarse. «Nuestra guía de CSS» y «Nuestra guía de CSS!» son dos entradas y un solo slug. En modo lista cada choque así se marca con la línea con la que colisiona, porque este es el fallo que un gestor de contenidos esconde: añade un sufijo en silencio, publica, y la URL que esperabas pertenece a la otra entrada.
El sufijo está disponible como interruptor y produce el estilo de WordPress y Django —nuestra-guia-de-css, nuestra-guia-de-css-2— para el caso de que una lista vaya a pegarse en algún sitio tal cual está. Viene apagado porque una colisión suele ser un problema de contenido y no de nombres, y la colisión sigue marcada aunque el interruptor esté encendido, de modo que encenderlo no esconde nada.
La longitud, y cortar en el sitio correcto
Un límite de longitud corta en un borde de separador, nunca dentro de una palabra. Truncar a media palabra no produce tanto un slug más corto como uno distinto —introduction-to-crypt no es un introduction-to-cryptography más pulido— y media palabra es una palabra que significa otra cosa. Si una sola palabra supera el límite no hay borde por el que cortar, y se devuelve entera en lugar de partida.
No hay un límite universalmente correcto. Los buscadores muestran más o menos los primeros sesenta o setenta caracteres de una URL, y algunos sistemas antiguos limitan un segmento de ruta, pero nada se rompe en una cifra concreta. Dejar el campo vacío deja el slug tan largo como el título necesite.
Preguntas frecuentes
- ¿Qué caracteres son seguros en el slug de una URL?
- Letras ASCII minúsculas, dígitos y un único separador funcionarán en todas partes sin excepción. El guion es el separador convencional; el guion bajo funciona igual pero cuesta más verlo bajo un enlace subrayado. Los espacios, las mayúsculas y la puntuación son todos codificables en teoría y todos dan problemas en la práctica, así que un slug los elimina.
- ¿Guion o guion bajo?
- Guion, por dos razones que sobreviven a las modas. Es lo que usan todas las plataformas grandes, así que es lo que esperan los lectores y las demás herramientas, y desaparece bajo el subrayado que llevan casi todos los enlaces, cosa que el guion bajo no hace. La elección se ofrece aquí porque los sistemas existentes tienen convenciones existentes, y la coherencia dentro de un mismo sitio importa más que cualquiera de las dos respuestas.
- ¿Por qué mi título en hebreo o en árabe pierde las vocales?
- Porque nunca se escribieron. Ambas escrituras marcan la mayoría de las vocales con puntos que el texto corriente omite, así que una lectura letra a letra es todo lo que cualquier herramienta puede producir sin un motor de vocalización que adivine qué palabra se quiso decir. Esta translitera lo que hay realmente, lo indica en el resultado y ofrece la forma de ruta Unicode, que conserva el título tal como se escribió.
- ¿Puede una URL contener hebreo, árabe o chino directamente?
- Sí. Una ruta puede llevar cualquier carácter Unicode; se codifica en porcentajes como UTF-8 en el cable y el navegador la muestra legible. Así es como Wikipedia sirve títulos de artículo en todos los idiomas que cubre. Esta herramienta muestra tanto la forma legible como la codificada, ya que la segunda es la que aparece en los registros del servidor y en la analítica.
- ¿Por qué Müller es unas veces mueller y otras muller?
- Porque ambos son correctos, en idiomas distintos. El alemán escribe la diéresis por extenso —los dos puntos nacieron como una pequeña e volada— mientras que el francés y el español tratan sus diacríticos como marcas sobre una letra que por lo demás es ella misma. El ajuste de idioma escoge una convención, y la herramienta te dice cuál aplicó.
- ¿Por qué dos de mis títulos producen el mismo slug?
- Porque hacer un slug elimina la puntuación y las mayúsculas, que a menudo es lo único que separa dos títulos. El modo lista marca cada colisión con la línea con la que choca. Puedes activar el sufijo -2 al estilo de WordPress, pero antes conviene responder a la pregunta de fondo: si dos entradas deberían llevar de verdad casi el mismo nombre.
- ¿Se envía a un servidor algo de lo que escribo?
- No. Todas las transformaciones se ejecutan en tu navegador; nada se sube ni se registra, y funciona sin conexión de red.