lee-to / laravel-seo-by-url
Easy seo for Laravel and MoonShine
Installs: 3 983
Dependents: 0
Suggesters: 0
Security: 0
Stars: 18
Watchers: 2
Forks: 3
Open Issues: 3
Requires
- php: ^8.0|^8.1|^8.2
Requires (Dev)
- fakerphp/faker: ^1.9.2
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^7.5
- phpunit/phpunit: ^9.5.8
README
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
Publish config
php artisan vendor:publish --provider="Leeto\Seo\Providers\SeoServiceProvider"
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
Get started
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
Blade directives
Render meta tags
title, descriptions, keywords, og
<html> <head> <!-- // ... --> @seo <!-- // ... --> </head>
Render seo text
<div> @seoText('Default text') </div>
Set and save seo data
- 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' ]);
Default values
Set in seo config config/seo.php
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(), ] ]); } // }
import { Head } from '@inertiajs/vue3' <Head> <title>{{ $page.props.seo.title }}</title> <meta name="description" :content="$page.props.seo.description"> </Head>