WordPress’te kalıcı bağlantı değişimi ve bunun SEO’ya etkisi

Yakın zamanda sitedeki kalıcı bağlantı yapısı değişti. Önceleri performans gereği /%post_id%-%postname%/ şeklinde olan yapıyı, WordPress​’in performans geliştirmelerinden dolayı sadece /%postname%/’e çevirdim; ki böylesi SEO (arama motoru optimizasyonu) açısından daha iyi oldu. Ertesi gün fark ettim ki aldığım 404 hataları artmış. Kalıcı bağlantı değişiminde WordPress’in aynı yazı bağlantısı değişimi gibi yönlendirme yapacağını sanıyordum ama bunu doğrulamamak hataydı. Hızlı bir şekilde, herhangi bir eklentiye ihtiyaç duymadan yönlendirmeyi yaptım. Aslında oldukça kolay olan bu yönlendirme SEO için hayati bir önem taşıyor. Eğer aynı şekilde siz de “post_id-postname”den “postname”e geçecekseniz aşağıdaki kod satırından URL’i değiştirmeniz yeterli. Yönlendirme için kullandığım regex bu:

RedirectMatch 301 ^/(\d+)-([^/]+)/$ http://codersgrave.com/$2

Regex’in anlamı şu: / ile başlayıp rakamla yani (\d+) devam eden, sonrasında - işareti ile ayrılıp sonrasında / ile biten herhangi bir yazı yani ([^/]+) ile başlayan URL’leri http://codersgrave.com/$2 adresine yönlendir. Yönlendirilecek adresteki $2, ilk regex‘in “-” işeretinden sonraki kısma yani yazı alanına denk geliyor. Karışık geldiyse Yoast’ın yönlendirme kodu üreten sayfasını kullanabilirsiniz: Yönlendirme oluşturma. Coders’ Grave için kullanıldığım alanlar aşağıdaki gibidir:

Coders' Grave 301 Yönlendirmesi Oluşan yönlendirme kodunu ana klasördeki .htaccess dosyasına eklediğinizde artık yönlendirme işleminiz hazır olacaktır. Ancak uygulamadan önce öncelikle .htaccess’in yedeğini almalı ve kodu herhangi bir regex tester‘da test etmenizde fayda var. Yoksa değişiklikten sonra siteniz hiç açılmayabilir. regular expression 101‘de, oluşan expression‘ın sonucu aşağıdaki gibidir. / karakteri regex‘de illegal olduğu için testte bunların öncesine \ kaçış karakteri ekledim.

Coders' Grave yönlendirmesi regex testi

Kalıcı bağlantı değişimi çok dikkatli alınması gereken bir karar. Bu değişikliği yapmadan önce iyice düşünmeli, kesin kararınızı vermeli ve değişikliği yaptıktan sonra buna bağlı kalmalısınız. Her ne kadar arama motorlarına bu sayfaların tamamen taşındığını 301 yönlendirmesi ile belirtsek bile bu işlemi sürekli yaptığınız takdirde arama motorlarının hoşuna gitmeyecek, sitenizin değerini düşürecektir. Bunun yanı sıra, çoğu site, hatta hemen hemen hepsi Facebook, Twitter, Google Plus gibi sosyal medya sitelerinin eklentilerini kullanıyor. Bu eklentilerdeki sayfa beğeni/paylaşım sayısı tamamen sayfa bağlantısı ile ilişkili. Bağlantıyı değiştirdiğinizde bu ilişkiyi kaybedip eklentilerin sayfanızı yeni bir sayfaymış gibi görmesini sağlayacak ve değerleri sıfırlayacaktır.

Güncelleme (14.02.2013)

Yukarıda bahsettiğim sosyal medya paylaşım sayısı kaybedilmesi sorununa Dave Ward bu yazısında güzel bir çözüm bulmuş.  Buradaki mantığa göre değişikliği yaptığınız tarihten önce paylaşılmış yazılar eski linkleri ile kalıp yeniler ise yeni formatlı bağlantılarıyla paylaşılıyor. Coders’ Grave’de kullanılan eski format “​/111-sitenizi-hizlandirin​/” şeklinde olduğu için makaledeki örneği buna göre düzenledim.

<?php

// Bağlantı yapısı 1/1/2015 tarihinde değiştirildi. 
// Bu kod bloku eski yazıların eski bağlantılarını kullanmasını 
// sağlayarak sosyal medya paylaşım sayısının korunmasını sağlıyor.
$url_change_date = strtotime("1/1/2015");
$post_date       = strtotime(get_the_date("n/j/Y"));
$sharing_url     = get_permalink();
$postid          = get_the_ID();

if ($post_date < $url_change_date) {
  $url_id_prefix = "/" . $postid . "-";
  $sharing_url   = str_replace("codersgrave.com/", "codersgrave.com" . $url_id_prefix, $sharing_url);
  $sharing_url;
}

// $sharing_url'i sosyal medya eklentilerinin URL ya da href
// alanlarına ekleyerek paylaşımların sayısı korunmuş oluyor.

?>

Yine de uzun vadede bu pek de mantıklı bir düzenleme gibi görünmüyor. Çünkü bu kod bloku ile eski yazılarınız hep eski bağlantıları ile paylaşılacak ve bu bağlantılarla siteye gelindiğinde yeni bağlantıya yönlendirme yapılacak. Bu durumda sitedeki yönlendirmeleri sitenin ömrü boyunca tutmak zorunda kalıp eski formatta yeni bir bağlantı oluşturamayacaksınız. Buradaki örneğe göre eski bağlantıları korursam asla şu şekilde bir bağlantı oluşturamam: “2015-seo-cozumleri”. Bu sebeple yeni bağlantılara bağlı kalıp eskilerden tamamen vazgeçmeye karar verdim. Eğer paylaşım sayılarınız çok yüksekse yukarıdaki çözümü de kullanmak isteyebilirsiniz. Bu karar siteden siteye farklılık gösterebilir.

  • ahmet

    merhabalar hocam genel olarak her yerde eski yazıları yönlendirme şeklinde aynı açıklama varken siz çok harika bir konuya değinmişsiniz teşekkürler, Şimdi hocam buradan anladığım kadarıyla 1/1/2015 tarihinde kalıcı bağlantıları değiştirdiğimizde eski yazılarımızın link yapısı bu kod sayesinde hiç etkilenmeden, sadece bu tarihten sonra girdiğimiz yazılarımızdaki bağlantı şekli ayarladığımız şekilde olacak.
    Hocam benim sitemde kalıcı bağlantı sitecom/%postname%.html şeklinde ben şuan sitecom/%postname%-%post_id%.html şeklinde yapmak istiyorum bu kodda ne değişiklik yapmam ve nereye uygulamam gerekli, yardımcı olursanız sevinirim iyi çalışmalar.

    • Sevil Yılmaz

      İstediğini değişiklik ne yazık ki basit bir .htaccess yönlendirilmesiyle sağlanamaz. Çünkü diğer bağlantı tiplerinde regex ile “digit” kontrolü yapılıp bunlar bağlatıdan kaldırılıyordu. Sizin durumunuzda ise “post_id”nin bilinmesi gerekiyor. Böyle olunca da bunun WordPress içinde, bir eklenti yardımıyla çözmek gerekiyor. Bu adreste sizin durumunuza benzer bir durum Simple 301 Redirects eklentisiyle çözülmüş.

      Yapmanız gereken “Request” alanına /%postname%.html ve “Desitination” alanına da /%postname%-%post_id%.html yazıp kaydetmek.

      localhost’da denediğimde bir sonuç alamadım ama bu tamamen localhost’tan kaynaklı olabilir. Denemenizde fayda var.

      • ahmet

        ilginiz için teşekkürler, hocam benim genel olarak istediğim yönlendirme değil, kalıcı bağlantıları değiştirdiğim zamandan önceki yazıların hiçbirinin linklerinin değişmemesi, yani sadece yeni yazıların linkleri değiştirdiğim (/%postname%-%post_id%.html) şekilde olsun istiyorum eski yazılar hiç bir şekilde etkilenmeden olduğu tarzda kalsın ( /%postname%.html) şeklinde , Ben 2.14.2013 güncellemesinde belirttiğiniz koddan bu şekilde olacağını düşündüm yanlış anlamadıysam.

  • Sevil Yılmaz

    @ahmet
    O kod bloku sayfaya basılan URL’in değişmesini sağlıyor. Sayfa yönlendirmesi yapmıyor. Eğer istediğin bu ise yapman gereken yukarıdaki koddaki alanları şu şekilde değiştirmek:
    $url_id_prefix = "-" . $postid;
    $sharing_url = str_replace("", $url_id_prefix, $sharing_url);

    • ahmet

      Teşekkürler hocam iyi çalışmalar…