PHP ile Dinamik Site Haritası Oluşturma

Sitemizi arama motorları belli aralıklarla tarar ve yeni eklenen içerikleri indexler. Veya siz bir site haritası oluşturursunuz ve bunu arama motoruna gösterirsiniz. bu sayede bir web tasarımcısı arama motorlarını, bir web sitesindeki taranacak URL'ler hakkında bilgilendirebilir. Bunun için xml formatında bir site haritası oluşturmanız gerekmektedir. Ama burada bir sorun karşımıza çıkıyor. Sitemizin içeriği dinamik olduğu yani belli aralıklarla değiştiği için her seferinde manuel olarak yeni bir xml dosyası oluşturmamız gerekir. Her şeyin otomasyona bağlandığı bir sitede böyle bir işlem gerçekleştirmek son derece yanlış olur. Bunun yerine dinamik yani site içindeki veriler güncellendikçe kendisi de güncellenen bir site haritası oluşturmamız daha mantıklıdır.

Daha önceki yazımda ASP.NET MVC ile nasıl dinamik site haritası oluşturulacağını anlatmıştım. Şimdi ise aynı işlemi PHP ile gerçekleştireceğiz. Aslında mantık birebir aynı, sadece kod yazımında farklılık var. Oluşturacağımız site haritası XML formatında olacak. Evet şimdi gelelim nasıl oluşturacağımıza.

<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/db.php'//Veritabanı bağlantımızı yaptık.
header('Content-Type: text/xml'); //PHP dosyasının XML dosyası olarak algılanmasını sağlıyoruz.
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"//XML etiketimizi başlatıyoruz.
echo "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
echo "<url><loc>http://" . $_SERVER['HTTP_HOST'] . "</loc></url>"//Ana Sayfamızı ekliyoruz.
echo "<url><loc>http://" . $_SERVER['HTTP_HOST'] . "/about</loc></url>"//Hakkımda Sayfamızı ekliyoruz.
echo "<url><loc>http://" . $_SERVER['HTTP_HOST'] . "/contact</loc></url>"//İletişim Sayfamızı ekliyoruz.
$articles = mysqli_query($conn"SELECT ID, url FROM articles ORDER BY ID DESC"); //Veritabanından makalelerimizi çekiyoruz.
while ($article = mysqli_fetch_array($articles)) { //While döngümüzü açıyoruz.
echo "<url><loc>http://" . $_SERVER['HTTP_HOST'] . "/" . $article['url'] . "</loc></url>"; } //Makale adreslerimizi döngü içinde sırayla ekliyoruz.
$categories = mysqli_query($conn"SELECT caturl FROM categories");
while ($category = mysqli_fetch_array($categories)) { //While döngümüzü açıyoruz.
echo "<url><loc>http://" . $_SERVER['HTTP_HOST'] . "/category/" . $category['caturl'] . "</loc></url>"; } //Kategori adreslerimizi döngü içinde sırayla ekliyoruz.
echo "</urlset>"//XML etiketimizi kapatıyoruz.
mysqli_close($conn); //Veritabanı bağlantımızı kapatıyoruz. ?>

Bu şekilde PHP dosyamızı oluşturuyoruz. Örnek olarak dosyamızın adı sitemap.php olsun. Bu php dosyasını tarayıcınızda açtığınız zaman sizi tamamen xml etiketlerinden oluşan bir sayfanın karşıladığını görürsünüz. Peki site haritasının domainadresi.com/sitemap.php değil de domainadresi.com/sitemap.xml şeklinde xml uzantılı olarak görünmesini istiyorsak ne yapacağız? .htaccess dosyamızda url rewrite işlemi gerçekleştireceğiz.

RewriteEngine On
RewriteRule ^sitemap.xml$ sitemap.php [NC,L]

Hepsi bu kadar. Kolay gelsin.

Mehmet YAYLACI
YORUMLAR (3)
  1. Alper Yılmaz
    Alper Yılmaz - Cevapla

    11 Nisan 2017 - 14:03

    Hocam anlatım için teşekkürler. . $_SERVER['HTTP_HOST'] . Bu kısımları silip web adresini mi yazacağız? Db.php veritabanı bilgilerini yazdığımız dosya mı oluyor?

    • Mehmet YAYLACI
      Mehmet YAYLACI - Cevapla

      11 Nisan 2017 - 18:06

      Silmenize gerek yok. Zaten o şekilde web sitenizin adresini alıyor. Evet db.php veritabanı bilgilerinin olduğu dosya oluyor.

  2. İsa
    İsa - Cevapla

    14 Ekim 2018 - 07:27

    gerçekten çok faydalı bir bilgi teşekkür ederim

YORUM FORMU