← All plugins
Manager Seo
Laravel SEO By URL - это пакет для управления SEO-метаданными в Laravel 9+ и PHP 8+, который позволяет легко сохранять и управлять SEO-информацией (заголовки, описания, ключевые слова, og-теги) для страниц сайта на основе их URL, с поддержкой кэширования и интеграцией с MoonShine админ-панелью.
Prolog
Seo data is stored in the database in the seo
table and is linked to pages based on the url, the url is unique for websites, therefore, the seo in this package is built from it
- Easy to use
- Not tied to entities
- All data is cached relative to url and reset by events on the model
Installation
composer require lee-to/laravel-seo-by-url
composer require lee-to/laravel-seo-by-url
composer require lee-to/laravel-seo-by-url
composer require lee-to/laravel-seo-by-url
composer require lee-to/laravel-seo-by-url
Publish config
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan migrate
php artisan migrate
php artisan migrate
php artisan migrate
php artisan migrate
Are you a visual learner?
We've recorded a video on how to use this package. It's the best way to get started using media library
MoonShine
if you use the MoonShine, then publish the resource with this command
php artisan seo:moonshine
php artisan seo:moonshine
php artisan seo:moonshine
php artisan seo:moonshine
php artisan seo:moonshine
Get started
For starters, you can choose the best usage approach for you:
use Leeto\Seo\Seo;
Seo::title('Hello world')
use Leeto\Seo\Seo;
// ...
Seo::title('Hello world')
use Leeto\Seo\Seo;
// ...
Seo::title('Hello world')
use Leeto\Seo\Seo;
// ...
Seo::title('Hello world')
use Leeto\Seo\Seo;
// ...
Seo::title('Hello world')
seo()->title('Hello world')
seo()->title('Hello world')
seo()->title('Hello world')
seo()->title('Hello world')
seo()->title('Hello world')
use Leeto\Seo\SeoManager;
public function __invoke(SeoManager $seo)
{
}
use Leeto\Seo\SeoManager;
// ...
public function __invoke(SeoManager $seo)
{
//
}
use Leeto\Seo\SeoManager;
// ...
public function __invoke(SeoManager $seo)
{
//
}
use Leeto\Seo\SeoManager;
// ...
public function __invoke(SeoManager $seo)
{
//
}
use Leeto\Seo\SeoManager;
// ...
public function __invoke(SeoManager $seo)
{
//
}
- Ok I prefer to use the helper
Blade directives
Render meta tags
title, descriptions, keywords, og
<html>
<head>
<!--
@seo
<!-- </head>
<html>
<head>
<!-- // ... -->
@seo
<!-- // ... -->
</head>
<html>
<head>
<!-- // ... -->
@seo
<!-- // ... -->
</head>
<html>
<head>
<!-- // ... -->
@seo
<!-- // ... -->
</head>
<html>
<head>
<!-- // ... -->
@seo
<!-- // ... -->
</head>
Render seo text
<div>
@seoText('Default text')
</div>
<div>
@seoText('Default text')
</div>
<div>
@seoText('Default text')
</div>
<div>
@seoText('Default text')
</div>
<div>
@seoText('Default text')
</div>
Set and save seo data
seo()->title('Im page title')
seo()->title('Im page title')
seo()->title('Im page title')
seo()->title('Im page title')
seo()->title('Im page title')
seo()->title('Im page title', true)
seo()->title('Im page title', true)
seo()->title('Im page title', true)
seo()->title('Im page title', true)
seo()->title('Im page title', true)
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
seo()->meta()->html()
seo()->meta()->html()
seo()->meta()->html()
seo()->meta()->html()
seo()->meta()->html()
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
Default values
Set in seo config config/seo.php
return [
'default' => [
'title' => 'Im title'
]
]);
return [
'default' => [
'title' => 'Im title'
]
]);
return [
'default' => [
'title' => 'Im title'
]
]);
return [
'default' => [
'title' => 'Im title'
]
]);
return [
'default' => [
'title' => 'Im title'
]
]);
Inertia
Use Shared Data
class HandleInertiaRequests extends Middleware
{
public function share(Request $request)
{
return array_merge(parent::share($request), [
'seo' => [
'title' => seo()->meta()->title(),
'description' => seo()->meta()->description(),
'keywords' => seo()->meta()->keywords(),
'og' => seo()->meta()->og(),
'text' => seo()->meta()->text(),
]
]);
}
}
class HandleInertiaRequests extends Middleware
{
//
public function share(Request $request)
{
return array_merge(parent::share($request), [
// ...
'seo' => [
'title' => seo()->meta()->title(),
'description' => seo()->meta()->description(),
'keywords' => seo()->meta()->keywords(),
'og' => seo()->meta()->og(),
'text' => seo()->meta()->text(),
]
]);
}
//
}
class HandleInertiaRequests extends Middleware
{
//
public function share(Request $request)
{
return array_merge(parent::share($request), [
// ...
'seo' => [
'title' => seo()->meta()->title(),
'description' => seo()->meta()->description(),
'keywords' => seo()->meta()->keywords(),
'og' => seo()->meta()->og(),
'text' => seo()->meta()->text(),
]
]);
}
//
}
class HandleInertiaRequests extends Middleware
{
//
public function share(Request $request)
{
return array_merge(parent::share($request), [
// ...
'seo' => [
'title' => seo()->meta()->title(),
'description' => seo()->meta()->description(),
'keywords' => seo()->meta()->keywords(),
'og' => seo()->meta()->og(),
'text' => seo()->meta()->text(),
]
]);
}
//
}
class HandleInertiaRequests extends Middleware
{
//
public function share(Request $request)
{
return array_merge(parent::share($request), [
// ...
'seo' => [
'title' => seo()->meta()->title(),
'description' => seo()->meta()->description(),
'keywords' => seo()->meta()->keywords(),
'og' => seo()->meta()->og(),
'text' => seo()->meta()->text(),
]
]);
}
//
}
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>