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
composer require lee-to/laravel-seo-by-url
Publish config
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
php artisan migrate
We've recorded a video on how to use this package. It's the best way to get started using media library
if you use the MoonShine, then publish the resource with this command
php artisan seo:moonshine
For starters, you can choose the best usage approach for you:
- Facade
use Leeto\Seo\Seo;
// ...
Seo::title('Hello world')
- Helper
seo()->title('Hello world')
- DI
use Leeto\Seo\SeoManager;
// ...
public function __invoke(SeoManager $seo)
{
//
}
- Ok I prefer to use the helper
title, descriptions, keywords, og
<html>
<head>
<!-- // ... -->
@seo
<!-- // ... -->
</head>
<div>
@seoText('Default text')
</div>
- set
seo()->title('Im page title')
- set and save in database
seo()->title('Im page title', true)
- other tags
seo()->description('Im page description')
seo()->keywords('Im page description')
seo()->text('Im page description')
seo()->og(['image' => 'link to image'])
- get value
seo()->meta()->title()
seo()->meta()->description()
seo()->meta()->keywords()
seo()->meta()->text()
seo()->meta()->og()
- get html tags
seo()->meta()->html()
- save by model
use Leeto\Seo\Models\Seo;
Seo::create([
'url' => '/',
'title' => 'Im title'
]);
Set in seo config config/seo.php
return [
'default' => [
'title' => 'Im title'
]
]);
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(),
]
]);
}
//
}
import { Head } from '@inertiajs/vue3'
<Head>
<title>{{ $page.props.seo.title }}</title>
<meta name="description" :content="$page.props.seo.description">
</Head>