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!