ASP.NET ile 301 yönlendirmesi

301 / 302 yönlendirmeleri ile ilgili bir yazı...

Web uygulamalarımızda, bir sayfadan bir başka sayfaya gitmek için sıklıkla Response.Redirect(..) metodunu kullanırız.

Response.Redirect(...) metodu aslında tarayıcıya Geçici Yönlendirme (HTTP 302 - Temporary Redirect) bilgisi göndermektedir. Böylece tarayıcımız, belirttiğimiz sayfadan akışa devam eder.

Response.Redirect("YeniSayfa.aspx");

Ancak bu durum arama motorları için özel bir anlam taşır. Crawler uygulamaları (Arama motorlarının web sitelerini indexlemeye yarayan uygulamaları), HTTP 302 yönlendirmesini gördüğü zaman kendi akışına yeni sayfadan devam etmez. Adı üstünde Geçici Yönlendirme, neden yeni sayfadan devam etsin ki :)

Peki bu durumda ne yapmamız gerekiyor. Yönlendirme esnasında tarayıcıya HTTP 302 değil, HTTP 301 bilgisini göndermemiz gerekli.

HTTP 301 yönlendirmesi ile tarayıcıya Kalıcı Olarak Taşındı (HTTP 301 - Moved Permanently) bilgisi gönderilir ve Crawlerlar, HTTP 301 mesajını görünce kendi akışlarına yeni sayfadan devam ederler. Bu sayede tüm web sitemiz indexlenebilecektir.

Ancak bu noktadaki sıkıntı, bu yönlendirmeyi direkt yapacak bir Response.???() metodunun olmayışı. (VS 2008 için söylüyorum)

Aşağıdaki kodlar aracılığıyla HTTP 301 - Moved Permanently yönlendirmesi yapılmaktadır.

Response.Status = "301 Moved Permanently";
Response.StatusCode = 301;
Response.RedirectLocation = "YeniSayfa.aspx";
Response.End();

VS 2010'da bu satırlar tek satıra indirgenmiş durumda:

Response.RedirectPermanent("YeniSayfa.aspx"); 

301 redirect

Hadi kardeş teknolojiler için de yönlendirme kodlarını yazayım:

ASP için;

Response.Status="301 Moved Permanently";
Response.AddHeader("Location","YeniAdres.asp");

PHP için;

Header( "HTTP/1.1 301 Moved Permanently" ); 
Header( "Location: yeni-adres.php" ); 

Diğer HTTP Statuc Codelarını görmek için buraya tıklayabilirsiniz.

Bir yönlendirme sonunda tarayıcıya gönderilen bilgiyi görmek için güzel bir adres: http://dalt.in/Wq3f2