eusonlito / laravel-meta
A package to manage Header Meta Tags
Installs: 440 952
Dependents: 4
Suggesters: 0
Security: 0
Stars: 196
Watchers: 9
Forks: 80
Open Issues: 1
Language:JavaScript
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^9.3
README
With this package you can manage header Meta Tags from Laravel controllers.
If you want a Laravel <= 4.2 compatible version, please use v4.2
branch.
Installation
Begin by installing this package through Composer.
{ "require": { "eusonlito/laravel-meta": "3.1.*" } }
Laravel installation
// config/app.php 'providers' => [ '...', Eusonlito\LaravelMeta\MetaServiceProvider::class ]; 'aliases' => [ '...', 'Meta' => Eusonlito\LaravelMeta\Facade::class, ];
Now you have a Meta
facade available.
Publish the config file:
php artisan vendor:publish --provider="Eusonlito\LaravelMeta\MetaServiceProvider"
app/Http/Controllers/Controller.php
<?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesCommands; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; use Meta; abstract class Controller extends BaseController { use DispatchesCommands, ValidatesRequests; public function __construct() { # Default title Meta::title('This is default page title to complete section title'); # Default robots Meta::set('robots', 'index,follow'); # Default image Meta::set('image', asset('images/logo.png')); } }
app/Http/Controllers/HomeController.php
<?php namespace App\Http\Controllers; use Meta; class HomeController extends Controller { public function index() { # Section description Meta::set('title', 'You are at home'); Meta::set('description', 'This is my home. Enjoy!'); Meta::set('image', asset('images/home-logo.png')); return view('index'); } public function detail() { # Section description Meta::set('title', 'This is a detail page'); Meta::set('description', 'All about this detail page'); # Remove previous images Meta::remove('image'); # Add only this last image Meta::set('image', asset('images/detail-logo.png')); # Canonical URL Meta::set('canonical', 'http://example.com'); return view('detail'); } public function private() { # Section description Meta::set('title', 'Private Area'); Meta::set('description', 'You shall not pass!'); Meta::set('image', asset('images/locked-logo.png')); # Custom robots for this section Meta::set('robots', 'noindex,nofollow'); return view('private'); } }
resources/views/html.php
<html> <head> <meta charset="utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="author" content="Lito - lito@eordes.com" /> <title>{!! Meta::get('title') !!}</title> {!! Meta::tag('robots') !!} {!! Meta::tag('site_name', 'My site') !!} {!! Meta::tag('url', Request::url()); !!} {!! Meta::tag('locale', 'en_EN') !!} {!! Meta::tag('title') !!} {!! Meta::tag('description') !!} {!! Meta::tag('canonical') !!} {{-- Print custom section images and a default image after that --}} {!! Meta::tag('image', asset('images/default-logo.png')) !!} </head> <body> ... </body> </html>
Or you can use Blade directives:
<html> <head> <meta charset="utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="author" content="Lito - lito@eordes.com" /> <title>{!! Meta::get('title') !!}</title> @meta('robots') @meta('site_name', 'My site') @meta('url', Request::url()) @meta('locale', 'en_EN') @meta('title') @meta('description') @meta('canonical') {{-- Print custom section images and a default image after that --}} @meta('image', asset('images/default-logo.png')) {{-- Or use @metas to get all tags at once --}} @metas </head> <body> ... </body> </html>
MetaProduct / og:product
This will allow you to add product data to your meta data. See Open Graph product object
// resources/views/html.php <head> ... {!! Meta::tag('type') !!} // this is needed for Meta Product to change the og:type to og:product {!! Meta::tag('product') !!} </head>
Add your product data from your controller
<?php namespace App\Http\Controllers; use Meta; class ProductController extends Controller { public function show() { # Add product meta Meta::set('product', [ 'price' => 100, 'currency' => 'EUR', ]); # if multiple currencies just add more product metas Meta::set('product', [ 'price' => 100, 'currency' => 'USD', ]); return view('index'); } }
Config
return [ /* |-------------------------------------------------------------------------- | Limit title meta tag length |-------------------------------------------------------------------------- | | To best SEO implementation, limit tags. | */ 'title_limit' => 70, /* |-------------------------------------------------------------------------- | Limit description meta tag length |-------------------------------------------------------------------------- | | To best SEO implementation, limit tags. | */ 'description_limit' => 200, /* |-------------------------------------------------------------------------- | Limit image meta tag quantity |-------------------------------------------------------------------------- | | To best SEO implementation, limit tags. | */ 'image_limit' => 5, /* |-------------------------------------------------------------------------- | Available Tag formats |-------------------------------------------------------------------------- | | A list of tags formats to print with each definition | */ 'tags' => ['Tag', 'MetaName', 'MetaProperty', 'MetaProduct', 'TwitterCard'], ];
Using Meta outside Laravel
Controller
require __DIR__.'/vendor/autoload.php'; // Check default settings $config = require __DIR__.'/src/config/config.php'; $Meta = new Eusonlito\LaravelMeta\Meta($config); # Default title $Meta->title('This is default page title to complete section title'); # Default robots $Meta->set('robots', 'index,follow'); # Section description $Meta->set('title', 'This is a detail page'); $Meta->set('description', 'All about this detail page'); $Meta->set('image', '/images/detail-logo.png'); # Canonical URL $Meta->set('canonical', 'http://example.com');
Template
<title><?= $Meta->get('title'); ?></title> <?= $Meta->tag('robots'); ?> <?= $Meta->tag('site_name', 'My site'); ?> <?= $Meta->tag('url', getenv('REQUEST_URI')); ?> <?= $Meta->tag('locale', 'en_EN'); ?> <?= $Meta->tag('title'); ?> <?= $Meta->tag('description'); ?> <?= $Meta->tag('canonical'); ?> # Print custom section image and a default image after that <?= $Meta->tag('image', '/images/default-logo.png'); ?>
Updates from 2.*
Meta::meta('title', 'Section Title')
>Meta::set('title', 'Section Title')
Meta::meta('title')
>Meta::get('title')
Meta::tagMetaName('title')
>Meta::tag('title')
Meta::tagMetaProperty('title')
>Meta::tag('title')