**Overview:** I'm using the following page template and scripts for navigation. I use a single page that loads menus and context content, and then use ajax or GET variable to load main-div's content, by passing $p variable to a php switch. Browser history is handled whith pushState function. **Main page:** <!DOCTYPE html> <html> <head> </head> <body> <div id="main-div"> <?php if (isset($_GET['p'])) { $p = $_GET['p']; } else { $p = "main"; } require_once("assets/switch.php"); ?> </div> <script> // Define state on first load function defineState() { "use strict"; window.history.replaceState("<?php echo $p ?>", "", ""); } window.onload = defineState; function navegacion(dashboard, history) { "use strict"; var urlPath = dashboard; var xmlhttp; var ActiveXObject; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState === 4 && xmlhttp.status === 200) { window.scrollTo(0, 0); //document.title = "TITLE"; document.getElementById("main-div").innerHTML = xmlhttp.responseText; if(history !== 1) { window.history.pushState(dashboard, "", "index.php?p="+urlPath); } } }; xmlhttp.open("POST","assets/ajaxapi.php", true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("dashboard="+dashboard); } // Allows for back and forward browswe buttons window.onpopstate = function(e){ "use strict"; if(e.state){ navegacion(e.state, 1); } }; </script> </body> </html> **ajaxapi.php:** <?php if (isset($_POST['dashboard'])) { $p = $_POST['dashboard']; } else { $p = NULL; } require_once("./switch.php"); Are there any issues ot how could this script be enhanced? Thanks.