Sitemap dinamica con PHP

Oggi scopriamo come realizzare una sitemap completamente dinamica con PHP interfacciandoci a un database MYSQL.

Quando risulta necessario creare una sitemap dinamica? bhè l’esempio più evidente è quando creiamo un nostro cms o sistema di gestione in generale. Se usate WordPress o altri CMS potrete generare la sitemap direttamente installando un plugin (io vi consiglio Google sitemap XML per WordPress).

Se invece avete creato un vostro sito dinamico in PHP il cruccio della sitemap sarà presto uno dei vostri problemi. Per creare una sitemap dinamica dobbiamo farci una semplice domanda:

Come facciamo di solito ad estrarre i dati che ci servono dal database per visualizzarli a video?

01. Struttura di un file sitemap

Una sitemap che si rispetti (e venga rispettata da Google), è composta da:

Dichiarazione del tipo di contenuto (xml)

Content-Type: text/xml

– Versione e codifica

<?xml version="1.0" encoding="UTF-8"?>

– Schema ufficiale

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

Struttura principale dei link

<url>
	<loc>
	http://www.tuosito.it/
	</loc>
	<lastmod>20/10/2011</lastmod>
</url>

Come vedete la struttura è divisa in <loc> ovvero location, è il percorso al vostro (o ai vostri) articoli, lastmod invece è la data dell’ultima modifica dell’articolo.

02. Scriviamo la sitemap in PHP

Create un file chiamato sitemap.php nella root del vostro sito, e copiate questo codice:

<?php header('Content-Type: text/xml');//lasciare in alto
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; //lasciarlo in alto altrimenti da errore
include('gestione/config.php');
include('gestione/connessione_db.php');
$data_oggi = (date('Y-m-d'));
?>

Come vedete, grazie a header di php creo l’intestazione del file (XML). Successivamente includo i file che mi servono per connettermi al database e creo una variabile che conterrà la data del giorno (ideale per refreshare la home e pagine statiche vedi punto 03).

NOTA IMPORTANTE: Header() è una funziona molto delicata di PHP, assicuratevi di non lasciare spazi vuoti nel codice prima di <?php e dopo i tag di chiusura ?> altrimenti potrebbe dare errore. Oltre a questo il codice:

header('Content-Type: text/xml');

Va messo DAVANTI a tutto il resto del codice (come vedete nell’esempio sopra).

Ora potete collegarvi al database ed eseguite il loop per estrarre le pagine singole dei vostri articoli come siete abituati:

<?php
 mysql_select_db("$db_name",$connessione); 

		 $risultato = mysql_query("SELECT * FROM tua_tabella");

		      if (!$risultato) {

					 exit ('<p> Errore mentre recuperavo i dati' . mysql_error() . '</p>');

					 }

					 while ($row = mysql_fetch_array($risultato))   

					 {

                        $var1 = $row['var1'];
                        $var2 = $row['var2'];
                        $data = $row['data'];

                                          echo "
                                          <url>
                                           ";
                                          echo "<loc>$base_url/$var1/$var2.html";
                                          echo "</loc>
                                            ";
                                          echo "<lastmod>$data</lastmod>";
                                          echo "
                                         </url>";

                                         }//FINE LOOP SITEMAP

Ovviamente $data è una variabile che contiene la data recuperata dalla vostra tabella, $var1 e $var2 sono altre due variabili ricostruite dalla vostra tabella necessarie per costruire i link agli articoli. In questo modo abbiamo scritto la sitemap che prenderà tutti i valori presenti nella vostra tabella sotto forma di documento XML valido come sitemap. Ovviamente se avete più di una tabella dovrete eseguire più di un loop while.

NOTA: Ricordate di includere i file config.php e connessione_db.php per potervi interfacciare al database senza problemi!

03. come faccio per le pagine “statiche”?

Bene il contenuto dinamico del vostro database è stato inserito correttamente nella sitemap, ora però dobbiamo pensare al contenuto statico, come home page, pagina contatti, chi siamo etc… come fare?

Una prima soluzione (la più semplice) è di creare altre dichiarazioni XML indicando come data la variabile $data_oggi impostata in precedenza nel documento (vedi parte iniziale dell’articolo).

Vediamo un esempio chiarificatore:

<url>
	<loc>
	http://www.tuosito.it/
	</loc>
	<lastmod><?php echo $data_oggi ?></lastmod>
</url>
<url>
	<loc>
	http://www.tuosito.it/chi-siamo.html
	</loc>
	<lastmod><?php echo $data_oggi ?></lastmod>
</url>

In questo modo sia gli articoli statici che la home avranno sempre la data di oggi come ultima modifica. Come vedete siamo riusciti in pochi passi a costruire la nostra sitemap che recupera i dati in modo dinamico da un database.

04. Come trasformare da PHP e XML il documento

Molti di voi staranno dicendo: ma sei pazzo? lo sanno tutti che la sitemap non può avere estensione php…Per rendere la nostra sitemap con estensione XML non dobbiamo fare altro che aggiungere questa regola al nostro file htaccess:

###############
RewriteEngine On
RewriteBase /
RewriteRule ^sitemap.xml ./sitemap.php [L,QSA]
###############

Si tratta di una regola di mod rewrite che in pratica trasforma il file da sitemap.php a sitemap.XML. Quando viene richiesto l’url con estensione xml (quello da inviare a Google), la regola fa in modo di recuperare i dati scritti nel file php che abbiamo creato (spiegazione molto banale, giusto per farvi capire meglio).

Provate ora a scrivere nel browser tuosito.it/sitemap.xml ed eccovi servita la vostra sitemap dinamica trasformata in XML pronta per essere inviata a Google! ovviamente ogni volta che aggiungerete o modificherete un articolo del database la sitemap agirà di conseguenza. Questo fa sì che questo sistema si attesti su livelli abbastanza alti di automatizzazione (in caso di modifiche strutturali al sito ovviamente è da rivedere).

Come demo vi fornisco il risultato finale di un sito di mia (recente) creazione: MBC House.

A lunedì e buon week end!! (ovviamente condividete e commentate ). =)

0 0 voti
Valutazione dell'articolo
Iscriviti
Notificami
guest

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

14 Commenti
Vecchi
Più recenti Le più votate
Feedback in linea
Visualizza tutti i commenti
Giacomo
Giacomo
14 anni fa

questi ultimi articoli sono veramente belli 🙂 complimenti 😉

JanQuarius
JanQuarius
13 anni fa

Bell’articolo! 🙂 e utile…

Sergio
Sergio
13 anni fa

Grazie mille, mi è stato d’aiuto perchè non avevo pensato alla possibilità di riscrivere l’estensione con htaccess. 🙂

Brucee
Brucee
12 anni fa

🙂
http://www.mbchouse.it/sitemap.xml

Warning: Invalid argument supplied for foreach() in /web/htdocs/www.mbchouse.it/home/application/views/view-seo.php on line 84

Valerio
Valerio
12 anni fa

Complimenti per l’ottima e chiarissima guida! C’è un errore però, manca la chiusura del tag … Buon lavoro.

Leonardo
Leonardo
12 anni fa

Ciao non capisco come mai il codice che ho incollato nell’ htaccess non funziona appena vado al link xml.

Carmelo
Carmelo
11 anni fa

Ma sei numero uno. Tutte cose che potevo tranquillamente fare e non ci avevo mai pensato. Grazie infinite!

Marco
Marco
11 anni fa

Grazie bella guida! La domanda che più mi tormentava era come far accettare la sitemap dinamica in PHP a Google dato che richiede il formato XML e non ero sicuro di poter riscrivere l’url, grazie a te ho ottenuto la risposta 😉

Max
Max
11 anni fa

Ciao, può essere banale, ma forse per molti no, comunque mi permetto di segnalarti che ti sei dimenticato di inserire la chiusura del tag , il che genera errori diversi a seconda del browser, che potrebbero essere fuorvianti.
Per il resto l’articolo è perfetto, e per questo ti ringrazio.
Ciao

Max
Max
Rispondi a  Max
11 anni fa

Il tag

Max
Max
Rispondi a  Max
11 anni fa

ha giustamente non lo scrive, intendevo al chiusra del tag u r l s e t

Rimani Aggiornato
Nuove idee, zero Spam
Ti invieremo solo le ultime novità di articoli o nostri progetti.
Iscrivendoti accetti la nostra privacy poliicy. Una volta iscritto, ricordati di attivare l'iscrizione cliccando sul link ricevuto via mail.
14
0
Esprimete la vostra opinione commentando.x