Guida alle Sitemaps: Generare una sitemaps in PHP

a cura di Guido Arata

In questo articolo scopriremo come creare, tramite PHP, una sitemap in XML che si auto-aggiorni traendo i dati relativi agli update dal database del portale relativo. Ecco un esempio di sitemap statica

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www..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>
</urlset>

La prima tag ci dice che il linguaggio usato è quello dell’ XML, version 1.0 e che la cifratura è UTF-8, quella classica insomma. Per trarre dati da un database e rendere la sitemap aggiornabile dinamicamente, dobbiamo creare un nuovo file php (che chiameremo sitemap.php) con un recordset che ci aiuterà a muoverci tra i dati del database. Il tutto dovrà esser integrato dopo la tag ‘urlset’ e finire prima dell’ ultimo’url’. Vediamo nella pratica:

<?php<br>
  $query = mysql_query ( "SELECT * FROM articles ORDER BY ID DESC" );<br>
  $row = mysql_fetch_assoc ( $query );</p>
<p> echo '<?xml version="1.0" encoding="utf-8"?>' . "<br>
  ";<br>
  ?></p>
<p><urlset xmlns="http://www..org/schemas/sitemap/0.9"><br>
  <?php<br>
  ############# BEGIN LOOP ############<br>
  do {<br>
  <br>
  $link = 'http://www.mydomain.com/articles.php?ID=' . $row['ID'];<br>
  $lastmod = ( $row['date_updated'] ) ? $row['date_updated'] : $row['date_added'];<br>
  $priority = 0.5;<br>
  $changefreq = 'monthly';<br>
  <br>
  ?><br>
  <url><br>
  <loc><?=$link?></loc><br>
  <lastmod><?=$lastmod?></lastmod><br>
  <priority><?=$priority?></priority><br>
  <changefreq><?=$changefreq?></changefreq><br>
  </url><br>
  <?php<br>
  } while ( $row = mysql_fetch_assoc ( $query ) );<br>
  ############# END LOOP ############<br>
  ?><br>
  </urlset>

Da notare che abbiamo impostato a 0.5 la priorità di ciascuna pagina che linka ad un singolo articolo, dal momento che queste, di solito, sono le meno aggiornate (una volta che un articolo è pubblicato è difficile che la pagina relativa subisca modifiche). Per il ‘lastomd’ abbiamo usato l’ ultima data nella quale l’ articolo è stato modificato, e se ciò non è mai avvenuto, la data di quando è stato aggiunto al database. Dobbiamo poi effettuare alcuni controlli sulle stringhe, per renderle compatibili all’ XHTML:

function do_xhtml ( $string ) {
        $string = stripslashes ( $string );
        $string = str_replace ( ''', ''', $string );
        $string = str_replace ( ''', ''', $string );
        $string = str_replace ( '?', '-', $string );
        $string = str_replace ( '?', '', $string );
        $string = str_replace ( '?', ', $string );
        $string = str_replace ( '?', ', $string );
        $string = str_replace ( '`', ', $string );
        return $string;
}

Insomma, come potete vedere con pochi semplici accorgimento, e tutto sommato poche linee di codice, siamo in grado di crearci una sitemap auto-aggiornabile, senza dover fare ricorso a servizi di terze parti.

Prima di lasciarvi, un piccolo accorgimento. Nel caso in cui il nostro portale sia di grandi dimensioni, e la sitemap debba pergiunta contenere migliaia di links, una sola sitemap non può bastare; permette però di risolvere il problema: bisogna creare una sitemap principale che linki ad altri files XML. In poche parole ci saranno più , ciascuna relativa ad una determinata sezione del portale, ed una principale, i grado di richiamarle. Ecco in PHP come creare la sitemap che ne inglobi altre:

<?php
     echo '<?xml version="1.0" encoding="utf-8"?>' . "\r\n";
?>
<sitemapindex xmlns="http://www..org/schemas/sitemap/0.9">
      <sitemap>
               <loc>http://www.mydomain.com/articles_sitemap.php</loc>
               <lastmod><?=echo date ( 'Y-m-d' )?></lastmod>
      </sitemap>
      <sitemap>
               <loc>http://www.mydomain.com/scripts_sitemap.php</loc>
               <lastmod><?=echo date ( 'Y-m-d' )?></lastmod>
      </sitemap>
      <sitemap>
               <loc>http://www.mydomain.com/resources_sitemap.php</loc>
               <lastmod><?=echo date ( 'Y-m-d' )?></lastmod>
      </sitemap>
      <sitemap>
               <loc>http://www.mydomain.com/snippets_sitemap.php</loc>
               <lastmod><?=echo date ( 'Y-m-d' )?></lastmod>
       </sitemap>
       <sitemap>
               <loc>http://www.mydomain.com/jobs_sitemap.php</loc>
               <lastmod><?=echo date ( 'Y-m-d' )?></lastmod>
       </sitemap>
</sitemapindex>

WebMasterPoint.org - Creative Commons Attribution-Noncommercial-Share Alike 2.0 Generic

Articoli Correlati