Ir al contenido

Inicio rápido

Parte de una aplicación Laravel 11, 12 o 13 existente y una base de datos operativa. Necesitas PHP 8.2 o superior, o 8.3 para Laravel 13. El núcleo es gratuito bajo licencia MIT; no requiere cuenta ni licencia Pro.

Instalar

Ejecuta estos comandos desde el directorio de la aplicación:

bash
composer require rankbeam/laravel-seo
php artisan vendor:publish --tag=seo-config
php artisan migrate

El proveedor de servicios se descubre automáticamente. La migración crea las tablas SEO, no los modelos de contenido de tu aplicación.

Antes del ejemplo

Los pasos suponen que ya tienes un modelo Post, una publicación guardada y una ruta posts.show cuya vista Blade recibe esa publicación como $post. Adapta los nombres a tu aplicación. Esta guía añade SEO a una página existente, no construye el blog.

Configura APP_URL en .env con el origen público del sitio. Para otras formas de renderizado, consulta Inertia y JSON (EN) o Livewire (EN).

1. Añadir el trait al modelo

php
use Illuminate\Database\Eloquent\Model;
use Rankbeam\Seo\Traits\HasSEO;

class Post extends Model
{
    use HasSEO;

    public function getUrlForSEO(): string
    {
        return route('posts.show', $this);
    }
}

getUrlForSEO() indica al resolvedor la URL canónica del modelo. Se utiliza para canonical, og:url y las entradas del sitemap.

2. Generar las etiquetas del head

blade
<!DOCTYPE html>
<html>
<head>
    @seo($post)
</head>

@seo($post) genera título, descripción, canonical, robots, Open Graph, Twitter Card y el JSON-LD asociado a los datos resueltos. Si aún no hay valores explícitos, usa los atributos del modelo y la configuración; consulta la prioridad del resolvedor.

3. Guardar valores explícitos

php
$post->saveSEO([
    'title' => 'Custom SEO Title',
    'description' => 'Custom meta description',
]);

Los valores explícitos tienen prioridad sobre todos los niveles de respaldo. Para guardar metadatos traducidos, pasa el idioma: $post->saveSEO(['title' => 'Titre'], 'fr').

Cargar datos con seeders

El DatabaseSeeder predeterminado de Laravel usa WithoutModelEvents, que también desactiva el hook de creación automática de HasSEO. Retira ese trait o llama a saveSEO() de forma explícita en los seeders.

4. Comprobar el resultado

Abre la página pública y selecciona Ver código fuente de la página. En <head>, comprueba que el título contiene Custom SEO Title, la descripción es Custom meta description y el canonical apunta a la URL pública. El sufijo configurado puede aparecer después del título.

Incluye @seo($post) una sola vez por página. Sustituye las etiquetas de título y metadatos que ya genere el layout para evitar duplicados. Si un valor no es el esperado, utiliza la guía de explicación (EN) para averiguar su origen.

5. Añadir un sitemap, si lo necesitas

php
// e.g. in AppServiceProvider::boot()
use App\Models\Post;
use Rankbeam\Seo\Facades\SEO;

SEO::sitemaps()->register('posts', Post::class);
bash
composer require spatie/laravel-sitemap
php artisan seo:sitemap

/sitemap.xml sirve ahora el índice generado. La guía de sitemaps describe todas las opciones.

Siguientes pasos

rankbeam/laravel-seo se distribuye bajo la licencia MIT.