Come generare una sitemap dinamica in Laravel

Come generare una sitemap dinamica in Laravel

Per tutti coloro che vogliono vedere il proprio sito ben indicizzato nei motori di ricerca è molto importante avere sempre una sitemap aggiornata e completa.

In questo articolo vedremo come creare un sitemap generator per il proprio sito fatto in Laravel grazie al package laravel-sitemap.

Per installare il package utilizziamo composer.

Per prima cosa apriamo il file composer.json e inseriamo nell'array require la seguente riga:


"roumen/sitemap": "dev-master"

Una volta salvato il file composer.json facciamo l'update di composer da terminale attraverso il comando:


composer update

Infine registriamo il Service Provider andando all'interno delle cartelle config/app e aggiungendo all'array providers la riga:


Roumen\Sitemap\SitemapServiceProvider::class,

Ora vediamo come si genera la sitemap dinamicamente.

Apriamo il file routes.php all'interno della cartella app/Http aggiungiamo la seguente riga:


Route::get('sitemap', 'SitemapController@index');

In questo caso noi abbiamo creato un nuovo controller SitemapController se non lo ritenete necessario potete inserire il codice che sarà contenuto nel metodo index del SitemapController direttamente nel file routes.php in questo modo:


Route::get('sitemap', function (){

//Qui il codice

});

Il SitemapController invece lo creiamo così:


class SitemapController extends Controller
{   
    public function index()
    {
         // creiamo un nuovo oggetto sitemap
         $sitemap = App::make("sitemap");

         // aggiungiamo le entità principali del nostro sito (url, data ultima modifica)
         $sitemap->add(URL::to('/'), '2016-01-01T20:10:00+02:00', '1.0', 'daily');
         $sitemap->add(URL::to('posts'), '2016-01-01T12:30:00+02:00', '0.9', 'monthly');
         $sitemap->add(URL::to('pages'), '2016-01-01T12:30:00+02:00', '0.8', 'monthly');

         // recupera tutti i post e le pagine dal database
         $articoli = DB::table('posts')->orderBy('created_at')->get();
         $guide = DB::table('pages')->orderBy('created_at')->get();

         // aggiungi tutti i post alla sitemap
         foreach ($posts as $post)
         {
            $sitemap->add(URL::to('posts').'/'.$post->slug, $post->updated_at);
         }
         
         foreach ($pages as $page)
         {
            $sitemap->add(URL::to('pages').'/'.$page->slug, $page->updated_at);
         }

    return $sitemap->render('xml');
}

}

In questo modo ogni volta che si accede all' Url http//:nostrosito.com/sitemap verrà generata una sitemap dinamica grazie al metodo index() che ora commentiamo.

La struttura del nostro sito è ipotizzata come:

  • nomesito.com
    • posts
      • slug-1
      • slug-2
      • .......
    • pages
      • slug-1
      • slug-2
      • .......

In caso la struttura del vostro sito sia differente si dovrà adattare il codice a tale struttura.

Per prima cosa creiamo i macro elementi, ovvero nomesito.com, nomesito.com/posts, nomesito.com/pages e li aggiungiamo alla sitemap attraverso $sitemap->add().

Successivamente esportiamo dal database tutti i nostri post e le nostre pagine e con un ciclo foreach le aggiungiamo alla sitemap nel formato nomesito.com/posts/slug e nomesito.com/pages/slug insieme alla data dell'ultima modifica(opzionale).

Per ultima cosa stampiamo la sitemap in formato xml.

Se le richieste alla sitemap sono molto numerose il package permette anche un sistema di caching in modo di non ricreare ogni volta la sitemap da zero. Per ulteriori informazioni potete consultare la wiki ufficiale.

Se avete dubbi o perplessità commentate pure qui sotto!

Commenti

Ancora nessun commento per questo articolo

Lascia un commento: