By bitmap
Hi all,
I’m almost done with building a small website using Laravel. I’m now working on the SEO side of things and I want to be able to automatically generate the sitemap.xml file on let’s say daily basis.
Has anyone done this before and is there a package that you could suggest? Or is it better for me to create the logic myself?
Thanks!
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Accepted Answer
Hello,
I usually use the following package for all of my sites to generate the sitemap.xml
file automatically:
https://github.com/spatie/laravel-sitemap
The setup goes something like this:
- composer require spatie/laravel-sitemap
If you would like to change the default options, you could publish the config by using the following command:
php artisan vendor:publish --provider="Spatie\Sitemap\SitemapServiceProvider" --tag=config
This will copy the config to config/sitemap.php
where you would be able to change it depending on your needs.
To generate a sitemap for your website with all of the found links, you can use the following:
SitemapGenerator::create('https://example.com')->writeToFile(public/sitemap.xml);
To automate the process what you could do is create an artisan command and then add it to your scheduler.
To do that just run the following:
php artisan make:command GenerateSitemap
And then update the content of the app/Console/Commands/GenerateSitemap.php
file accordingly. I would usually use something like this:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Spatie\Sitemap\SitemapGenerator;
class GenerateSitemap extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $signature = 'sitemap:generate';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate the sitemap.';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// modify this to your own needs
SitemapGenerator::create(config('app.url'))
->writeToFile(public_path('sitemap.xml'));
}
}
Then to generate your sitemap just run:
php artisan sitemap:generate
To schedule this to run on daily basis just add the following to your app/Console/Kernel.php
file:
protected function schedule(Schedule $schedule)
{
...
$schedule->command('sitemap:generate')->daily();
...
}
That is pretty much it, then your sitemap.xml should be available at example.xml/sitemap.xml
.
For more information I would recommend going through the official repo here:
https://github.com/spatie/laravel-sitemap/blob/master/README.md
Hope that this helps! Regards, Bobby
Thank you for the above. Very helpful. Wondering if anyone would have a good tutorial on setting up the cron to reference the kernel to run this.
Thank you
Many thanks for your swift response. I believe, at least in my case, the line that is in the crontab has another folder, html, to get to my domain folder. ***** cd /var/www/html/app_folder && php artisan schedule:run >> /dev/null 2>&1
Thank you David
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.