Laravel — создание sitemap.xml карты сайта

sitemap-generator

Создаем Sitemap Controller

php artisan make:controller SitemapController

Открываем SitemapController.php и генерируем наш индекс, выбрав все интересующие нас модели, в данном примере это Post. Выбираем по дате обновления - updated_at. У меня на сайте это published_at.

public function index()
{
  $posts = Post::orderBy('updated_at', 'desc')->get();

  return response()->view('sitemap', [
      'posts' => $posts,
  ])->header('Content-Type', 'text/xml');
}


Создадим шаблон blade sitemap:

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
@foreach ($posts as $post)
<url>
<loc>https://limitless.pro/blog/{{ $post->slug }}</loc>
<lastmod>{{ $post->published_at->tz('UTC')->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
@endforeach
</urlset>


Добавим роут

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

Готово.