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.