/// <summary> /// Handle Canonical /// </summary> public static string SetupCanonicalUrl(SitePageData currentPage, HttpContext cont) { if (currentPage == null) { return string.Empty; } var externalUrl = currentPage.PageLink.GetExternalUrl(); //Is Simple URL: Check if (!string.IsNullOrEmpty(currentPage.ExternalURL) && String.Compare(currentPage.ExternalURL, cont.Request.Url.Segments.Last().Replace("/", ""), StringComparison.OrdinalIgnoreCase) == 0) { //If 404 page no canoncial otherwise canonical var baseType = currentPage.GetType().BaseType; if (baseType != null && (!string.IsNullOrEmpty(externalUrl) && baseType.Name != typeof(NotFoundPage).Name)) { return WriteCanonicalLink(externalUrl); } } else { //Set Canonical if SEO override is set. if (currentPage.SetUniqueCanoncial != null) { return WriteCanonicalLink(currentPage.SetUniqueCanoncial); } //Ordinary Canonical return WriteCanonicalLink(externalUrl); } return string.Empty; } private static string WriteCanonicalLink(String externalUrl) { HtmlLink canonicalLink = new HtmlLink(); canonicalLink.Attributes.Add("rel", "canonical"); canonicalLink.Href = externalUrl.TrimAndLower(); return canonicalLink.Href; }+
public static string GetExternalUrl(this PageData pageData) { var urlString = UrlResolver.Current.GetUrl(pageData.ContentLink, ((ILocalizable)pageData).Language.Name, new VirtualPathArguments { ForceCanonical = true }); if (string.IsNullOrEmpty(urlString)) { return urlString; } var uri = new Uri(urlString, UriKind.RelativeOrAbsolute); if (uri.IsAbsoluteUri) { return urlString; } if (!uri.IsAbsoluteUri) { var siteDefResolver = ServiceLocator.Current.GetInstance<ISiteDefinitionResolver>(); SiteDefinition siteDefinition = siteDefResolver.GetByContent( contentLink: pageData.ContentLink, fallbackToWildcard: true, fallbackToEmpty: true); return new Uri(siteDefinition.SiteUrl, uri).ToString(); } return urlString; }
No comments:
Post a Comment