PHP

Criando sitemap dinâmico no Laravel 10

Criando sitemap dinâmico no Laravel 10

Fala devs, beleza? Hoje vou trazer uma biblioteca bem interessante para Laravel que gera sitemaps incluindo rotas dinâmicas. O nome da biblioteca é spatie/laravel-sitemap, e está disponível no Github. Com essa biblioteca conseguimos criar um arquivo sitemap.xml onde contém todas as rotas desejadas para compartilhamento com motores de busca, como o Google e o Bing.

Instalando GuzzleHttp

Primeiramente, para o uso dessa biblioteca, é necessário ter o GuzzleHttp instalado em nosso projeto Laravel. Para isso insira o seguinte comando no seu console (usando composer):

composer require guzzlehttp/guzzle

Instalando a biblioteca

Após a instalação, execute o comando abaixo para instalar a biblioteca do spatie/laravel-sitemap:

composer require spatie/laravel-sitemap

Agora está tudo pronto para utilizar a biblioteca, eu recomendo criar uma rota pra executar o código ou criar um comando do Laravel para rodar a função que irá gerar o arquivo de sitemap.

Criando uma rota

Vamos criar uma rota chamada /gerar-sitemap no arquivo routes/web.php, que será responsável por gerar ou atualizar o arquivo sitemap.xml:

Route::get('/gera-sitemap', [\App\Http\Controllers\SiteController::class, 'sitemap'])->name('sitemap');

No início do seu controlador, vamos importar as classes da biblioteca que utilizaremos e também a classe Carbon, caso já não possua (Carbon, Sitemap e Url):

use Carbon\Carbon;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

Agora vamos criar uma função chamada sitemap dentro do controller que usei de exemplo chamado SiteController. Dentro dessa função insira o código abaixo, como mostrado na documentação da biblioteca:

 public function sitemap(){ 
$path = "sitemap.xml"; 
$sitemap = Sitemap::create(); 
} 

Aqui estamos criando a variável $path, onde informamos o nome do arquivo que irá ser gerado na raiz do projeto (public), nesse caso se chamará sitemap.xml. Após isso iniciamos a criação do sitemap com a variável $sitemap instanciando a classe Sitemap e usando a função create().

Agora, vamos criar uma nova rota dentro do nosso sitemap com o código abaixo:

//homepage
$sitemap->add(Url::create('/')->setLastModificationDate(Carbon::yesterday())->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)->setPriority(1.0));

Aqui estamos adicionando a rota raiz “/”, que nesse caso é a sua homepage. Passamos a função setLastModificationDate() usando a função yesterday() do Carbon. Usamos a função setChangeFrequency() para informar a frequência de atualização da rota, no caso é uma constante da classe Url. E por último passamos a prioridade 1.0 pelo setPriority().

Criando rotas dinâmicas

Para cria novas rotas fixas basta fazer o mesmo, agora para criar uma rota dinâmica vamos usar o foreach para inserir as rotas, no exemplo abaixo usaremos usuários.

$usuarios = Usuarios::all();
foreach($usuarios as $usuario){
$sitemap->add(Url::create('/'.$usuario['url'])->setLastModificationDate(Carbon::yesterday())->setChangeFrequency(Url::CHANGE_FREQUENCY_WEEKLY)->setPriority(0.1));
}

E para finalizar, usaremos a função abaixo para gerar ou atualizar o arquivo sitemap.xml. Lembre-se de usá-la sempre no final da sua listagem de rotas, como a última função:

$sitemap->writeToFile($path);

Essa função é responsável por pegar todas as ruas rotas adicionadas acima e importá-las para dentro do sitemap.xml.

Gerando o arquivo sitemap.xml

Agora precisamos rodar essa função, nesse caso via navegador pela rota /gerar-sitemap (http://localhost/gerar-sitemap). Após acessar a rota, será criado o arquivo de sitemap, e estará disponível na rota: http://localhost/sitemap.xml.

Recomendo criar um cron diário na rota http://localhost/gerar-sitemap para mater seu sitemap sempre atualizado.

Então por hoje era isso pessoal, gostou do artigo? Compartilhe com seus amigos!

Gostou? Compartilhe!
Compartilhe com seu amigo dev no WhatsApp:
Douglas Paiani
Autor
Douglas Paiani

Gaúcho, 28 anos de idade, apaixonado por programação e suas tecnologias! Com mais de 15 anos de experiência na área de desenvolvimento web, hoje atuando como especialista em WordPress, trabalhando para várias agências de produção digital do país como FullStack. Focado em ajudar novos entusiastas a atingir o próximo nível do WordPress.

Receba novidades em primeira
mão no seu e-mail

Suas informações estão 100% seguras