Routing op basis van hash versus pad
Vergelijk hash-routing met geschiedenisrouting op basis van pushState
Routing op basis van hash versus pad is een gratis HTML Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject HTML Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus HTML Academy bevat in totaal 4 lessen.
Twee strategieën voor SPA-URL's
SPA's hebben URL's nodig die de browser niet opvraagt. Er zijn twee benaderingen: hashgebaseerd gebruikt het fragment, alles na #, dat de browser nooit naar de server stuurt, en padgebaseerd gebruikt het pad samen met trucs uit de History API.
Hashgebaseerde routering
URL's zien er bijvoorbeeld zo uit: https://example.com/#/about. De server ziet alleen / en levert voor elke URL dezelfde HTML. JavaScript aan de clientzijde leest location.hash om te bepalen welke weergave moet worden opgebouwd. Eenvoudig en zonder serverconfiguratie.
De gebeurtenis hashchange
Hashgebaseerde routers luisteren naar de gebeurtenis hashchange, die wordt geactiveerd telkens wanneer location.hash verandert. In combinatie met het lezen van window.location.hash is dit de volledige API die nodig is voor routering aan de clientzijde — de History API komt er niet aan te pas.
window.addEventListener("hashchange", () => {
const route = location.hash.slice(1) || "/";
renderPage(route);
});Padgebaseerde routering
URL's zien er bijvoorbeeld zo uit: https://example.com/about — ze zijn niet te onderscheiden van door de server weergegeven URL's. pushState uit de History API wijzigt het pad zonder opnieuw te laden; popstate wordt geactiveerd bij achteruit- en vooruitnavigatie; het onderscheppen van kliks maakt van <a> SPA-navigatie.
Serverconfiguratie vereist
Bij padgebaseerde routering moet de server de index.html van de SPA teruggeven voor elk pad dat een gebruiker rechtstreeks kan invoeren of vernieuwen. Anders geeft het vernieuwen van /about een 404. Configureer dit als volgt: probeer het bestand, en gebruik anders index.html, bijvoorbeeld met geschiedenis-terugval in Nginx of vite-plugin-history-api in Vite voor ontwikkeling.
# Nginx config
location / {
try_files $uri $uri/ /index.html;
}SEO en delen
Zoekmachines en veel hulpmiddelen kunnen hashfragmenten helemaal niet crawlen — inhoud op /#/about is onzichtbaar voor oude crawlers. Google verwerkt dit via headless rendering, maar andere crawlers mogelijk niet. Padgebaseerde URL's worden normaal gecrawld en zijn daardoor zonder meer beter voor SEO.
Perceptie van gebruikers
Hash-URL's zien er zichtbaar "vreemd" uit — gebruikers zien de # en vertrouwen de link mogelijk niet of vergeten de volledige URL te kopiëren. Pad-URL's zien eruit als elke andere web-URL, precies zoals gebruikers verwachten. Moderne SPA's kiezen daarom bijna altijd voor padgebaseerde routering.
Complexiteit van de implementatie
Hashgebaseerd: ongeveer 10 regels JavaScript, met een hashchange-listener en weergave. Padgebaseerd: aanroepen van pushState, een popstate-listener, het onderscheppen van kliks op links en terugval aan de serverzijde. Hashes zijn de lichtste mogelijke keuze; paden vereisen meer infrastructuur voor een betere gebruikerservaring.
Aandachtspunten bij statische hosting
Volledig statische hosts, zoals de standaardconfiguratie van GitHub Pages, kunnen geen terugval aan de serverzijde uitvoeren. Daardoor breekt padgebaseerde routering bij vernieuwen. Mogelijke oplossingen zijn omleidingen via trucs met 404.html, hosten op Netlify of Vercel, die SPA-terugval begrijpen, of hashgebaseerde routering accepteren voor projecten die uitsluitend op een statische host staan.
Hybride benaderingen
Sommige apps combineren beide: padgebaseerd voor de hoofdroute en hashes voor secties binnen een pagina, zoals modale vensters en tabbladankers. De gebeurtenis hashchange wordt hiervoor nog steeds geactiveerd en vormt een aanvulling op de router op basis van History voor status van subpagina's, zonder de hoofd-URL te vervuilen.
Migreren tussen beide
Om van hashes naar paden te migreren, herschrijf je alle interne links, voeg je terugval aan de serverzijde toe, vervang je de hashchange-logica door popstate en stuur je oude hash-URL's door naar de overeenkomstige pad-URL's met een klein opstartscript dat eenmaal wordt uitgevoerd en history.replaceState aanroept.
Criteria voor de keuze
Kies hashgebaseerd voor statische hosts zonder herschrijvingen, interne beheertools waarbij SEO niet belangrijk is en ingesloten widgets. Kies padgebaseerd voor alles wat gebruikers zien, alles wat in zoekmachines moet worden geïndexeerd en alles wat je op sociale media deelt — en dat geldt voor de meeste apps.
Kenniscontrole
Waarom vereist padgebaseerde SPA-routering serverconfiguratie die hashgebaseerde routering niet nodig heeft?
Samenvatting
Hashgebaseerde routering, met URL's zoals /#/about, heeft geen serverconfiguratie nodig, maar heeft zwakke SEO en gebruikt lelijke URL's. Padgebaseerde routering, met URL's zoals /about, heeft terugval naar index.html op de server nodig, maar levert duidelijke, SEO-vriendelijke URL's op die gemakkelijk te delen zijn. Moderne SPA's voor het publiek gebruiken padgebaseerde routering; projecten op een statische host of interne projecten kiezen soms nog voor hashes vanwege de eenvoud.
Leer HTML met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Routing op basis van hash versus pad” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad HTML Academy, waaronder “Routing op basis van hash versus pad”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus HTML Academy bevat in totaal 4 lessen.
Wat leer ik in “Routing op basis van hash versus pad”?
Vergelijk hash-routing met geschiedenisrouting op basis van pushState Je oefent met HTML Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met HTML Academy te beginnen?
Ervaring vooraf is niet nodig. HTML Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Routing op basis van hash versus pad”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over HTML Academy?
Ja. Elke les over HTML Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- pushState en replaceState
- Het popstate-event
- Routing op basis van hash versus pad
- De Navigation API in moderne browsers