"Enter"a basıp içeriğe geçin

php htaccess ile seo uyumlu link yapmak

php htaccess ile seo yapmak

Merhabalar, php programlama diline yeni başlayan arkadaşlar acemiliklerini attıktan sonra artık web sitemi nasıl optimize edebilirim, ya da arama motorlarında üst sıralara nasıl çıkabilirim gibi konulara bakmaya başlarlar. Burada artık web dünyasında bir sektör haline gelen seo kavramının en önemli yanlarından biri olan seo linklerinden bahsedeceğim.

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

$id = $_GET["id"];
$query = $db->prepare("SELECT * FROM uyeler WHERE uye_id = :uye_id");
$query->execute(['uye_id' => $id]);

$users = $query->fetch(PDO::FETCH_ASSOC);

bu yapımızda verdiğimiz linklerde eğer seo çalışması yapılmamışsa uye.php?id=20 gibi bir link yapısı ile çalışacaktır. fakat biz verilerimizi daha anlaşılır bir link ile yapılandırmak istiyoruz.

bizim yapmak istediğimiz yapı şu şekilde: blog.davutabi.com/yeni-web-sayfamiz-yayinda

yapmamız gerekenler

  • yazılarımızın başlıklarını özel karakterlerden arındırarak link 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 linkine 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 fonksiyonu

function str_slug($str) {
  $bul = ['Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '+', '#'];
  $degistir = ['c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', 'plus', 'sharp'];

  $str = strtolower(str_replace($bul, $degistir, $str));
  $str = preg_replace("@[^A-Za-z0-9\-_\.\+]@i", ' ', $str);
  $str = trim(preg_replace('/\s+/', ' ', $str));
  $str = str_replace(' ', '-', $str);
  return $str;
}

// kullanımı

echo str_slug("Bu yazıdaki tüm türkçe karakterler düzeltilecektir.");

// çıktı: bu-yazidaki-tum-turkce-karakterler-duzeltilecektir

.htaccess yönlendirmesi

.htaccess dosyamızı açıyoruz, eğer yok ise php dosyalarının bulunduğu kök dizine yeni bir .htaccess dosyası oluşturuyoruz.

# yönlendirmeleri aktif eder
RewriteEngine on

# yeni bir yönlendirme kuralı ekliyoruz
RewriteRule ^([0-9a-zA-Z-_]+)$  uye.php?slug=$1 [L, QSA]

açıklamalar

  • uye.php = içerikleri slug’a göre aldığımız php dosyası.
  • slug = girilen değeri, ?slug= parametresine aktarır. örnek: blog.davutabi.com/merhaba-dunya => blog.davutabi.com/uye.php?slug=merhaba-dunya
  • ([0-9a-zA-Z-_]+) = slug parametresinin kabul ettiği değerler. eğer girilen parametre bu değerler dışındaysa kural kabul edilmeyecektir. bizim girdiğimiz değerler: a-z arası, A-Z arası, 0-9 arası ve -, _ karakterleri.
  • [L] (Last) = Bu tanımlanmadan önce ifade edilen kurallar bundan sonrakilere geçmemesini ve karışmamasını sağlar.
  • [QSA] (Query String Append) = GET metodu ile yönlendirme yaptığımızda yönlendirilen yere sonuna eklenen  GET parametrelerini de dahil eder.

linklerimizi yeniden oluşturalım

buraya kadar tamam, peki oluşturulan linkleri html’de nasıl göstereceksiniz?

bunun iki yöntemi var.

  1. verilerinizin bulunduğu tabloda slug adında bir sütun açın. veri kaydederken yazdığımız str_slug() fonksiyonunu kullanarak başlığın link yapısına uyumlu versiyonunu kaydedin.
  2. veritabanından çektiğimiz başlığı anlık olarak html sayfasında str_slug() fonksiyonu ile formatlayalım.

birinci örnek:

<?php
  // veritabanına kaydederken slug ile beraber kaydettiğimiz için tekrar str_slug() fonksiyonunu kullanmamıza gerek yok.

  $veri = [
    'baslik' => 'Merhaba Dünya',
    'slug' => 'merhaba-dunya'
  ];
?>
<a href="<?php echo $veri['slug'] ?>"><?php echo $veri['baslik'] ?></a>

ikinci örnek:

<?php
  // veritabanına kaydederken slug'ı kaydetmediğimiz için str_slug() fonksiyonunu şimdi kullanacağız.

  $veri = [
    'baslik' => 'Merhaba Dünya'
  ];
?>
<a href="<?php echo str_slug($veri['baslik']) ?>"><?php echo $veri['baslik'] ?></a>

örnek bir yazı başlığı ve çevrilmiş url yapısı: http://blog.davutabi.com/ne-yapacagim-ne-icin-yapacagim

diğer htaccess ayarları

.html ile biten link yapıları için rewriterule yazdığımız kısmın en sonuna .html yazmamız yeterli.

veriyi kategoriye göre getirmek için rewriterule kuralımıza bir parametre daha vermeliyiz.

RewriteRule ^([0-9a-zA-Z-_]+)/([0-9a-zA-Z-_]+)$  veriler.php?kat=$1&slug=$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> etiketleri arasına <base> etiketi ekleyin.

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

2. çözüm :  .htaccess yapılandırmasında rewriterule kuralınızdan hemen önce bu kodu ekleyin.

RewriteCond %{REQUEST_FILENAME} !-f

3. çözüm : htaccess şartlandırması yazılan klasörlere dokunmasın.

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

birden fazla rewriterule kuralınız varsa bazen çakışma yaşanabilir.

bunun için katmanlı bir yapı kullanabilirsiniz.

örnek:

sayfalar/iletisim-sayfasi
yazilar/gunun-yazisi

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çin seo’nun en önemli özellikleri bu özelliklerdir.

İlk Yorumu Siz Yapın

Bir cevap yazın

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