PHP .htaccess ile SEO dostu url yapımı
Burhan
SEO
01.10.2014
30956

   İnternette SEO dostu url ile ilgi bir sürü kaynak var fakat açıklamaları yeterli düzeyde olmadığı için kodlar çalışmamakta.

   Öncelikle SEO dostu url demek, web sayfası için tanımlayıcı bilgiler içeren url lerdir. Örneğin: site.com/sayfadetay.php?id=5 yerine site.com/sayfadetay/5/seo-dostu-url-yapimi.html gibi bilgiler içeren url lerdir.
  

ÖNEMLİ: Eğer bu konuda bilgili değilseniz .htaccess dosyanızın bir yedeğini mutlaka alınız.Yoksa web siteniz çalışmaz.

   PHP sayfalarımızı site.com/sayfadetay.php?id=5 şeklinde $_GET[id] methodu ile çalışaçakmışız gibi kodlayacağız. SEO dostu url mizin okunmasını .htaccess ile sağlayacağız.

   SEO dostu url yaparken dikkat edilmesi gerekenler.

  • .htaccess dosyası ile php dosyalarımız aynı klasör içinde olması gerekmekte
  • web sayfasına eklediğiniz resim ve CSS dosyalarının çalışması için oluşturduğumuz PHP sayfalarının tamamına taginden önce PHP tagleri arasında $base tanımlaması yapılması gerekmekte
    $base = http//:www.site.com/PHPdosyalari; echo $base;
    bu kodu eklemezseniz resimleriniz web sayfasında görüntülenmez
  • 404 The page cannot be found gibi hata saylalarıda yapmak isterseniz hata sayfalarınızında aynı dizin içinde bulunması gerekmekte
  • dikkat etmemiz gerken diğer bir konu ise türkçe karakter problemi url mizi Türkçe karakterlerden temizlememiz gerekmektedir, uygun bir kod yapısı oluşturusak Tükçe karakter içeren bir seo dostu url de PHP ye oluşturtabiliriz. url lerdeki Türkçe karakterleri temizleyeceğimiz kod aşağıda

   Örnek bir .htaccess dosyası verecek olursak

Options +FollowSymLinks
RewriteEngine On
RewriteBase /PHPdosyalari
 
ErrorDocument 401 /KlasorAdi/401.php
ErrorDocument 403 /KlasorAdi/403.php
ErrorDocument 404 /KlasorAdi/404.php
ErrorDocument 500 /KlasorAdi/500.php
 
RewriteRule ^sayfa/([0-9]+)/([a-zA-Z0-9]+)/$ sayfadetay.php?id=$1 [NC,QSA,L]	
#sayfa ile başlayan linke tıkladığımızda yapılacak işlemleri ifade ediyor /$1/$2/  karşılık değerleri bu değerler likimiz dorultusunda çoğaltılabilir
RewriteRule ^urun/([0-9]+)/([a-zA-Z0-9]+)/$ urundetay.php?id=$1 [NC,QSA,L]
RewriteRule ^kategori/([0-9]+)/$ kategori.php?id=$1 [NC,QSA,L]

 

Yazdığımız kodları açıklarsak:

RewriteEngine On: Bu komut ile url yönlendirmesini aktif hale getiriyoruz.
RewriteBase :  Bu komut ile yönlendirmemizin etkili olacağı klasörü belirliyoruz.
Örneğin sitemiz www.site.com/PHPdosyalari şeklinde bir dizinde ise kod yapımız RewriteBase /PHPdosyalari şeklinde olacaktır.
RewriteRule :  Bu komut yönlendirmeyi gerçekleştirecek komutumuzdur. Hangi adresin hangi adrese yönleneceğini bu komut ile belirlenir.
# : Yorum satırı.

.htacces dosyamızı düzenleken kullanacağımız düzeli ifadelerimizden de bahsedelim:

  • (^) oluşturduğumuz SEO dostu url  başlangıç noktasını belirtir
  • ($) oluşturduğumuz SEO dostu url  bitiş noktasını belirtir
  • ([a-zA-Z0-9]+) iki / işareti arasında sadece ingilizce olarak rakam ve string karakterlerin geleceğini belirtiyor
  • ([0-9]+) iki / işareti arasına bir veya birden fazla rakamların gelebileceğini belirtiyor

Parantez içlerinde kullanılan NC, L ve R harflerinin anlamları:

  • L: Last
    Bu tanımlanmadan önce ifade edilen kurallar bundan sonrakilere geçmemesini ve karışmamasını sağlar.
  • R: Redirect
    Bu değer kullanılırsa browserda adres değişir, kullanılmazsa yönlendirme arkaplanda yapılır fakat kullanıcının girdiği URL aynı kalır.
  • NC: No Case
    Büyük küçük harfe duyarsız davranır.
  • QSA: Query String Append
    GET metodu ile yönlendirme yaptığımızda yönlendirilen yere sonuna eklenen  GET parametrelerini de dahil eder.

   Diğer tüm ifadeler için buraya bakabilirsiniz.

   Bütün bu fonksiyonlar için linklerimizi oluşturalım

# sayfa için link
link 1

# urun için link
link 2

# kategori için link
link 3

burada dikkat etmemiz gereken nokta sayfa, urun, kategori adıyla klasör oluşturmadık burada yaptığımız htaccess dosyamızdabirden fazla url olacağı için bu url leri ayırma işlemi yaptık ^ işareti ile bu ayırımı sağladık. 

url lerdeki türkçe karakterleri temizleme için yazdığımız fonksiyonumuz

function SEO($s) {
 $tr = array('ş','Ş','ı','I','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç','(',')','/',':',',');
 $eng = array('s','s','i','i','i','g','g','u','u','o','o','c','c','','','-','-','');
 $s = str_replace($tr,$eng,$s);
 $s = strtolower($s);
 $s = preg_replace('/&.+?;/', '', $s);
 $s = preg_replace('/s+/', '-', $s);
 $s = preg_replace('|-+|', '-', $s);
 $s = preg_replace('/#/', '', $s);
 $s = str_replace('.', '', $s);
 $s = trim($s, '-');
 return $s;
}

.htaccess ile daha başka neler yapabiliriz buradan bakabilrisiniz.

Yorum Yaz / Yazılan Yorumlar
[100.25.43.188]
[Yorumlarda Görünmez!]
Yorumlarınız kontrol edildikten sonra yayınlanmaktadır.
Adı Soyadı
: Ali Hıdır [18.05.2017 00:02:34]
Yorum [1]
: Allah razı olsun hocam senden yaa $base yüzünden saatlerce uğraşıyordum.
Adı Soyadı
: sercan [07.04.2017 00:21:13]
Yorum [2]
: hayat kurtaran bilgiler (:
Adı Soyadı
: murat demirci [02.04.2016 22:23:49]
Yorum [3]
: iyi akşamlar dersinizi inceledim fakat uygulamada şöyle bir sıkıntım oldu sadece kategori yada detay sayfasını yaptığımda sıkıntım yok fakat aynı anda htaccess dosyasına yazdığımda 2. kısım çalışmıyor sebebi ne olabilir yardımcı
© 2002 - 2019 | Her Hakkı Saklıdır | Herşey Özgürlük için