Ir para o conteúdo

Início rápido

Comece com uma aplicação Laravel 11, 12 ou 13 existente e um banco de dados funcionando. Você precisa de PHP 8.2 ou superior, ou 8.3 para Laravel 13. O núcleo é gratuito sob licença MIT; não exige conta nem licença Pro.

Instalar

Execute os comandos no diretório da aplicação:

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

O service provider é descoberto automaticamente. A migration cria as tabelas SEO, não os models de conteúdo da aplicação.

Antes do exemplo

Os passos pressupõem um model Post, um post salvo e uma rota posts.show cuja view Blade recebe esse post como $post. Adapte os nomes à sua aplicação. O guia adiciona SEO a uma página existente; ele não cria o blog.

Defina APP_URL no .env com a origem pública do site. Para outras formas de renderização, veja Inertia e JSON (EN) ou Livewire (EN).

1. Adicionar a trait ao model

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() informa ao resolvedor a URL canônica do model. Ela alimenta canonical, og:url e entradas do sitemap.

2. Gerar as tags do head

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

@seo($post) gera título, descrição, canonical, robots, Open Graph, Twitter Card e JSON-LD associado aos dados resolvidos. Sem valores explícitos, usa os atributos do model e os padrões configurados; veja a prioridade do resolvedor.

3. Salvar valores explícitos

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

Valores explícitos têm prioridade sobre todas as camadas de fallback. Para metadados traduzidos, informe o idioma: $post->saveSEO(['title' => 'Titre'], 'fr').

Usando seeders

O DatabaseSeeder padrão do Laravel usa WithoutModelEvents, que também desativa o hook de criação automática de HasSEO. Remova essa trait ou chame saveSEO() explicitamente nos seeders.

4. Conferir o resultado

Abra a página pública do post e escolha Exibir código-fonte da página. No <head>, confira se o título contém Custom SEO Title, se a descrição é Custom meta description e se o canonical aponta para a URL pública do post. O sufixo configurado pode aparecer após o título.

Use @seo($post) uma única vez por página. Substitua tags de título e metadados que o layout já produza para evitar duplicatas. Se um valor for inesperado, consulte o guia de explicação (EN) para descobrir sua origem.

5. Adicionar um sitemap, se necessário

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 agora serve o índice gerado. O guia de sitemaps descreve todas as opções.

Próximos passos

rankbeam/laravel-seo é distribuído sob a licença MIT.