Generare una sitemaps in PHP

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.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 è 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
$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à 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; Google permette però di risolvere il problema: bisogna creare una sitemap principale che linki ad altri files XML. In poche parole ci saranno più sitemaps, 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"?>' . "
";
?>
<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

C'è 1 commento
Graziano
Hai qualche domanda da fare?