2011-08-02 20 views
5

Obecnie "Alias" w Sitecore wytworzy wiele tras do tego samego elementu treści, co może negatywnie wpłynąć na SEO w niektórych przypadkach.Jak sprawdzić, czy element Sitecore używa aliasu

Szukam sposobu, aby programowo sprawdzić, czy bieżąca strona/element/URL/żądanie używa aliasu, czy nie.

Miałem nadzieję, że będzie coś wzdłuż linii:

Sitecore.Web.WebUtil.IsAlias 

jakieś pomysły w jaki sposób sprawdzić, aliasy?

------- ------- UPDATE

Oto moje obecne rozwiązanie, które wydaje się działać dobrze ... Chyba że ktoś ma lepsze pomysły ?:

protected bool IsAlias 
{ 
    get 
    { 
     string fullPath = LinkManager.GetItemUrl(Sitecore.Context.Item); 
     return !HttpContext.Current.Request.RawUrl.StartsWith(fullPath, StringComparison.OrdinalIgnoreCase); 
    } 
} 

------ AKTUALIZACJA 2 ------

Oto działające rozwiązanie oparte na sugestiach Yana. Nie wierzę, Sitecore.Context.Database.Aliases.GetTargetUrl() działa od Sitecore 6.4.1. więc musiałem trochę improwizować.

if (Sitecore.Configuration.Settings.AliasesActive && 
    Sitecore.Context.Database.Aliases.Exists(HttpContext.Current.Request.RawUrl)) 
{ 
    const string format = "<link rel=\"canonical\" href=\"{0}://{1}{2}\"/>"; 
    Item targetItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Database.Aliases.GetTargetID(HttpContext.Current.Request.RawUrl)); 
    return String.Format(format, HttpProtocol, HttpContext.Current.Request.Url.Host, LinkManager.GetItemUrl(targetItem)); 
} 

Odpowiedz

4

W swojej sprawie polegałbym na Context.Database.Aliases.Exists(path). Warto również sprawdzić, czy aliasy są aktywne w pliku web.config: Sitecore.Configuration.Settings.AliasesActive.

+0

Dzięki, jest to o wiele lepsze rozwiązanie. Zaktualizowałem swój wpis nowym kodem. –

7

W przeszłości używaliśmy aliasu do ustawienia linku canonical url w nagłówku strony.
Na przykład, jeśli masz /food alias wskazujący na /news/food gdy idziesz do/jedzenie będzie można umieścić <link href="http://[websiteurl]/news/food" rel="canonical" /> w <head> strony.

EDIT:

Oto kolejny sposób

public class AliasResolver : Sitecore.Pipelines.HttpRequest.AliasResolver 
{ 
    public override void Process(HttpRequestArgs args) 
    { 
     base.Process(args); 

     if (Context.Item != null) 
     { 
      args.Context.Items["CanonicalUrl"] = Context.Item.GetFullUrl(args.Context.Request.Url); 
     } 
    } 
} 

Następnie w kontroli nagłówka wszystko, co musisz zrobić, to sprawdzić, czy HttpContext.Current.Items["CanonicalUrl"] jest ustawiona i wyświetlić go.

+0

Dzięki! Właśnie to robię, ale zaniedbałem włączenie tego w moje pytanie do zwięzłości. –

+0

Rozumiem. Zaktualizowałem moją odpowiedź w inny sposób :) – marto

+0

Dzięki za rozwiązanie. Jestem bardzo zainteresowany ograniczeniem ilości podróży w obie strony do Sitecore.Context.Database, więc to może działać lepiej. Dam mu wir. Dziękuję bardzo. –