Php İle Dinamik Sitemap Oluşturmak

php-ile-dinamik-sitemap-olusturmak

SİTEMAP NEDİR

 

Kısaca sitede  linklerin listelendiği xml uzantılı bir dosyadır ve seo açısından da önemlidir zira sitemizi indexleyecek robotlara sayfalar hakkında önbilgiler sunar, ancak bu bilgiler robotlara komut vermekden ziyade bir açıklama niteliğindedir, örneğin siz  <changefreq>…</changefreq>  etiketine Daily yazdığınızda robota bu sayfa günlük ziyaret edilsin çünkü her gün içerik değişiyor dersiniz ama robot bu sayfayı kendi algoritmalarına uygun sıklıkta ziyaret eder.

 Aşağıda vereceğim örnekte sitemap.xml  dosyasının içeriğini görebilirsiniz

örnek https://sitemaps.org sitesinden alınmıştır


<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://www.example.com/</loc>
      <lastmod>2005-01-01</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=12&amp;desc=vacation_hawaii</loc>
      <changefreq>weekly</changefreq>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=73&amp;desc=vacation_new_zealand</loc>
      <lastmod>2004-12-23</lastmod>
      <changefreq>weekly</changefreq>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=74&amp;desc=vacation_newfoundland</loc>
      <lastmod>2004-12-23T18:00:15+00:00</lastmod>
      <priority>0.3</priority>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=83&amp;desc=vacation_usa</loc>
      <lastmod>2004-11-23</lastmod>
   </url>
</urlset>

Hazır yeri gelmişken kullanacağımız etiketlerden de kısaca bahsedelim

Bu kadar açıklamadan sonra gelelim bunu nasıl dinamik hale getireceğimize. 

İlk yapmamız gereken sitemap.xml yerine sitemap.php dosyası oluşturacağımız için .htaccess yönlendirmemizi yazmak ,  htaccess dosyamıza

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

kodunu ekleyelim ve sitemap.php isminde bir dosya oluşturalım bu dosyada dikkat etmemiz gereken en önemli konulardan biri ilk satırın üzerinde herhangi bir şey olmaması;  boş satır bile olmamalı.

İlk satıra headerımızı  PHP etiketleri arasında aslına uygun şekilde yazdıktan sayfamıza veri tabanı bağlantımızı ve varsa seflinkleri yazdığınız fonksiyonları ne var ne yoksa php etiketleri arasında dahil edebilirsiniz örneğin

<?php header('Content-type: Application/xml; charset="utf8"', true); ?>
<urlset
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xsi:schemaLocation="
            http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

Şimdi w3 walidatör standartlarına uygun şekilde şemamızı ad alanımızı falan yazıyoruz bu konuyla ilgili detaylı bilgiyi yukarda verdiğim adreste bulabilirsiniz

Bu etiket biraz uzun oldu ama standartlara uygun oldu bundan sonra linklerimiz yazacağımız kısma geçebiliriz. Dosyamıza veri tabanı , varsa fonksiyonlarımızı içeren dosyamızı vr birde lazım olacak değişkenlerimizi ekleyelim
<?php
include 'veritabanına_bağlantı_dosyanız.php';
include ‘varsa_fonksiyonlarınız.php';

$site = $_SERVER['HTTP_HOST'];
$gun = date("Y-m-d");
$saat = date('H:i:s');
$tarih = $gun . "T" . $saat . "+00:00";
?>

Örneğin sitemizde yayınladığımız içerikleri haber diye bir tabloda tuttuğumuzu varsayarsak bu tablodan tüm linklerimizi çekip bir döngüyle ile sitemap dosyamıza yazdıralım, tabi bunu yapmadan önce htaccess dosyanızı kendi lik yapınıza göre düzenlemelisiniz bu örnekte kullandığım yapıya göre htaccess dosyasında aşağıdaki bir satır olmalı

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

Bu düzenlemeyi de yaptıysanız artık linklerimizi yazdırabiliriz

<?php
$habersor = $db->prepare("select * from haberler");
$ habersor ->execute();

while ($habercek = $ habersor ->fetch(PDO::FETCH_ASSOC)) { ?>
    <url>
        <loc>https://<?php echo $site; ?>
            /haber-<?php echo seo($habercek["haber_ad"]) . '-' . $ habercek["haber_id"] ?></loc>
        <lastmod><?php echo $tarih ?></lastmod>
        <changefreq>daily</changefreq>
        <priority>1.00</priority>
    </url>
<?php } ?>
 <loc>…<loc>

 etiketleri arasına seo linkimi yazdım. Dikkat ettiyseniz 

<lastmod>…<lastmod>

etiketine bu günün tarihini yazdım, bu konuda bazı arkadaşlar olumsuz görüş belirtse  de ben bir sakıncasını henüz görmedim ama siz isterseniz haberin yazılma tarihini yada son değiştirilme tarihini de yazabilirsiniz

<changefreq>…</changefreq>

etiketine  daily   diyerek robotlara hergün gelin dedim

<priority>…</priority>
etiketine  1.00  rakamı ile bu sayfanın önceliğinin en yüksek seviyede olduğunu belirttim siz isterseniz bu değeri  0.0 ile 1.0 arasında bir değer  ile değiştirebilirsiniz
Son olarak yapmanız gereken bir şey kaldı o da yukarıda açtığımız
<urlset
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xsi:schemaLocation="
            http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
etiketini 
</urlset>
şeklinde kapatmak.

Şu halde dosyamızın son hali aşağıdaki gibi olmalı

<?php header('Content-type: Application/xml; charset="utf8"', true); ?>
<urlset
        xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xsi:schemaLocation="
            http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
    <?php
    include 'veritabanına_bağlantı_dosyanız.php';
    include 'varsa_fonksiyonlarınız.php';

    $site = $_SERVER['HTTP_HOST'];
    $gun = date("Y-m-d");
    $saat = date('H:i:s');
    $tarih = $gun . "T" . $saat . "+00:00";
    ?>

    <?php
    $habersor = $db->prepare("select * from haberler");
    $habersor ->execute();

      while ($habercek = $habersor ->fetch(PDO::FETCH_ASSOC)) { ?>
        <url>
            <loc>https://<?php echo $site; ?>
                /haber-<?php echo seo($habercek["haber_ad"]) . '-' . $habercek["haber_id"] ?></loc>
            <lastmod><?php echo $tarih ?></lastmod>
            <changefreq>daily</changefreq>
            <priority>1.00</priority>
        </url>
    <?php } ?>


</urlset>
Bunun dışında statik sayfalarınızı da en üstte verdiğim şablona uygun olarak döngüye girmeden elle yazdırabilirsiniz.

Artık siz kendi projeleriniz de kendi sisteminize uygun şekilde dinamik sitemap ler hazırlayabilirsiniz.

Sorularınızı ve yorumlarınızı esirgemeyin hatta sosyal medyada falan paylaşın lütfen :)

Kolay gelsin