Elevate your Filament project with SEO Suite, leveraging the artesaos/seotools package for enhanced search engine optimization. This package allows you to seamlessly integrate and manage SEO features, making your project more search engine friendly.
To install the package you should add the following lines to your composer.json file in the repositories key in order to get access to the private package:
{ "repositories": [ { "type": "composer", "url": "https://seo-suite-for-filamentphp.composer.sh" } ]}
Next, you should require the package via the command line. You will be prompted for your username (which is your e-mail) and your password (which is your license key, e.g. f6183128-5477-4f38-45b1-4842484f4a842:ProjectName).
composer require afatmustafa/seo-suite
Note: This package uses artesaos/seotools behind the scenes, you may also need to follow the installation steps there.
You can publish and run the migrations with:
php artisan vendor:publish --tag="seo-suite-migrations"php artisan migrate
You can publish the config file with (optional):
php artisan vendor:publish --tag="seo-suite-config"
This is the contents of the published config file:
return [ /** * Override the SEO Model to perform custom actions. */ 'model' => \Afatmustafa\SeoSuite\Models\SeoSuite::class, 'table_name' => 'seo_suite', /* |-------------------------------------------------------------------------- | Enabled features. | If you want to disable a feature, set it to false. |-------------------------------------------------------------------------- */ 'features' => [ 'general' => [ 'enabled' => true, 'fields' => [ 'title' => true, 'description' => true, ], ], 'advanced' => [ 'enabled' => true, 'fields' => [ 'canonical' => true, 'noindex' => true, 'nofollow' => true, 'metas' => true, ], ], 'opengraph' => [ 'enabled' => true, 'fields' => [ 'og_title' => true, 'og_description' => true, 'og_type' => true, 'og_properties' => true, ], ], 'x' => [ 'enabled' => true, 'fields' => [ 'x_card_type' => true, 'x_title' => true, 'x_site' => true, ], ], ], // SEO fallbacks 'fallbacks' => [ 'title' => 'title', 'description' => 'description', 'og_type' => 'article', ],];
Optionally, you can publish the translations using
php artisan vendor:publish --tag="seo-suite-translations"
The package currently supports both English and Turkish languages. If you want to add a new language, feel free to create a PR.
First, you need to add the Afatmustafa\SeoSuite\Models\Traits\InteractsWithSeoSuite
trait to your model.
If you want to edit your SEO Fallbacks on a model basis, you can edit them by adding a property called $seoFallbacks
to your model.
// App/Models/Page.phpclass Page extends Model {Â use Afatmustafa\SeoSuite\Models\Traits\InteractsWithSeoSuite;Â protected ?array $seoFallbacks = [ 'title' => 'name', 'description' => 'excerpt' ];}
To use the form component, you can add \Afatmustafa\SeoSuite\SeoSuite::make()
function into your resource.
// App\Filament\Resources\PageResource.phpclass PageResource extends Resource{... public static function form(Form $form): Form { return $form ->schema([ ... Forms\Components\Section::make('SEO Settings') ->schema([ \Afatmustafa\SeoSuite\SeoSuite::make() ]) ... ]); }...}
In your controller you can add the trait Afatmustafa\SeoSuite\Traits\SetsSeoSuite
and then use the setsSeo()
function to set the meta tags.
// App\Http\Controllers\Site\PageController.phpclass PageController extends Controller{ use \Afatmustafa\SeoSuite\Traits\SetsSeoSuite;Â public function home() { $page = \App\Models\Page::whereTemplate('homepage')->first(); $this->setsSeo($page); return view('site.pages.home'); }}
You can use the SEO::generate()
to render the SEO tags in your view.
<html><head> {!! SEO::generate() !!}</head><body>Â </body></html>
Finally, this is how your meta tags will look like in the frontend.
<title>Taking Notes on Taking Notes - Afat.me</title><meta name="description" content="I’ll share my personal journey through various note-taking applications, from Notion to Obsidian, highlighting the pros, cons, and humorous moments along the way."><meta name="google-site-verification" content="lxqpno64dlwihrdkvbgwtzzha0poig"><link rel="canonical" href="https://afat.me"><meta property="og:title" content="My Note-Taking Apps and Experiences"><meta property="og:description" content="Taking notes and being organized is crucial for boosting your productivity as a developer. There are many tools available for taking notes, such as Notion, Craft, and Obsidian. These tools can help you organize your ideas, projects, and daily tasks."><meta property="og:type" content="article"><meta property="article:tag" content="development"><meta property="article:author:gender" content="male"><meta property="article:author:username" content="afatmustafa"><meta property="article:author:last_name" content="Afat"><meta property="article:author:first_name" content="Mustafa"><meta property="article:modified_time" content="2024-08-01 00:00:00"><meta property="article:published_time" content="2024-08-01 00:00:00"><meta name="twitter:title" content="My Note-Taking Apps and Experiences"><meta name="twitter:description" content="I’ll share my personal journey through various note-taking applications, from Notion to Obsidian, highlighting the pros, cons, and humorous moments along the way."><meta name="twitter:site" content="https://afat.me"><meta name="twitter:card" content="summary"><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"Taking Notes on Taking Notes","description":"I’ll share my personal journey through various note-taking applications, from Notion to Obsidian, highlighting the pros, cons, and humorous moments along the way."}</script>
You can set default values for your SEO tags in the artesaos/seotools config file.
// config/seotools.php
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.
Mustafa is a highly motivated Backend Developer with extensive experience in PHP and Laravel. His committed to achieving high levels of efficiency, and continually seek ways to optimize processes. His passion lies in driving innovation and delivering high-quality projects through the effective use of technology.