Reklama

zonerbooks.cz | zoner.cz | czechia.com | regzone.cz | inshop.cz | inmail.cz | zonerpress.cz | zonerantivirus.com | zonerama.cz

interval.cz

Rewrite cesty pro ASP.NET - SEO příklad z praxe

12. 12. 2003 | David Bureš | ASP.NET | Komentáře: 0

Velikou výhodou .NET frameworku a jeho ASP.NET, oproti původním ASP, je možnost použít interní rewrite (přepis) URL cesty. Tato možnost přestala být doménou Apache serveru a my si v tomto článku ukážeme jak na to. Zadáte-li například cestu "/256-klicove-slovo.aspx", může být vnitřně přepsána na "/article.aspx?id=256". Pro klienta a nejen pro něj se cesta ukazuje ve své přehlednější a kratší formě...

Proč přepisovat

Použití přepisu je velice vhodné, zvláště chceme-li stránky optimalizovat pro vyhledávače, které nejsou zrovna šťastné z přemíry parametrů v odkazech a nemusí-li, pak takové stránky ani neindexují. Kolik parametrů v cestě vyhledávač ještě překousne nelze obecně stanovit, každý má jiné normy, které se navíc občas mění.

Při procházení logů weblogu WebSky.cz a následném ověřování přímo na vyhledávačích jsem si všiml, že všechny fráze, přes které se lidé z vyhledávačů na weblog dostávají, má především Google zaindexovány na hlavní stránce a již ne v jednotlivých článcích. Bylo na čase s tím něco udělat, protože každá chycená dušička se na webu hodí, stejně jako v politice.

Rozdíl mezi původními a novými adresami

Původní adresy měly následující tvary a byly:

pro jeden záznam
ShowEntry.aspx?day=[rrrrmmdd]&time=[hhmmss]
pro celý den
ShowEntry.aspx?day=[rrrrmmdd]
pro měsíční archiv
ShowAllEntries.aspx?date=[rrrrmm]

Rozhodl jsem se, že úpravu zahrnující vložení klíčových slov do URL provádět nebudu a že vyzkouším pouze jenoduchý přepis cesty. Jako cílový stav jsem si stanovil tento tvar URL:

pro jeden záznam
[rrrrmmdd]-[hhmmss]-spot.html
pro celý den
[rrrrmmdd]-day.html
pro měsíční archív
[rrrrmm]-month.html

Hrátky s řetězci a snaha necyklit se

V global.asax, konkrétně v jejím code behind global.asax.cs, si musíme odchytit přístup co nejdříve, ideálním kandidátem je Application_BeginRequest. Dále jsem stanovil tato pravidla zpracování:

  1. Je-li požadavek na stránku ShowEntry.aspx nebo ShowAllEntries.aspx, provedu přesměrování na nový tvar URL. Tento krok dělám proto, abych donutil vyhledávače trvale si těchto nových adres všímat. Přesměrování neprovedu, je-li v URL parametr, který mi říká, že jde již o vnitřně přesměrovanou cestu.

    if (path.ToLower().IndexOf("showentry.aspx")>0)
    {
       // cely den
       if (Request.QueryString["r"] == null && Request.QueryString["time"] == null)
          Response.Redirect("/"+Request.QueryString["day"]+"-day.html");
       // konkretni spot
       if (Request.QueryString["r"] == null)
          Response.Redirect("/"+Request.QueryString["day"] + "-"+Request.QueryString["time"] + "-spot.html");
    }
    if (path.ToLower().IndexOf("showallentries.aspx")>0)
    {
    // v pripade,ze je pozadavek na starou url,
    // podivame se zda jde o rewrite, pokud ne presmerujeme
    if (Request.QueryString["r"] == null)
    Response.Redirect("/"+Request.QueryString["date"]+"-month.html");
    }

  2. Je-li požadavek na jinou aspx stránku, neudělám nic a nechám ji zpracovat.
  3. Je-li požadavek na stránku s příponou .html, pomocí regulárních výrazů získám části URL, které potřebuji. Do odkazu přidám jeden parametr navíc (r=1), aby nedošlo k zacyklení, a provedu vnitřní přepis cesty.

    if (path.ToLower().IndexOf(".html")>0)
    {
       if (path.ToLower().IndexOf("-month.html")>0)
       {// archiv
          pattern = "(^)/([0-9]+)-[^/]+$";
          replacement = "$1/ShowAllEntries.aspx";
          replacementQS = "r=1&date=$2";
       }
       else if (path.ToLower().IndexOf("-day.html")>0)
       {// jeden den vsechny zaznamy
          pattern = "(^)/([0-9]+)[^/]+$";
          replacement = "$1/ShowEntry.aspx";
          replacementQS = "r=1&day=$2";
       }
       else if (path.ToLower().IndexOf("-spot.html")>0)
       {// jeden zaznam
          pattern = "(^)/([0-9]+)-([0-9]+)[^/]+$";
          replacement = "$1/ShowEntry.aspx";
          replacementQS = "r=1&day=$2&time=$3";
       }
       // ziskani QueryStringu
       qs = System.Text.RegularExpressions.Regex.Replace(path, pattern, replacementQS);
       // ziskani QueryStringu cesty
       path = System.Text.RegularExpressions.Regex.Replace(path, pattern, replacement);
       // prepis cesty
       System.Web.HttpContext.Current.RewritePath(path,"", qs);
    }

Vždyť zpracování HTML v ASP.NET nepojede

Jak jste si jistě všimli, používám pro soubory příponu .html. Aby takové soubory ASP.NET zpracovával stejně jako soubory se skripty, je nutné její zpracování zadat v administraci IIS serveru. Nad webovým sídlem pomocí kontextového menu vyvoláte Properties / Home Directory / Configuration. Zde si zkopírujete cestu třeba od přípony souboru .aspx - Edit a cestu, kterou potřebujete, najdete v políčku Executable. Další potřebnou hodnotou je obsah pole Verbs / Limit to. Podle tohoto vzoru vytvoříme nové zpracování (Add) pro přípony .html.

Malé shrnutí

  • Používejte krátké cesty, pokud možno bez parametrů, ASP.NET to zvládne a Google vás bude mít rád.
  • Nezahazujte staré adresy, musíte přesměrovávat, jinak přijdete o spoustu zpětných linků.
  • Regulární výrazy jsou mocným nástrojem pro hrátky s cestou.
  • Kód je zkoušen na MS frameworku 1.1

Kód není zřejmě dokonalý - je trochu vytržen z kontextu, kdy na původním serveru dochází ke zpracovávání více pravidel pro více domén. Pro ilustraci však, doufám, stačí. Při zařizování webu na "zelené louce" odpadne samozřejmě problém s přesměrováním ze starých adres.

Související články

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.


Reklama


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Diskuse (počet komentářů: 0)

Buďte prvním návštěvníkem, který přidá nový komentář.

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Zoner AntiVirus Free pro Android
zabezpečte si svůj smartphone, zdarma
Profesionální eshop Zoner inShop od 990 Kč.
Reklama
Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena, interval.cz dodržuje právní předpisy o ochraně osobních údajů. Powered by WordPress.