The Hashbang URL Workaround
Early Single Page Applications used hash-based URLs (e.g. example.com/#/users/801) to navigate views. Because changes to the hash fragment do not trigger page reloads, JavaScript could intercept updates.
- ◆The Issue: Hashbang URLs are visually confusing, and search engines struggle to index them correctly.
- ◆The Solution: The HTML5 History API, allowing SPAs to use standard clean URL paths (e.g.
example.com/users/801).
SPA Routing Rule: Use the History API for clean user-facing paths. Configure the backend web server to route all sub-paths back to the primary HTML shell.
The History API Methods
The History API allows developers to mutate browser history records dynamically:
- ◆`history.pushState(state, title, url)`: Adds a new path record to the history timeline, changing the browser address bar without reloading.
- ◆`history.replaceState(state, title, url)`: Replaces the current history record.
- ◆`popstate` Event: Fired when the user clicks the browser back or forward button, allowing the routing script to update views.
Intercepting Navigation Clicks
javascriptcode
// Client-side click routing handler in JavaScript
document.addEventListener("click", function(event) {
if (event.target.tagName === "A" && event.target.classList.contains("spa-link")) {
event.preventDefault();
const url = event.target.getAttribute("href");
// Change browser URL without reload
history.pushState(null, null, url);
// Execute client-side router view update
appRouter.navigate(url);
}
});By configuring servers to fallback to index.html, web apps maintain clean URLs while preserving fast client transitions.
VP
Vijay Paliwal
Founder, SHIVAM ITCS · 18+ years enterprise & AI engineering
MCA · Ex-HiveGPT USA · Ex-Social27 Seattle