Laravel: generare la site map di un sito

Short link

In Laravel è semplice generare la site map di un sito.

Possiamo generare il file XML della site map in un metodo dedicato di un controller andando a reperire i contenuti del sito dal database.


<?php

use App\Http\Controllers\Controller;
use App\Post;

class MyController
{
    public function sitemap() 
    {
        $posts = Post::orderBy('date', 'desc')->get();
        $data = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
        $data .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
        foreach($posts as $post) {
            $date = strftime('%Y-%m-%d', strtotime($post['date']));
            $url = 'https://sito.tld/' . $post['slug'];

            $data .= '<url>' . "\n";
            $data .= '<loc>' . $url . '</loc>' . "\n";
            $data .= '<lastmod>' . $date . '</lastmod>' . "\n";
            $data .= '</url>' . "\n";
        }
        $data .= '</urlset>';

        return response($data, 200, [
            'Content-Type' => 'text/xml'
        ]);
    }
}

Quindi creiamo una route specifica.


Route::get('/sitemap.xml', 'MyController@sitemap')->name('sitemap');

Volendo è possibile creare un template in Blade invece che assemblare il documento XML manualmente. La cosa importante da ricordare in questo caso è che occorre sempre impostare il corretto tipo MIME dei contenuti.

L'autore

Gabriele Romanato, sviluppatore web full stack specializzato in siti, applicativi web ed e-commerce con Node.js e PHP.