Generare una sitemaps in PHP

In questo articolo scopriremo come creare, tramite PHP, unasitemap in XML che si auto-aggiorni traendo i dati relativiagli update dal database del portale relativo. Ecco unesempio di sitemap statica

<?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>
</urlset>

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

<?php
$query = mysql_query ( "SELECT * FROM articles ORDER BY ID DESC" );
$row = mysql_fetch_assoc ( $query );
echo '<?xml version="1.0" encoding="utf-8"?>' . "
";
?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php
############# BEGIN LOOP ############
do {

$link = 'http://www.mydomain.com/articles.php?ID=' . $row['ID'];
$lastmod = ( $row['date_updated'] ) ? $row['date_updated'] : $row['date_added'];
$priority = 0.5;
$changefreq = 'monthly';

?>
<url>
<loc><?=$link?></loc>
<lastmod><?=$lastmod?></lastmod>
<priority><?=$priority?></priority>
<changefreq><?=$changefreq?></changefreq>
</url>
<?php
} while ( $row = mysql_fetch_assoc ( $query ) );
############# END LOOP ############
?>
</urlset>

Da notare che abbiamo impostato a 0.5 la priorità diciascuna pagina che linka ad un singolo articolo, dal momento che queste, disolito, sono le meno aggiornate (una volta che un articoloè pubblicato è difficile che la pagina relativasubisca modifiche). Per il "lastomd" abbiamo usatol' ultima data nella quale l' articolo è statomodificato, e se ciò non è mai avvenuto, ladata di quando è stato aggiunto al database. Dobbiamopoi effettuare alcuni controlli sulle stringhe, per renderlecompatibili 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 dicrearci una sitemap auto-aggiornabile, senza dover farericorso a servizi di terze parti.

Prima di lasciarvi, un piccolo accorgimento. Nel caso in cuiil nostro portale sia di grandi dimensioni, e la sitemapdebba pergiunta contenere migliaia di links, una sola sitemapnon può bastare; Google permette però dirisolvere il problema: bisogna creare una sitemap principaleche linki ad altri files XML. In poche parole ci sarannopiù sitemaps, ciascuna relativa ad una determinatasezione del portale, ed una principale, i grado dirichiamarle. Ecco in PHP come creare la sitemap che neinglobi altre:

<?php
echo '<?xml version="1.0" encoding="utf-8"?>' . "
";
?>
<sitemapindex xmlns="http://www.sitemaps.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>



Ti potrebbe interessare anche

commenta la notizia