1. Go to this page and download the library: Download honeystone/laravel-seo library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
honeystone / laravel-seo example snippets
seo()
->title('A fantastic blog post', 'My Awesome Website!')
->description('Theres really a lot of great stuff in here...')
->images(
'https://mywebsite.com/images/blog-1/cover-image.webp',
'https://mywebsite.com/images/blog-1/another-image.webp',
);
seo()->generate();
seo()
->locale('en_GB')
->title('A fantastic blog post', template: '🔥🔥 {title} 🔥🔥')
->description('Theres really a lot of great stuff in here...')
->keywords('foo', 'bar', 'baz')
->url('https://mywebsite.com/blog/a-fantastic-blog-post') //defaults to the current url
->canonical('https://mywebsite.com/blog/a-fantastic-blog-post') //by default url and canonical are in sync, see config
->canonicalEnabled(true) //enabled by default, see config
->images(
'https://mywebsite.com/images/blog-1/cover-image.webp',
'https://mywebsite.com/images/blog-1/another-image.webp',
)
->robots('🤖', '🤖', '🤖');
seo()
->metaTitle('A fantastic blog post')
->metaTitleTemplate('🔥🔥 {title} 🔥🔥')
->metaDescription('Theres really a lot of great stuff in here...')
->metaKeywords('foo', 'bar', 'baz')
->metaCanonical('https://mywebsite.com/blog/a-fantastic-blog-post')
->metaCanonicalEnabled(true)
->metaRobots('🤖', '🤖', '🤖');
seo()
->twitterEnabled(true) //enabled by default, see config
->twitterSite('@MyWebsite')
->twitterCreator('@MyTwitter')
->twitterTitle('A fantastic blog post') //defaults to title()
->twitterDescription('Theres really a lot of great stuff in here...') //defaults to description()
->twitterImage('https://mywebsite.com/images/blog-1/cover-image.webp'); //defaults to the first in images()
seo()
->openGraphEnabled(true) //enabled by default, see config
->openGraphSite('My Website')
->openGraphType('website') //defaults to website, see config
->openGraphTitle('A fantastic blog post') //defaults to title()
->openGraphDescription('Theres really a lot of great stuff in here...') //defaults to description()
->openGraphImage('https://mywebsite.com/images/blog-1/cover-image.webp')
->openGraphImages([
'https://mywebsite.com/images/blog-1/cover-image.webp',
'https://mywebsite.com/images/blog-1/another-image.webp',
]) //defaults to images()
->openGraphUrl('https://mywebsite.com/blog/a-fantastic-blog-post') //defaults to url()
->openGraphAudio([
'https://mywebsite.com/music/song1.mp3',
'https://mywebsite.com/music/song2.mp3',
])
->openGraphVideo('https://mywebsite.com/films/video1.mp4')
->openGraphVideos([
'https://mywebsite.com/films/video1.mp4',
'https://mywebsite.com/films/video2.mp4',
])
->openGraphDeterminer(OpenGraphGenerator::DETERMINER_A)
->openGraphLocale('en_GB') //defaults to locale()
->openGraphAlternateLocales(['en_US'])
->openGraphProperty('custom:property', '💀');
use Honeystone\Seo\OpenGraph\ArticleProperties;
use Honeystone\Seo\OpenGraph\BookProperties;
use Honeystone\Seo\OpenGraph\ProfileProperties;
//article
seo()
->openGraphType(new ArticleProperties(
publishedTime: new DateTime('now'),
modifiedTime: new DateTime('now'),
expirationTime: null,
author: new ProfileProperties(
username: 'PiranhaGeorge',
),
section: 'Foo',
tag: 'Bar',
));
//book
seo()
->openGraphType(new BookProperties(
author: [
new ProfileProperties(
firstName: 'Erich',
lastName: 'Gamma',
),
new ProfileProperties(
firstName: 'Richard',
lastName: 'Helm',
),
new ProfileProperties(
firstName: 'Ralph',
lastName: 'Johnson',
),
new ProfileProperties(
firstName: 'John',
lastName: 'Vlissides',
),
],
isbn: '978-0201633610',
releaseDate: new DateTime('14 March 1995'),
tag: ['1st', 'GoF'],
));
//profile
seo()
->openGraphType(new ProfileProperties(
username: 'PiranhaGeorge'
firstName: 'George',
lastName: 'Palmer',
gender: 'male',
));
seo()
->jsonLdEnabled(true) //enabled by default, see config
->jsonLdType('WebPage') //defaults to WebPage, see config
->jsonLdName('A fantastic blog post') //defaults to title()
->jsonLdDescription('Theres really a lot of great stuff in here...') //defaults to description()
->jsonLdImage('https://mywebsite.com/images/blog-1/cover-image.webp')
->jsonLdImages([
'https://mywebsite.com/images/blog-1/cover-image.webp',
'https://mywebsite.com/images/blog-1/another-image.webp',
]) //defaults to images()
->jsonLdUrl('https://mywebsite.com/blog/a-fantastic-blog-post') //defaults to url()
->jsonLdNonce('some-value') //sets a nonce value for your content security policy
->jsonLdProperty('alternateName', 'Foo');
//perhaps in a controller
seo()
->title('Something awesome')
->jsonLdExpect('featured-tags', 'gallery', 'contact');
//maybe in a view composer or component
seo()
->jsonLdCheckIn('gallery')
->jsonLdGraph()
->imageGallery()
->image([
...
]);
use Honeystone\Seo\MetadataDirector;
use Illuminate\Database\Eloquent\Model;
class Page extends Model
{
public function seo(): MetadataDirector
{
return seo()
->title($this->meta_title)
->description($this->meta_description)
->jsonLdExpect('featured-items');
}
}
use Illuminate\Contracts\View\View;
class PageController
{
public function __invoke(Page $page): View
{
$page->seo()
->jsonLdCheckIn('featured-items')
->jsonLdGraph()
->itemList()
->name('Featured items')
->itemListElement([
//...
]);
}
}
declare(strict_types=1);
use Honeystone\Seo\Generators;
return [
'generators' => [
Generators\MetaGenerator::class => [
'title' => env('APP_NAME'),
'titleTemplate' => '{title} - '.env('APP_NAME'),
'description' => '',
'keywords' => [],
'canonicalEnabled' => true,
'canonical' => null, //null to use current url
'robots' => [],
'custom' => [
// [
// 'greeting' => 'Hey, thanks for checking out the source code of our website. '.
// 'Hopefully you find what you are looking for 👍'
// ],
// [
// 'google-site-verification' => 'xxx',
// ],
],
],
Generators\TwitterGenerator::class => [
'enabled' => true,
'site' => '', // @twitterUsername
'creator' => '',
'title' => '',
'description' => '',
'image' => '',
],
Generators\OpenGraphGenerator::class => [
'enabled' => true,
'site' => env('APP_NAME'),
'type' => 'website',
'title' => '',
'description' => '',
'images' => [],
'audio' => [],
'videos' => [],
'determiner' => '',
'url' => null, // null to use current url
'locale' => '',
'alternateLocales' => [],
'custom' => [],
],
Generators\JsonLdGenerator::class => [
'enabled' => true,
'pretty' => env('APP_DEBUG'),
'type' => 'WebPage',
'name' => '',
'description' => '',
'images' => [],
'url' => null, // null to use current url
'custom' => [],
// determines if the configured json-ld is automatically placed on the graph
'place-on-graph' => true,
],
],
'sync' => [
'url-canonical' => true,
'keywords-tags' => false,
],
];