De slug is de leesbare staart van een webadres — de my-first-post in example.com/blog/my-first-post. Het is het gedeelte dat een persoon kan lezen voordat hij beslist of hij klikt, en het deel dat een zoekmachine leest als een korte beschrijving van wat de pagina bevat, en daarom verdient het meer aandacht dan een database-id of een datum. Deze gratis generator maakt van elke tekst een slug: plak een titel in "Tekst om te converteren", druk op "Genereren", en het resultaat verschijnt met een kopieerknop ernaast. De standaardinstellingen zijn de keuzes die de meeste websites willen — kleine letters, streepjes tussen woorden, veelvoorkomende stopwoorden weggelaten, niet-Latijnse letters getranslitereerd — dus een bruikbare slug is slechts één klik verwijderd, en elk van deze beslissingen is een optie die je kunt wijzigen.
Alles gebeurt op je eigen apparaat. De pagina laadt een kleine JavaScript-engine en draait deze lokaal: je titels worden nooit geüpload, nooit gelogd, en de tool blijft werken, zelfs als de verbinding is verbroken. Dat is ook de reden waarom het resultaat wordt bijgewerkt op het moment dat je een instelling wijzigt. De volgorde van het werk is het vermelden waard, omdat het de output voorspelbaar maakt: een geplakte link wordt eerst teruggebracht tot zijn laatste padsegment, vervolgens wordt de tekst omgezet in kleine letters, dan worden stopwoorden weggelaten, daarna worden niet-Latijnse tekens getranslitereerd, dan worden cijfers en speciale tekens verwijderd als je daarom vroeg, vervolgens wordt wat overblijft samengevoegd met je scheidingsteken, dan wordt het resultaat ingekort tot de maximale lengte, en ten slotte krijgt een duplicaat een numeriek achtervoegsel. "Tekst om te converteren" accepteert tot 500.000 tekens tegelijk, wat neerkomt op enkele duizenden artikeltitels.
Eén regel erin, één slug eruit. Plak een hele lijst met titels en elke regel wordt zijn eigen genummerde slug, met de oorspronkelijke titel erboven in het grijs, zodat je in een batch van vijftig nog steeds kunt zien welke slug bij welke kop hoort. Een lijst die al in een bestand staat, hoeft niet via het klembord te reizen: "Laden uit bestand", de knop naast het invoerveld, opent een gewoon tekstbestand — .txt, .csv, .md, .json en dergelijke — en plaatst de inhoud direct in het veld. Je browser leest dat bestand precies op de manier waarop hij leest wat je typt, en het wordt nergens naartoe geüpload. "Invoer splitsen op" beslist hoe de lijst in stukken wordt gesneden. "Automatisch" is de standaard: een nieuwe regel scheidt altijd items, terwijl een komma ze alleen scheidt wanneer de invoer een enkele regel is waarvan de delen er allemaal uitzien als op zichzelf staande waarden — dus "prijs 3,5 EUR" en "Hoofdstuk 5: resultaten, conclusies" blijven heel in plaats van in fragmenten te versplinteren. "Nieuwe regel", "Komma" en "Spatie" forceren de keuze wanneer je de vorm van je data al kent. "Uitvoerformaat" bepaalt hoe een batch wordt teruggegeven wanneer je deze kopieert — één per regel, gescheiden door spaties, of gescheiden door komma's — en zowel "Alles kopiëren" als "Opslaan als bestand" volgen deze keuze. "Geschiedenis" bewaart je laatste 10 batches in je eigen browser, zodat een lijst die je een uur geleden hebt geconverteerd er nog steeds is.
Niet-Latijnse tekst is het onderdeel dat de meeste sluggeneratoren ongeveer goed krijgen en weinigen precies goed. Een URL is het veiligst in platte ASCII, dus Cyrillische, Griekse, Arabische, Chinese en Europese letters met accenten moeten worden geconverteerd, en de enige echte vraag is volgens wiens regel. Deze pagina beantwoordt dat in twee lagen. De algemene laag dekt elk schrift: een transliteratiebibliotheek met een verstandig ASCII-antwoord voor bijna elk teken dat je kunt typen, wat is wat "Translitereren vanuit" betekent wanneer er "Automatisch (elke taal)" staat. De specifieke laag is een reeks handgebouwde tabellen voor de talen waar het generieke antwoord niet is wat het land daadwerkelijk gebruikt; welke talen er vandaag een hebben, staat in het menu "Translitereren vanuit", en deze set groeit naarmate de tool talen bereikt die er een nodig hebben. Als je er een kiest, wordt de bijbehorende tabel geladen in een bewerkbaar raster onder "Transliteratieregels", waar elke letter een tekstveld is dat je kunt wijzigen, en "Regels herstellen" zet het weer terug naar de standaard. De Oekraïense tabel volgt Resolutie No. 55 van 2010 van het Kabinet van Ministers, de norm die op Oekraïense paspoorten is gedrukt, inclusief de details die makkelijk over het hoofd worden gezien: зг wordt zgh in plaats van zh zodat het te onderscheiden blijft van ж; є, ї, й, ю en я nemen de ene vorm aan aan het begin van een woord en een andere in het midden; en de apostrof en het zachte teken vallen weg zonder een nieuw woord te beginnen, dus Знам'янка wordt znamianka en niet znamyanka. Voor Duits is de standaard de uitgebreide variant ä → ae, ö → oe, ü → ue die Duitse adressen feitelijk gebruiken, met een eenvoudige ä → a variant als je die verkiest.
"Stopwoorden verwijderen" staat standaard aan. Het laat de kleine verbindingswoorden — de, het, een, en, van, voor — weg die een slug langer maken zonder er betekenis aan toe te voegen. De lijst onder "Stopwoorden" is volledig aanpasbaar en is al ingevuld: een Engelse lijst plus een lijst voor de taal van de pagina waar je op zit, dus de Nederlandse pagina kent de, het, een en op. Voeg je eigen woorden toe, verwijder de woorden die je wilt behouden, of schakel de functie helemaal uit, waarna het veld grijs wordt in plaats van te doen alsof het er nog toe doet. Twee eerlijke opmerkingen hierover. Het weglaten van stopwoorden is een kleine overwinning voor de netheid, geen hendel voor betere zoekresultaten — je krijgt een korter, opgeruimder adres, geen hogere positie. En als elk woord in een titel toevallig in de lijst staat, is het eerlijke resultaat helemaal niets, dus dat vertelt de tool je dan in plaats van je een leeg vakje te geven.
De rest van de schakelaars bepaalt de vorm. "Scheidingsteken in de slug" kiest wat er tussen de woorden staat, en de standaardinstelling met het streepje is geen kwestie van smaak: Google leest een streepje als een woordscheidingsteken en een liggend streepje als een verbinder, dus my_first_post bereikt een crawler als één lang woord terwijl my-first-post als drie woorden aankomt. "Liggend streepje (_)" is er voor de systemen die erop staan. "Kleine letters" staat aan omdat de meeste servers adressen als hoofdlettergevoelig behandelen, en een mix van hoofd- en kleine letters is een makkelijke manier om te eindigen met twee URL's voor één pagina. "Speciale tekens verwijderen" haalt alles weg wat geen letter, cijfer, spatie, streepje of liggend streepje is, wat inhoudt dat leestekens, aanhalingstekens en emoji's buiten een adres worden gehouden — emoji's worden specifiek vóór de transliteratie verwijderd zodat een raket niet het woord rocket wordt. "Cijfers verwijderen" staat uit, omdat een cijfer in een titel meestal onderdeel uitmaakt van die titel. "Max. lengte" loopt van 10 tot 200 en is standaard 80; wanneer een slug langer is dan dat, knipt de engine veilig af bij het laatste hele woord dat past in plaats van er halverwege één door te knippen. Het getal naast elk resultaat is de lengte in tekens, en dat wordt rood voorbij de 60 — geen harde limiet, maar het punt waarop een slug afgebroken begint te worden in de zoekresultaten en onhandig wordt om in een bericht te plakken.
Er zijn nog twee extra schakelaars omdat ze een massale conversie terugbrengen naar een taak van één klik. "Slugs uniek maken" pakt het scenario aan waarbij twee verschillende titels tot dezelfde slug leiden — "Top 10 tips" en "Top-10 tips" worden allebei top-10-tips — en geeft de tweede een -2, de derde een -3, waarbij eerst de basis wordt verkort als het achtervoegsel deze over de maximale lengte zou duwen. Twee pagina's op één adres is een probleem dat veel goedkoper in deze lijst kan worden opgelost dan in je CMS. "Slug uit een geplakte URL halen" werkt de andere kant op: plak een volledige link en de tool pakt het laatste deel van het pad, verwijdert de querystring en eventuele .html of .php-eindes, en decodeert procentcodering, zodat een Wikipedia-link die eindigt in %D0%9B%D1%8C%D0%B2%D1%96%D0%B2 terugkomt als lviv in plaats van een reeks hexadecimale cijfers. Dit werkt alleen wanneer de volledige regel een link is, dus een URL geciteerd binnen een zin wordt gelaten waar hij is.
Waarom deze sluggenerator kiezen?
- Alleen in de browser: je titels worden nooit geüpload en de pagina werkt offline
- Bulkconversie vanuit klembord of een tekstbestand, met de brontitel boven elke slug
- Echte transliteratiestandaarden per taal, niet zomaar één generieke tabel voor alles
- Oekraïens volgens Resolutie nr. 55 van 2010 — de spelling gebruikt in paspoorten
- Elke regel bewerkbaar letter voor letter, met een reset met één klik
- Automatische -2 en -3 achtervoegsels zodat nooit twee slugs in een batch botsen
- Plak een link en haal de slug eruit, met procentcodering gedecodeerd
- Een aanpasbare stopwoordenlijst die al is ingevuld voor je eigen taal
- Veilig afkappen bij een heel woord, met een tekenteller naast elk resultaat
- Gratis en onbeperkt: geen registratie, geen quota, niets bewaard op onze servers
Slugs zijn overal nodig waar een pagina een leesbaar adres moet hebben. Een blog of nieuwssite maakt van elke kop een slug, wat de voornaamste reden is waarom deze tool zo is vormgegeven: plak de koppen van de week, krijg de URL's van de week. Een online winkel doet hetzelfde voor product- en categorienamen, meestal in bulk na een import, en vaak in een taal waarvan het alfabet niet in het adres past. Documentatie en kennisbanken bouwen ankers en bestandsnamen op dezelfde manier. Buiten webadressen om is dezelfde schone string wat je wilt voor een bestandsnaam die niet breekt op een ander besturingssysteem, een databasesleutel die een persoon in een logboek kan lezen, de naam van een branch, de naam van een afbeelding in een mediabibliotheek, of de identificatie van een sectie in een static site generator. Elke plek waar een menselijk leesbare naam moet overleven om in een machinaal leesbaar veld te worden gezet, is een plek waar een slug thuishoort.
Het is de moeite waard om een paar beperkingen te kennen voordat je erop vertrouwt. Dit is een generator, geen validator: hij zal niet controleren of een slug al op je site in gebruik is, omdat hij geen idee heeft wat je site bevat — de uniekheid die het garandeert geldt alleen binnen de batch die voor je ligt. Redirects zijn ook jouw verantwoordelijkheid; het wijzigen van de slug van een gepubliceerde pagina verbreekt zijn oude adres, en dat is een beslissing voor je CMS in plaats van voor deze tool. "Opslaan als bestand" schrijft platte tekst, geen CSV of JSON. De automatische splitsing maakt een inschatting over komma's die in bijna elk geval klopt, maar niet in allemaal, wat precies de reden is waarom je dat kunt overrulen met "Invoer splitsen op". En transliteratie is meer een afspraak dan een vertaling — München wordt muenchen, niet Munich — dus als een pagina al een gevestigde naam heeft in de doeltaal, is die naam altijd een betere slug dan een automatische conversie van het origineel.