Php ile Web Sitenize Seo Url Yapımı

İyi günler arkadaşlar php veya başka programlama dillerine yeni başlayan arkadaşlar üzerlerindeki acemilikleri attıktan sonra artık web sitemi nasıl optime edebilirim veya arama motorlarında üst sıralara çıkabilirim gibi konulara bakınmaya başlarlar.Burada artık web dünyasında bir sektör haline gelen seo kavramının en önemli yanı olan seo linkerinden bahsedeceğim ,

Normal bir php dosyasında istediğimiz içeriği bildiğiniz gibi id  ile alıp veritabanından bu ıd ye göre içerik çekeriz

$id = $_GET["id"];
$sorgu = mysql_query("SELECT * FROM veriler Where id='$id'");

Bu yapımızda verdiğimiz linklerde eğer bir seo calısması yapılmamışsa icerik.php?id=20 gibi bir url ile çalışacaktır.Fakat biz verilerimizi daha anlasılır bir url ile çekmek istiyoruz.

Örnek vermek gerekirse siteurl.com/yeni-web-sayfamiz-yayinda

Yapmamız Gerekenler

  • Yazılarımızın başlıklarını özel karakterlerden arındırarak url formatına uygun bir hale getirmek
  • .htaccess dosyamızda gerekli yönlendirmeleri yapmak
  • Yeni linklerimizi yeni seo yapımıza göre vermek

Öncelikle ilk adımımızı yani seo url ye dönüştürülecek fonksiyonumuzu yazıyoruz.Bunu sayfamızda çoğu yerde kullanacağımız için sitenizin heryerine çağrılan bir php dosyasına yazarsanız  istediğiniz zaman kullanabilirsiniz. Örn (config.php veya header.php)

Gerekli Seo Fonksiyonumuz

Benim kullandığım seo fonksiyonum bu benim işimi çoğu zaman gördü


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;
}

Bu fonksiyon türkçe karakterleri normal karakterlere , özel karakterleride url formatında çevirmektedir örnek vermek gerekirse


$baslik = "İsteğe Bağlı Asil Listede Yer Alan Öğrencilerimiz için Dilekçe Duyurusu";
echo seo($baslik);

// Çıktı : istege-bagli-asil-listede-yer-alan-ogrencilerimiz-icin-dilekce-duyurusu

İstediğimiz url yapısını olusturmayı başardık , şimdi sıra geldi yönlendirmeleri yapmaya
Php dosyamızda içeriği yine id ile çağıracağız tek yapmamız gereken htaccesde doğru yönlendirme yapmak

Htaccess Yönlendirmesi

.htacces dosyamızı açıyoruz yok ise yeni bir .htacces olusturuyoruz php dosyalarımızın olduğu dizine
Dosyamızın içine girdikten sonra

# Yönlendirmeleri aktif eder
RewriteEngine on

# Yeni bir yönlendirme kuralı ekliyoruz
RewriteRule ^([0-9a-zA-Z-_]+)/([0-9]+)$  posts.php?sef=$1&id=$2 [L,QSA]
Açıklamalar

posts.php = içerikleri id ye göre aldığımız php dosyamız
sef = seo link yapımızın geldiği ara değişken
id = posts.php de veri çektiğimiz id parametresi

([0-9a-zA-Z-_]+) = seo linkimiz bu kısma yerleşecek a-z arası 0-9 arası ve – karakterleri (sef)
([0-9]+) = post.php de kullandığımız id değeri buraya gelicek

[L] = url uyuştuğu an keser bunun anlamı şu örneğin siteurl.com/merhaba burada merhaba bizim url miz fakat [L] koymaz isek merhabaads gibi bir url yide aynı sayfaya yönlendirecek bazen hatalar olabilir o yüzden [L ] koyuoruz uyuştuğu an kesiyor devam ettirmiyor

[QSA] = Bu GET ile gösterilen verilerin aktif olmasını sağlar yani örnekte sef=$1&id=$2
Bazı configlerde koymaya gerek yokken bazı web server configlerinde koymayı gerektir biz öncelik olarak ekleyelim

Linklerimizi Yeniden Oluşturalım

Örnek olarak anasayfaya bir duyuru listesi çekeceksiniz mysql_query ve fetch kullanarak bir diziye aktardınız
Dizi adımız $veri olsun

Örnek link yapımız

  <a href="<?=seo($veri["yazi_baslik"]).'/'.$veri["yazi_id"]?>"> <?=$veri["yazi_baslik"]?> </a>

  // Örnek Çıktısı yazi-basligi/1
  // Örnek Çıktısı yazi-basligi/1

Örnek Bir Yazı başlığı ve çevrilmiş url yapısı :
Ekran Alıntısı

Diğer Htaccess Ayarları

.html ile biten url ler: rewriterule mizde sol kısımdaki $ dan önce .html koymamız yeterli

Kategoriye göre getirmek : rewriteruleye bir parametre daha vermelisiniz ,

RewriteRule ^([0-9a-zA-Z-_]+)/([0-9a-zA-Z-_]+)/([0-9]+)$  posts.php?kat=$1&sef=$2&id=$3 [L,QSA]

Farklı tablolardan farklı veriler için, Örneğin
haberler tablosundan , haberler/haber1/1
fotogaleri tablosundan , fotogaleri/fotohaber1/1

RewriteRule ^haberler/([0-9a-zA-Z-_]+)/([0-9]+)$ haber.php?sef=$1&id=$2 [L,QSA]
RewriteRule ^galeriler/([0-9a-zA-Z-_]+)/([0-9]+)$ galeri.php?sef=$1&id=$2 [L,QSA]

Olası Bozukluk ve Hatalar

En önemli sorunlardan biri sitenizin statik dosyalarının yönlendirmeden etkilenmesi (css,js,img gibi dosyalar)

1.Çözüm Sitenizin head tagları arasına base href ekleyin

<base href="siteurl.com/" />

2.Çözüm :  Htaccess yapılandırması Rewrite kuralızdan hemen önce bu kodu ekleyin

RewriteCond %{REQUEST_FILENAME} !-f

3.Çözüm : Htaccess şartlandırması belirli klasörlere dokunulmasın

RewriteCond $1 !^(css|js|images|inc|lang)

Birden fazla rewriteruleniz varsa bazen çakışma yaşanabilir bunun için katmanlı bir yapı kullanabilirsiniz
Örneğin :

sayfalar/iletisim-sayfasi/2
yazilar/gunun-yazisi/2

Son

Web sayfalarımızda seo sadece seo linklerle sağlanamayabilir.Ancak bu en önemli faktörlerden biridir.
Size önerim her içerik için dinamik meta description ve keyword getirmenizdir.Site içi seo’nun en önemli özellikleri bu özelliklerdir.

Php ile Web Sitenize Seo Url Yapımı” hakkında 45 yorum

  1. hocam benim anlamadığım şu şimdi mysql den farklı tablolardaki bilgileri çekebilmeyi anlayamadım şimdi karşılayan sayfaya tek tablo giriyorum ikinci tablodan verileri çekmeyi eklediğim zaman id ler karışıyor gelen linklere göre sayfalara yönlendirebiliyormuyuz

    1. Farklı tablolardan farklı veriler için, Örneğin
      haberler tablosundan , haberler/haber1/1
      fotogaleri tablosundan , fotogaleri/fotohaber1/1

      RewriteRule ^haberler/([0-9a-zA-Z-_]+)/([0-9]+)$ haber.php?sef=$1&id=$2 [L,QSA]
      RewriteRule ^galeriler/([0-9a-zA-Z-_]+)/([0-9]+)$ galeri.php?sef=$1&id=$2 [L,QSA]

      bu şekilde bir kategorize etmeniz lazım yoksa id ler dediğiniz gibi karışabilir

      1. Mustatafa Bey teşekkürler makaleniz için ama ben şunu anlayamadım:

        RewriteRule ^haberler/([0-9a-zA-Z-_]+)/([0-9]+)$ —> galeri.php?sef=$1&id=$2 [L,QSA] sayfasına değil de —->haber.php?sef=$1&id=$2 [L,QSA] sayfasına gideceğini nereden biliyor? Bunun mantığını bir türlü oturtamadım.

        Benim linklerim de şu şekilde, nasıl yazmalıyım link yapısını ve .htaccessi yardımcı olur musunuz?

      2. iyi akşamlar üste gösterdiğiniz örneği sayfama uyguladığımda kategori RewriteRule çalışıyor ama urun RewriteRule çalışmıyor ama sadece tek RewriteRule yaparsam kategori yada urun çalışıyor ve ben id ye göre değil seo url ye göre veri çekiyorum işin içinden çıkamadım yardımcı olursanız sevinirim

  2. Hocam Merhabalar,
    Sizin gösterdiğiniz gibi linkleri değiştirdim,
    ‘.$select[“name”].’

    aldığım sonuç
    test/araba/1

    olarak adres çubuğunda değişiklik oluyor fakat içerik gelmiyor.
    sizinde yazının başında belirttiğiniz
    $productselect = mysql_query(“select * from products where category_id = $id”);
    kısmına $id değerini nasıl getirebilirim veya bu kısma ne yazmam gerekiyor.

    1. Gökçen içerik seo url yapmadan önce örneğin yazi.php?id=5 yaparken geliyor muydu
      Bizim yaptığımız aslında sadece bu yapıyı seo url altına getirmek
      Php kodlarımızda değişiklik yapmaya gerek yok htaccess düzenleyip , seo fonksiyonuyla url leri kurmak tek yaptığımız

  3. Hocam merhabalar,
    Direk olarak konuya dalıcağım 🙂

    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/.]+)/?$ /?a=$1 [L,QSA]

    dosyam bu şekilde fakat dizinde img adında bir dosyam var ve benim başlığım img olduğu zaman localhost/img yazdığımda localhost/img/?a=img olarak geliyor ve link bozulur çözümü nedir acaba baya bir karışık yazdım :/ ben direk olarak img yazdığımda dosyayı değilde konuyu url adresinde göstersin istiyorum

  4. Mustafa Bey linklerim şu şekilde ve şu şekilde olmasını istiyorum. Yardımcı olur musunuz.

    -http://www.xinsaat.com/index.php — > -http://www.xinsaat.com

    -http://www.xinsaat.com/projeler.php —http://www.xinsaat.com/izmir_satilik_projeler

    -http://www.xinsaat.com/proje.php?kategori=51 ——>http://www.xinsaat.com/izmir_satilik_projeler_temelden

    -http://www.xinsaat.com/proje.php?kategori=53 —–> http://www.xinsaat.com/izmir_satilik_projeler_tamamlanan

    -http://www.xinsaat.com/projedetay.php?idno2=42
    ——>http://www.xinsaat.com/izmir_satilik_projeler_42

    1. Merhaba linkleriniz sadece bunlarsa herhangi bir dinamik yönlendirme yapmadan
      RewriteRule izmir_satilik_projeler_temelden proje.php?kategori=51 [L,QSA] ard arda ekleyebilirsiniz kuralın sol bölümü istenen url sağ bölümü yönlenecek url

  5. kolay kolay yorum yapmam ama Allah razı olsun sitenize bol hit gelsin zor zamanımda altın değerinde bir paylaşım olmuş. ne zaman sef url kullansam css img js lerımde hep bi hata oluyordu ama bunda sonra nasıl oldugunu öğrendım tekrardan elinize sağlık teşekkür ederim 😀

  6. Böyle bir makale paylaştığınız için çok teşekkür ederim. Çok nadir bir yerlere yorum yaparım ancak buna yorum yapmadan geçemedim. Çünkü seo yapmaya yeni başladım. ve sayenizde bunu başardım. Değerli paylaşımınız için teşekkür ederim..

  7. Konuyu güzel anlatmışsınız, benim bi sorunum var şöyle:

    RewriteRule ^([0-9a-zA-Z-_]+)(/?)$ index.php?do=$1 (bu sitenin tüm sayfaları için olsun istiyorum site.com/herhangi-bir-sayfa bunun gibi)
    RewriteRule ^([0-9a-zA-Z-_]+).html$ index.php?do=konu&link=$1 (bu ise konu olarak eklenenleri veritabanından aldığı linke göre site.com/konu-ismi olarak gelsin istiyorum)

    fakat konu sayfaları gelirken, herhangi bir sayfa uyguladığım gelmiyor, sanırım bi çakışma oluyor, bunu nasıl yapmalıyım.

  8. hocam ben türkçe ingilizce bir site yapacağım ancak seflink konusunda yaşadığım soruna bir türlü çözüm üretemedim. Yardımcı olabilirseniz sevinirim.

    alanadi.com/haberler satırı için
    RewriteRule ^([a-z]*)$ index.php?page=$1 [L,QSA]

    ingilizce site için adres satırım alanadi.com/en şeklinde olacak. ve ben /en değerini sayfa değişkeni olarak değil dil değişkeni olarak çekeceğim.
    bu durumda nasıl olacak? yani benim get ile gelen /en değişkenini dil değişkeni olarak çekmem gerekiyor. ama dil değeri olan en page değişkenine karşlık geliyor.
    Bu çakışmayı bir türlü çözemedim. Yardımcı olaursanız sevinirim.

  9. iyi günler htaccess dosyamda sıkıntım var kategori.php ve detay.php ikisinide tek yaparsam htaccess de çalışıyor sıkıntım yok fakat 2 tanesini aynı anda koyarsam yada daha fazlasını sadece en üstteki çalışıyor baya uğraştım ama çözemedim yardım ederseniz sevinirim.
    İyi çalışmalar

    1. Belirttigin 2 kodda da aynı kural var yani .html ile biten tüm istekler için ilk kategori.php ye sonra urun.php ye yönlendırmıssın aslında kurallar aynı o yüzden ilki calısacaktır
      Araya bi belirteç koyman gerekiyor örneğin

      RewriteRule ^kategori-(.*).html$ kategori.php?kategoriSeo=$1 [NC,L]
      RewriteRule ^(.*).html$ urun.php?seo_url=$1 [NC,L]

      Eğer hiç bir belirteç koymadan direk kullanmak istedign linki her yerde kullanmak istiyorsan
      x.com/halilar.html
      x.com/mutfak-halisi-80×80.html

      bir router yapısı kurman gerekiyor php de

  10. Merhaba,
    hocam php ile yaptığım bir admin panelim var ve sürekli bilgi ekleniyor buda sürekli otomatik yeni sayfa açıyor demek örneğin: index.php?page=islerimiz&id=2, index.php?page=islerimiz&id=3, index.php?page=islerimiz&id=4 121-122-123 diye gidiyor. Şuan elle htaccess den bu linklerin urllerini seo dostu yapabiliyorum hiç bi problem yok fakat benim kavrayamadığım nokta htaccess otomatik olarak yeni bir ürün link eklendiğinde onu nasıl seo dostu yapabilir açıklayabilirseniz çok sevinirim

  11. Hocam ellerinize sağlık. Anlatımınız sayesinde güzel bir seflink sistemi hazırladım. Ancak ufak bir sorunum var. Link sonuna slash (/) eklemezsem Not Found hatası alıyorum. Çözümü nedir acaba?

    1. Sorun çözüldü. Ancak başka bir şey sormak istiyorum. şimdi haber.php?id=$1&sef=$2 => haberler/23/haber-basligi şeklinde bir seflink yapım mevcut. Ancak haberleri ziyaretçiler tweetlerken link kısaltması yapmak için (twitterin karakter sayı sınırı sağolsun) site.com/haber.php?id=23 şeklinde yapmak istiyorum. Şimdi ziyaretçi bu linkle geldiğinde haber sayfasına ulaşıyor. Ama link tahmin edeceğiniz gibi şeflink olmuyor. Bunu çözme imkanı var mıdız? php yada .htaccess ile? benim teorim; haber.php en üstüne if içinde sayfa urlsinde .php varsa urlye göre bilgi çekip şeflink e yönlendirsin. ama bu da geç yüklenmeye sebep olur. sizin bir önerini var mı hocam?

  12. hocam öncelikle elinize sağlık gerçekten çok açıklayıcı bir yazı olmuş.
    anlamadığım bir konu var, şöyle bir link yapım var;
    ?page=proje_detay&kat_id=1&id=11
    ?page sayesinde tek sayfada header ve footerı çağırıyorum diğerlerinde sadece orta kısmı getirmem yeterli oluyor böyle bi yapılandırma olduğu için sanırım yapamadım.
    projelerden proje_detay a giden a href link yapımda şöyle;
    //

    buda htaccess kodum;
    RewriteRule ^([0-9a-zA-Z-_]+)/([0-9a-zA-Z-_]+)/([0-9]+)$ ?page=proje_detay&kat_id=$1&id=$2 [L,QSA]
    ama birşeyleri eksik yapıyorum bir türlü bulamadım

  13. Evet sanırım sorunu şuan çözdüm, fakat şuan o sayfada ki css image doslarım çalışmıyor sizin burada verdiğiniz 2. ve 3. çözümü denedim fakat bir işe yaramadı, 1.çözümde biraz uzun sanırım tüm linklendirmelere bunu uygulamak.

  14. Sayın admin ve arkadaşlar,
    Bayağı bir zamanımı aldı ama güzel bir çözüm buldum.

    RewriteRule ^([0-9a-zA-Z-_]+)/([0-9]+)$ posts.php?sef=$1&id=$2 [L,QSA]

    Bu bölümü direk

    RewriteRule ^([0-9a-zA-Z-_]+)-([0-9]+)$ posts.php?sef=$1&id=$2 [L,QSA]

    bu şekilde değiştirirseniz eğer her şey olması gerektiği gibi çalışmaya başlıyor.
    Bunu yapmadan önce sitemdeki .css dosyasını 1., 2. ve 3. çözümlerin hepsini uygulamama rağmen kullanamıyordum. çünkü sef cumlesinden sonra / karakteri olduğu için site sizin o dizinde çalıştığınızı varsayıyor. Zaten ben hepsiburada.com’daki seo dostu linkleri beğenip burdaki / karakterlerini de – ye çevirecektim. slash yerine tirenin daha profesyonel durduğunu düşünüyorum. hem de statik dosyaları bulamama sorununu böylelikle çzömüş oluyoruz.

    Bir taşla iki kuş, en sevdiğim 🙂

  15. Hocam güzel bir çalışma olmuş emeğinize sağlık. Rica etsem örnek çalışmadaki linkleri çalışır vaziyete getirebilirmisiniz. Php Url yapılandırması kafalara çok daha sağlam oturacak.

  16. $konu_baslik = trim($_POST[‘konu_baslik’]);

    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(‘/&amp;amp;amp;amp;amp;amp;amp;amp;.+?;/’, ”, $s);
    $s = preg_replace(‘/\s+/’, ‘-‘, $s);
    $s = preg_replace(‘|-+|’, ‘-‘, $s);
    $s = preg_replace(‘/#/’, ”, $s);
    $s = str_replace(‘.’, ”, $s);
    $s = trim($s, ‘-‘);
    return $s;
    }

    $s=seo($konu_baslik);

    ‘:url_seo’ => $s

    kesit olarak atıım hocam veritabanına hiç fonksion dan geçmemiş gibi gidiyor yardımcı olabilirmisiniz

  17. makaleniz çok kullanışlı teşekkürler. ancak makalenin sonunda belirttiğiniz statik dosyaların etkilenmesi durumunu yaşadım ve verdiğiniz yöntemleri uygulamama rağmen çözüm sağlayamadım. base url, htaccess yapılandırma ve şartlandırmayı yaptım ancak sayfada sanki css ve js dosyaları yokmuş gibi bir sonuç çıkartıyor. Farklı bir sıkıntı olma ihtimali var mı?

  18. Seo konusunda çok faydalı bir teknik olmuş ne zamandır bunu yapmayı araştırıyordum çok teşekkürler sizin sayenizde yapabildim gerçekten çok teşekkürler.

  19. Merhaba bn gamze googlede indexim çok iyi bagzı sitelerden referans link alıyorum bu referans linki direk googlede nasıl tanıtabilirim. Örnegin; http://www.seo.com/ref?142 gibi bu linki başlıgı ile googleye göndermek istiyorum. Siteme giriş yapmadan direk ref linkim ile karşı siteye gidecek. Bu indexi nasıl yaparım? Mail den cvp atarmısınız. gmzgurdal@gmail.com

  20. merhaba hocam ben sayfama bu kodu ekledim fakat siteadi/icerik seklinde geliyor ve sayfa bulunamadı hatası alıyorum. buna bir çözümünüz var mı ? teşekkürler

  21. link uzantılarının .html olsun istiyorum, yukarıda

    Diğer Htaccess Ayarları
    .html ile biten url ler: rewriterule mizde sol kısımdaki $ dan önce .html koymamız yeterli
    demişsiniz, bir örnek verebilir misiniz?

  22. hocam benim soruna bir el atar mısınız herşey tamam düzgün mesela haber-detay.php?id=5 diye girdiğimde açılıyo sayfa seo url yapınca test-haber-1-2 gibi oda düzgünce geliyo fakat açılan sayfada nesne mevcut değil hatası veriyo nasıl çözebilirim bunu

Bir Cevap Yazın

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