<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com</loc>
<lastmod>2023-07-01</lastmod>
<priority>0.8</priority>
<changefreq>monthly</changefreq>
</url>
<url>
<loc>https://example.com/page</loc>
<lastmod>2023-07-01</lastmod>
<priority>0.8</priority>
<changefreq>monthly</changefreq>
</url>
...
</urlset>
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Route;
class SitemapController extends Controller
{
public function generator()
{
// Get all routes
$routeCollection = Route::getRoutes();
// only get with GET method
$urls = $routeCollection->getRoutesByMethod()['GET'];
// only get with web middleware
$urls = array_filter($urls, function ($url) {
return in_array('web', $url->action['middleware']);
});
// except api routes
$urls = array_filter($urls, function ($url) {
return !preg_match('/api/', $url->uri);
});
// except auth middleware
$urls = array_filter($urls, function ($url) {
return !in_array('auth', $url->action['middleware']);
});
// except parameterized routes
$urls = array_filter($urls, function ($url) {
return !preg_match('/{.*}/', $url->uri);
});
// except routes with query parameters
$urls = array_filter($urls, function ($url) {
return !preg_match('/\?/', $url->uri);
});
// except sitemap routes
$urls = array_filter($urls, function ($url) {
return !preg_match('/sitemap/', $url->uri);
});
// except sanctum routes
$urls = array_filter($urls, function ($url) {
return !preg_match('/sanctum/', $url->uri);
});
// Make sitemap array
$sitemap = [];
foreach ($urls as $url) {
$sitemap[] = [
'loc' => url($url->uri),
'lastmod' => now()->format('Y-m-d'),
'priority' => '0.8',
'changefreq' => 'monthly',
];
}
return response()->view('sitemap', [
'sitemap' => $sitemap,
])->header('Content-Type', 'text/xml');
}
}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($sitemap as $url)
<url>
<loc>{{ $url['loc'] }}</loc>
<lastmod>{{ $url['lastmod'] }}</lastmod>
<changefreq>{{ $url['changefreq'] }}</changefreq>
<priority>{{ $url['priority'] }}</priority>
</url>
@endforeach
</urlset>
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\SitemapController;
Route::get('sitemap.xml', [SitemapController::class, 'generator'])->name('sitemap.xml');