eusonlito/laravel-meta is a Laravel package for a package to manage header meta tags.
It currently has 193 GitHub stars and 541.197 downloads on Packagist (latest version v3.3.0).
Install it with composer require eusonlito/laravel-meta.
Discover more Laravel packages by eusonlito
or browse all Laravel packages to compare alternatives.
Last updated
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.
Begin by installing this package through Composer.
{
"require": {
"eusonlito/laravel-meta": "3.1.*"
}
}
// 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"
<?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'));
}
}
<?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');
}
}
<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 - [email protected]" />
<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 - [email protected]" />
<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>
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');
}
}
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'],
];
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');
<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'); ?>
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')