public string GetCanonical(PageDetails page) { // If canonical is explicitly set, use that if (!String.IsNullOrEmpty(page.Canonical)) { return(page.Canonical); } // otherwise generate canonical string generatedBaseUrl = System.Web.HttpContext.Current.Request.Url.Scheme + "://" + System.Web.HttpContext.Current.Request.Url.Authority + System.Web.HttpContext.Current.Request.ApplicationPath.TrimEnd('/') + "/"; // Fallback if site settings isn't in place string baseUrl = SettingsUtils.GetSiteBaseUrl() ?? generatedBaseUrl; // Use Permalink if it's available if (String.IsNullOrEmpty(page.Permalink)) { return(baseUrl + page.DisplayName + "/"); } var generatedUrl = NavigationUtils.GetGeneratedUrl(page); if (generatedUrl == "/home/") { generatedUrl = generatedUrl.Replace("/home/", "/"); } return(baseUrl.TrimEnd('/') + generatedUrl); }