Primero, asegúrate de tener un proyecto Laravel configurado. Si aún no lo has hecho, puedes crear uno usando Composer:
composer create-project --prefer-dist laravel/laravel nombre-del-proyecto
Crea un controlador para manejar la generación del sitemap. Puedes hacerlo usando el comando Artisan:
php artisan make:controller SitemapController
Luego, abre app/Http/Controllers/SitemapController.php
y añade el siguiente código:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SitemapController extends Controller
{
public function index()
{
// Aquí obtendrás todas las URLs que deseas incluir en el sitemap
$urls = [
['loc' => url('/'), 'lastmod' => now()->toAtomString()],
// Añade más URLs aquí
];
return response()
->view('sitemap', compact('urls'))
->header('Content-Type', 'application/xml');
}
}
En este código, se obtiene un array de URLs y se pasa a la vista sitemap
. La respuesta se configura con el header Content-Type
para especificar que es un archivo XML.
Crea una nueva vista llamada sitemap.blade.php
en el directorio resources/views
. Esta vista generará el XML del sitemap:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($urls as $url)
<url>
<loc>{{ $url['loc'] }}</loc>
<lastmod>{{ $url['lastmod'] }}</lastmod>
</url>
@endforeach
</urlset>
Este archivo utiliza la sintaxis de Blade para iterar sobre las URLs y generar el XML del sitemap.
Ahora, necesitas definir una ruta para acceder al sitemap. Abre el archivo routes/web.php
y añade la siguiente línea:
use App\Http\Controllers\SitemapController;
Route::get('/sitemap.xml', [SitemapController::class, 'index']);
Esta ruta hará que tu sitemap esté disponible en http://tu-dominio.com/sitemap.xml
.
Con todo configurado, visita http://tu-dominio.com/sitemap.xml
en tu navegador. Deberías ver un XML con las URLs de tu sitio.
En un proyecto real, es probable que necesites generar URLs dinámicamente a partir de tu base de datos. Aquí tienes un ejemplo de cómo hacerlo:
public function index()
{
// Obtén las URLs dinámicamente de la base de datos
$posts = \App\Models\Post::all();
$urls = [];
foreach ($posts as $post) {
$urls[] = [
'loc' => url("/post/{$post->slug}"),
'lastmod' => $post->updated_at->toAtomString(),
];
}
return response()
->view('sitemap', compact('urls'))
->header('Content-Type', 'application/xml');
}
En este ejemplo, se asume que tienes un modelo Post
y que cada post tiene un slug
y una fecha de actualización (updated_at
).
Has aprendido cómo crear un sitemap en Laravel utilizando Blade y especificando el MIME type de la respuesta. Este proceso mejora la indexación de tu sitio web y puede ayudar a mejorar tu SEO. Recuerda mantener tu sitemap actualizado con todas las páginas importantes de tu sitio.
Jorge García
Fullstack developer