SEO в Laravel-проектах часто реализуют вручную: метатеги прописывают в шаблонах, Open Graph дублируют в каждом Blade-файле, канонические ссылки забывают обновлять. В результате код разрастается, а поддерживать его становится сложно. Пакет Seoquent предлагает более аккуратный подход: управлять SEO через fluent-интерфейс прямо из контроллеров или сервисов.
Разберёмся, как он устроен, как его подключить и в каких сценариях он действительно удобен.
Что такое Seoquent
Seoquent - это пакет для Laravel, который позволяет управлять SEO-данными страницы программно. Он объединяет:
стандартные meta-теги
Open Graph
Twitter Cards
canonical URL
title и description
Главная идея централизовать SEO-логику и убрать её из шаблонов.
Установка
Установка стандартная для Laravel-пакетов:
composer require ibrahim-eng12/seoquentПосле установки можно опубликовать конфигурацию:
php artisan vendor:publish --tag=seoquent-configВ проекте появится конфигурационный файл, где можно задать значения по умолчанию.
Базовое использование
Самый простой пример это установка заголовка и описания в контроллере:
use Seoquent;
public function show(Post $post)
{
Seoquent::title($post->title)
->description($post->excerpt)
->canonical(route('posts.show', $post));
return view('posts.show', compact('post'));
}В Blade-шаблоне достаточно один раз вывести SEO-блок:
{!! Seoquent::render() !!}После этого в <head> автоматически появятся нужные теги.
Работа с Open Graph
Open Graph особенно важен для социальных сетей. Seoquent позволяет настроить его через тот же fluent-интерфейс:
Seoquent::openGraph()
->title($post->title)
->description($post->excerpt)
->url(route('posts.show', $post))
->image($post->featured_image)
->type('article');В результате генерируются теги вида:
<meta property="og:title" content="..." />
<meta property="og:description" content="..." />
<meta property="og:image" content="..." />Это избавляет от ручного дублирования.
Twitter Cards
Если проект ориентирован на соцсети, можно настроить и Twitter Cards:
Seoquent::twitter()
->card('summary_large_image')
->title($post->title)
->description($post->excerpt)
->image($post->featured_image);Теперь при публикации ссылки в X превью будет отображаться корректно.
Глобальные настройки
В конфигурационном файле можно задать значения по умолчанию:
название сайта
базовое описание
дефолтное изображение
разделитель в title
Пример настройки:
'title' => [
'default' => 'My Website',
'separator' => ' | ',
],Это удобно для динамического формирования заголовков вроде:
Название статьи | My WebsiteИспользование в middleware
Если нужно добавлять SEO-данные автоматически, можно вынести логику в middleware.
Например:
namespace App\Http\Middleware;
use Closure;
use Seoquent;
class SetDefaultSeo
{
public function handle($request, Closure $next)
{
Seoquent::title('Мой сайт')
->description('Описание по умолчанию');
return $next($request);
}
}Теперь базовые метаданные будут установлены для всех страниц.
Динамическое SEO для блога
Рассмотрим типичный кейс блога.
Контроллер:
public function show(Post $post)
{
Seoquent::title($post->seo_title ?? $post->title)
->description($post->seo_description ?? $post->excerpt)
->canonical(route('posts.show', $post));
Seoquent::openGraph()
->title($post->title)
->description($post->excerpt)
->image($post->featured_image)
->type('article');
return view('posts.show', compact('post'));
}Такой подход позволяет хранить SEO-поля в базе и гибко ими управлять.
Когда стоит использовать Seoquent
Пакет особенно полезен, если:
проект активно использует соцсети
много динамических страниц
SEO-логика зависит от данных модели
хочется держать Blade-шаблоны максимально чистыми
Если сайт небольшой и состоит из нескольких статичных страниц, возможно, проще прописать метатеги вручную.
Плюсы и ограничения
Преимущества:
чистые шаблоны
централизованная SEO-логика
удобный fluent-интерфейс
поддержка Open Graph и Twitter
Ограничения:
дополнительная зависимость
не заменяет полноценные SEO-аудиты
не генерирует sitemap и robots.txt
Seoquent это удобный инструмент для Laravel-разработчиков, которые хотят управлять SEO-метаданными на уровне кода, а не шаблонов. Он упрощает поддержку, особенно в проектах с динамическим контентом, и помогает избежать дублирования.
Если в проекте уже используется сервисная архитектура или строгая структура контроллеров, пакет хорошо вписывается в общий подход.