SEOTools یک پکیج برای +5 Laravel و Lumen هست که یکسری کمکی برای تکنیک های معمول SEO فراهم میکنه.
ویژگی ها
- رابط کاربری مناسب
 - راحتی در قرار دادن عناوین و meta tag ها
 - راحتی در قرار دادن meta برای توئیتر و opengraph
 
نصب
1 - وابستگی ها
اولین قدم استفاده از کامپوزر برای نصب پکیج و آپدیت خودکار فایل composer.json هست. شما میتونید این کار رو با اجرای دستور زیر انجام بدید :
composer require artesaos/seotools
2 - Provider و Facade
شما باید پیکربندی اپلیکیشن تون رو به روز کنید تا پکیج ثبت بشه. فایل config/app.php رو باز کرده و کد زیر رو پایین بخش providers قرار بدید :
// file START ommited
    'providers' => [
        // other providers ommited
        Artesaos\SEOTools\Providers\SEOToolsServiceProvider::class,
    ],
// file END ommited
برای استفاده از SEOMeta facade هم باید در فایل config/app.php به صورت زیر تغییرات رو انجام بدید :
// file START ommited
    'aliases' => [
        // other Facades ommited
        'SEOMeta'   => Artesaos\SEOTools\Facades\SEOMeta::class,
        'OpenGraph' => Artesaos\SEOTools\Facades\OpenGraph::class,
        'Twitter'   => Artesaos\SEOTools\Facades\TwitterCard::class,
        // or
        'SEO' => Artesaos\SEOTools\Facades\SEOTools::class,
    ],
// file END ommited
پیکربندی
انتشار فایل پیکربندی
در ترمینال خود دستور زیر رو اجرا کنید :
php artisan vendor:publish
و یا میتونید از این دستور استفاده کنید :
php artisan vendor:publish --provider="Artesaos\SEOTools\Providers\SEOToolsServiceProvider"
در فایل پیکربندی seotools.php شما میتونید پراپرتی های پیشفرض رو ملاحظه کنید و مقادیرش رو بصورت دلخواه تغییر بدید.
فایل seotools.php
- meta
 - defaults - اگر مقداری برای صفحه ی نمایشی تعیین نشد, چه مقداری باید نمایش داده بشه. اگر مقدارش false باشه هیچ چیزی نمایش داده نمیشه.
 - webmaster - تنظیمات مقادیر تگ ها برای ابزارهای وب مستر بزرگ هست. اگر null قرار بدید هیچ چیزی نمایش داده نمیشه.
 - opengraph
 - defaults - پراپرتی هایی که همیشه و هرگاه مقداری دیگری تنظیم نشده باشد, نمایش داده می شوند. شما میتونید تگ های اضافه بیافزایید که در فایل پیکربندی اورجینال وجود ندارند.
 
نحوه استفاده
نحوه استفاده در Lumen
$seotools = app('seotools');
$metatags = app('seotools.metatags');
$twitter = app('seotools.twitter');
$opengraph = app('seotools.opengraph');
// The behavior is the same as the facade
// --------
echo app('seotools')->generate();
- با استفاده از SEOMeta میتونید تگ های meta به head اضافه کنید.
 - با استفاده از OpenGraph میتونید تگ های opengraph به head اضافه کنید.
 - با استفاده از Twitter هم میتونید تگ های opengraph رو به head بیافزایید.
 
در قسمت کنترلر :
use SEOMeta;
use OpenGraph;
use Twitter;
## or
use SEO;
class CommomController extends Controller
{
    /**
     * @return \Illuminate\View\View
     */
    public function index()
    {
        SEOMeta::setTitle('Home');
        SEOMeta::setDescription('This is my page description');
        SEOMeta::setCanonical('https://codecasts.com.br/lesson');
        OpenGraph::setDescription('This is my page description');
        OpenGraph::setTitle('Home');
        OpenGraph::setUrl('http://current.url.com');
        OpenGraph::addProperty('type', 'articles');
        Twitter::setTitle('Homepage');
        Twitter::setSite('@LuizVinicius73');
        ## Or
        SEO::setTitle('Home');
        SEO::setDescription('This is my page description');
        SEO::opengraph()->setUrl('http://current.url.com');
        SEO::setCanonical('https://codecasts.com.br/lesson');
        SEO::opengraph()->addProperty('type', 'articles');
        SEO::twitter()->setSite('@LuizVinicius73');
        $posts = Post::all();
        return view('myindex', compact('posts'));
    }
    /**
     * @return \Illuminate\View\View
     */
    public function show($id)
    {
        $post = Post::find($id);
        SEOMeta::setTitle($post->title);
        SEOMeta::setDescription($post->resume);
        SEOMeta::addMeta('article:published_time', $post->published_date->toW3CString(), 'property');
        SEOMeta::addMeta('article:section', $post->category, 'property');
        SEOMeta::addKeyword(['key1', 'key2', 'key3']);
        OpenGraph::setDescription($post->resume);
        OpenGraph::setTitle($post->title);
        OpenGraph::setUrl('http://current.url.com');
        OpenGraph::addProperty('type', 'article');
        OpenGraph::addProperty('locale', 'pt-br');
        OpenGraph::addProperty('locale:alternate', ['pt-pt', 'en-us']);
        OpenGraph::addImage($post->cover->url);
        OpenGraph::addImage($post->images->list('url'));
        OpenGraph::addImage(['url' => 'http://image.url.com/cover.jpg', 'size' => 300]);
        OpenGraph::addImage('http://image.url.com/cover.jpg', ['height' => 300, 'width' => 300]);
        // Namespace URI: http://ogp.me/ns/article#
        // article
        OpenGraph::setTitle('Article')
            ->setDescription('Some Article')
            ->setType('article')
            ->setArticle([
                'published_time' => 'datetime',
                'modified_time' => 'datetime',
                'expiration_time' => 'datetime',
                'author' => 'profile / array',
                'section' => 'string',
                'tag' => 'string / array'
            ]);
        // Namespace URI: http://ogp.me/ns/book#
        // book
        OpenGraph::setTitle('Book')
            ->setDescription('Some Book')
            ->setType('book')
            ->setBook([
                'author' => 'profile / array',
                'isbn' => 'string',
                'release_date' => 'datetime',
                'tag' => 'string / array'
            ]);
        // Namespace URI: http://ogp.me/ns/profile#
        // profile
        OpenGraph::setTitle('Profile')
             ->setDescription('Some Person')
            ->setType('profile')
            ->setProfile([
                'first_name' => 'string',
                'last_name' => 'string',
                'username' => 'string',
                'gender' => 'enum(male, female)'
            ]);
        // Namespace URI: http://ogp.me/ns/music#
        // music.song
        OpenGraph::setType('music.song')
            ->setMusicSong([
                'duration' => 'integer',
                'album' => 'array',
                'album:disc' => 'integer',
                'album:track' => 'integer',
                'musician' => 'array'
            ]);
        // music.album
        OpenGraph::setType('music.album')
            ->setMusicAlbum([
                'song' => 'music.song',
                'song:disc' => 'integer',
                'song:track' => 'integer',
                'musician' => 'profile',
                'release_date' => 'datetime'
            ]);
         //music.playlist
        OpenGraph::setType('music.playlist')
            ->setMusicPlaylist([
                'song' => 'music.song',
                'song:disc' => 'integer',
                'song:track' => 'integer',
                'creator' => 'profile'
            ]);
        // music.radio_station
        OpenGraph::setType('music.radio_station')
            ->setMusicRadioStation([
                'creator' => 'profile'
            ]);
        // Namespace URI: http://ogp.me/ns/video#
        // video.movie
        OpenGraph::setType('video.movie')
            ->setVideoMovie([
                'actor' => 'profile / array',
                'actor:role' => 'string',
                'director' => 'profile /array',
                'writer' => 'profile / array',
                'duration' => 'integer',
                'release_date' => 'datetime',
SEOTrait
use Artesaos\SEOTools\Traits\SEOTools as SEOToolsTrait;
class CommomController extends Controller
{
    use SEOToolsTrait;
    /**
     * @return \Illuminate\View\View
     */
    public function index()
    {
        $this->seo()->setTitle('Home');
        $this->seo()->setDescription('This is my page description');
        $this->seo()->opengraph()->setUrl('http://current.url.com');
        $this->seo()->opengraph()->addProperty('type', 'articles');
        $this->seo()->twitter()->setSite('@LuizVinicius73');
        $posts = Post::all();
        return view('myindex', compact('posts'));
    }
}
در قسمت View
نکته : برای کاهش سایر فایل و استفاده از نسخه minified میتونید پارامتر رو true بدهید :
<html>
<head>
{!! SEOMeta::generate() !!}
{!! OpenGraph::generate() !!}
{!! Twitter::generate() !!}
    <!-- OR -->
{!! SEO::generate() !!}
  <!-- MINIFIED -->
{!! SEO::generate(true) !!}
    <!-- LUMEN -->
{!! app('seotools')->generate() !!}
</head>
<body>
</body>
</html>
                                    
                                    
    
        
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید