Guida alle Sitemaps: 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<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.sitemaps.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; 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"?>' . "\r\n";
?>
<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>













