Ana Sayfa » »
Tem
23
2013

Permalink (Kalıcı Bağlantı) Yapısındaki .html Uzantısını Sorunsuz Kaldırmak

WordPress bize çeşitli kalıcı bağlantı ayarları yardımıyla, yazılarımızın adreslerini istediğimiz gibi özelleştirmemize izin verir. Ben de bu ayarları kullanarak, yazıların adreslerinin sonuna .html uzantısını eklemiştim, ancak şimdi pişman oldum ve bu uzantıyı kaldırmak, WordPress'in standart yapısına dönmek istiyorum. Ancak arama motorları tarafından indekslenen yazılarım ne olacaktı?

Bu problemi gidermek için çeşitli yöntemler aradım, çeşitli eklentileri inceledim ancak ne yazık ki sorunuma çözüm olmadılar. Çünkü eklentilerin hemen hepsi, standart kalıcı bağlantı ayarlarına göre işlem yapıyordu, bizim bağlantı yapımıza uymuyordu.

Ben de çözüm olarak aşağıdaki fonksiyonu ürettim. Fonksiyonun yaptığı iş basit, eğer sitede bir 404 sayfa bulunamadı hatası ortaya çıktığında, fonksiyon sayfa adresi alıyor, içerisinde .html ifadesini arıyor eğer bu ifade varsa .html ifadesini / işaretiyle değiştiriyor. Böylece adres yazi-basligi.html yerine yazi-basligi/ halini alıyor. Ardından 301 kodlu header bilgisini yolluyor. Bu kod arama motorlarına bu içeriğin kalıcı olarak taşındığını söylüyor, yani bir süre sonra tüm indeksler yeni adrese göre yeniden düzenlenecektir.

Öncelikle sitenizin kalıcı bağlantı ayarlarını Yazı ismi olarak değiştirin ya da Özel yapıya /%postname%/ ifadesini yazın. Böylece yazı adresleriniz http://www.siteadi.com/yazi-basligi/ şeklinde oluşturulacaktır. html uzantısı ekli hali /%postname%.html şeklindeydi ve yazı adresleri http://www.siteadi.com/yazi-basligi.html olarak oluşturuluyordu. Aşağıdaki fonksiyon .html'yi silip, yerine / sembolünü koyacak ve adres http://www.siteadi.com/yazi-basligi/ haline dönecek. Aşağıdaki kodu temanızın functions.php dosyasına uygun şekilde eklerseniz, bu işlemi gerçekleştirmiş olursunuz.

//.html uzantısını kaldırır
function yakuphoca_sayfa_adresinial() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

function yakuphoca_permalink_moved_permanently() {
  if( is_404() ) {
    $slug = yakuphoca_sayfa_adresinial();
    if (strpos($slug, '.html') !== false) {
      $slug= str_replace('.html', '/', $slug);
	  header( "HTTP/1.1 301 Moved Permanently" );
	  header( "Location: $slug" );
	}
  }
}
add_action( 'template_redirect', 'yakuphoca_permalink_moved_permanently' );

Eğer kalıcı bağlantı ayarı olarak /%postname%/ yerine /%postname% kullanmak isterseniz yani adresin sonuna / karakteri konmasın isterseniz bu durumda
$slug= str_replace('.html', '/', $slug);
kodunu
$slug= str_replace('.html', '', $slug);
olarak değiştirin.

Sistemin çalıştığını
http://www.yakuphoca.com/permalink-kalici-baglanti-yapisindaki-html-uzantisini-sorunsuz-kaldirmak.html
adresini, tarayıcınızın adres satırına yapıştırıp, enter tuşuna basarak kontrol edebilirsiniz. Normalde 404 hatası almanız gerekirken, yeniden bu sayfaya yönlendirileceksiniz.

Bu yazımı beğendiyseniz, bu kategoride yer alan Yorumlardaki Varsayılan Gravatar Resmini Değiştirmek başlıklı avatar, functions.php ve gravatar konularında bilgi veren bir önceki yazımı da okumanızı tavsiye ederim.

Yazıya 7 Yorum Yapıldı+ Yorum Ekle

  • Ah be hocam hızır gibi yetiştiniz gerçekten :) ben aynen böyle yaptım ve o kadar araştırma yapmama rağmen bir türlü bulamamıştım :) çok teşekkürler :)

    • İşinize yaradığına sevindim.
      Ben de bir süredir bunu nasıl yapsam diye düşünüp, duruyordum. .htaccess kullanmayı düşündüm, işin içinden çıkamadım. Eklentileri araştırdım, onlar da işe yaramadı.
      Sonunda bir eklentinin kullandığı yöntem bana bir fikir verdi ve yazımdaki kodlar meydana çıktı.
      Umarım diğer paylaşımlarımı da inceler ve işlerinizde kullanırsınız.

      • sitenizi sürekli takipteyim ve yeni fikirler vermekte bana :)

  • Sitenizi yeni gördüm, buldum. WordPressle ilgilendiğimden aradığım şeyler de sitenizde bulunmakta, müsait olduğum vakit bu dediğinizi de yapacağım. Teşekkürler.

  • İki sorum var hocam.Kalıcı bağlantı ayarlarımda /index.php varsa kodlarda bir değişiklik gerektirir mi? Ayrıca .html uzantısından memnun kalmamanızın sebeplerini de söyler misiniz?

    • Aslında .html uzantısıyla da kalsam bir sakıncası olmayacaktı. Ama birkaç yerde okuduğum makalelerde (Türkçe ve İngilizce) adres içerisinde gereksiz uzantıların ya da bilgilerin olmasının bir anlamı olmadığı SEO'yu etkilemediği yönündeydi. Ayrıca eğer gerçek çok etkili bir şey olsaydı, WordPress geliştiricileri kalıcı bağlantı ayarlarına böyle bir seçenek de koyarlardı diye düşünüp, yazı adreslerimden artık gereksiz, anlamsız ifadeleri kaldırma kararı aldım. Hatta bir yazımda da bahsettiğim gibi yazı adreslerinden; ve, veya, icin, gibi, ya, da gibi ifadeleri de kaldırıyorum.
      Aslında google'ın yazı adreslerini çok da önemsediğini düşünmüyorum, yani ha ?p=15 olmuş ha /yazi-basligi/ şeklinde olmuş, farketmediğini düşünüyorum. Sonuçta google sayfaları botlarıyla tarıyor, adresin ne olduğunu değerlendirmeye aldığını düşünmüyorum. Ancak ben de modaya uyup, daha çok ziyaretçiler için anlamlı olsun diye bu kalıcı bağlantı ayarlarını kullanıyorum.

      • Düşündüklerinizde haklı olduğunuz yerler var tabi.Bilmeyenler için bir bilgi olsun. .html uzantısı 4 karakter içerir.Sitenizde 50 100 200 500 yazınız var diyelim düşünsenize içerik/kod oranınızı nasıl etkiliyorsunuz.Böyle düşününce evet dezavantajı var :)

Yorumunu Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık