According to Google, most sites would benefit from a sitemap, which helps bots know what pages should be crawled.
A sitemap is a file where you provide information about the pages, videos, and other files on your site, and the relationships between them. Search engines like Google read this file to crawl your site more efficiently. A sitemap tells Google which pages and files you think are important in your site, and also provides valuable information about these files. For example, when the page was last updated and any alternate language versions of the page.
One of the benefits of the package is it supplies two methods of creating a sitemap. The first is it can automatically crawl your site and build it based on internal links, or you can have full control and build it manually.
Laravel Sitemap Auto Crawling
All you need to do for auto crawling is install the packakge and then tell it the URL to start crawling.
use Spatie\Sitemap\SitemapGenerator;
$path = public_path('sitemap.xml');
SitemapGenerator::create('https://example.com')->writeToFile($path);
Laravel Sitemap Manual Set up
I'm using this here on Laravel News because we have thousands of pages that need to be added to the index. To set this up, first apply the code to your models:
use Spatie\Sitemap\Contracts\Sitemapable;
use Spatie\Sitemap\Tags\Url;
class Article extends Model implements Sitemapable
{
public function toSitemapTag(): Url | string | array
{
return Url::create(route('article.details', $this))
->setLastModificationDate(Carbon::create($this->updated_at))
->setChangeFrequency(Url::CHANGE_FREQUENCY_YEARLY)
->setPriority(0.1);
}
}
Then, you can generate your sitemap like this:
use Spatie\Sitemap\Sitemap;
Sitemap::create()
->add(Post::all()
->writeToFile(public_path('sitemap.xml'));
How we use Laravel Sitemap
As mentioned, we are using the manual setup and here is the full code to generate our sitemap:.
Sitemap::create()
->add($this->build_index(Article::active()->get(), 'sitemap_articles.xml'))
->add($this->build_index(Partner::active()->get(), 'sitemap_partners.xml'))
->add($this->build_index(Category::all(), 'sitemap_categories.xml'))
->add($this->build_index(Package::all(), 'sitemap_packages.xml'))
->add(Url::create('/')->setPriority(1)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/newsletter')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY))
->add(Url::create('/popular-laravel-packages')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY))
->add(Url::create('/links')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/links/new')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/partners')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/partners/agencies')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/partners/tools')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->add(Url::create('/partners/education')->setPriority(0.5)->setChangeFrequency(Url::CHANGE_FREQUENCY_ALWAYS))
->writeToFile(public_path('sitemap.xml'));