Rewrite cesty pro ASP.NET – SEO příklad z praxe
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í:
- 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“);
} - Je-li požadavek na jinou aspx stránku, neudělám nic a nechám ji zpracovat.
- 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
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.
Mohlo by vás také zajímat
-
AI na dosah ruky: Jak je to s AI v osobních zařízeních?
22. ledna 2024 -
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024