tasmir / sitemap
A standalone Laravel package for generating dynamic XML sitemaps.
Requires
- php: ^8.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
README
A powerful, universal, and developer-friendly sitemap generator for Laravel. Automatically index your static routes, map your models, and generate sitemaps with professional features like progress bars and auto-indexing for large sites.
Features
- 🚀 Automated Route Collection: Automatically discovers and indexes your public, static
GETroutes. - ✨ Sitemapable Trait: Give your models the ability to manage their own sitemap metadata.
- 🏢 Sitemap Indexing: Automatically splits large sitemaps (50k+ URLs) and generates a
sitemap.xmlindex. - 📦 Configuration-Driven: Easily map models to routes without writing code.
- 🎩 Sitemap Facade: Simple programmatic access from anywhere in your app.
- 🎨 Blade Templates: Fully customizable XML output using Blade views.
- 📉 Progress Bars: Real-time feedback in the terminal during generation.
Installation
-
Add the package to your
composer.jsonor install via composer (if published):composer require tasmir/sitemap
-
The service provider will be auto-discovered. If not, add it to
config/app.php:Tasmir\Sitemap\Providers\SitemapServiceProvider::class,
-
Publish the configuration:
php artisan vendor:publish --tag=sitemap-config
Configuration
Edit config/sitemap.php to customize the behavior:
Automated Route Collection
Set auto_collect_static_routes to true to index all static GET routes that don't require parameters and aren't protected by auth.
'auto_collect_static_routes' => true, 'exclude_routes' => ['admin.*', 'login', 'register'],
Sitemapable Models
Add models that use the Tasmir\Sitemap\Traits\Sitemapable trait here:
'sitemapable_models' => [ \App\Models\Blog::class, ],
Usage
Using the Trait
Add the Sitemapable trait to your model and optionally override getSitemapLoc():
use Tasmir\Sitemap\Traits\Sitemapable; class Blog extends Model { use Sitemapable; public function getSitemapLoc(): string { return route('blog.show', $this->slug); } }
Using the Facade
You can manually add URLs from anywhere:
use Tasmir\Sitemap\Facades\Sitemap; Sitemap::addUrl(url('/special-page'), now()->toAtomString(), 'weekly', '0.9');
Commands
Generate your sitemap manually:
php artisan sitemap:generate
The sitemap is generated at public/sitemap.xml.
Automation
The package includes built-in scheduling. You can customize the frequency, time, and timezone in config/sitemap.php:
'schedule_enabled' => true, 'schedule_timezone' => 'Asia/Dhaka', 'schedule_method' => 'dailyAt', 'schedule_time' => '00:01',
Ensure your Laravel scheduler is running in your crontab:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
The MIT License (MIT). Please see License File for more information.