SEO Suite Pro
This package allows you to seamlessly integrate and manage SEO features, making your project more search engine friendly.
Author:
Mustafa Afat
Documentation
- Features
- Installation
- Usage
- Result 🤩
- Default Values
- Roadmap
- Testing
- Changelog
- Contributing
- Security Vulnerabilities
- Credits
- License
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.

#Features
- Ready-to-use form component: Easily add SEO settings to your resources.
- Set title and meta tags: Quickly configure title and meta tags.
- Social media integration: Support for Twitter Cards and Open Graph.
- Multiple open graph types: Supports 3 open graph types: article, book, profile.
- Multiple twitter card types: Supports 4 twitter card types: summary, summary_large_image, app, player.
- Fallback ready: Ensures robust default values.
- Ready-to-translate: Supports multiple languages.
#Installation
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.
#Usage
#In Your Model
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.php
class Page extends Model {
use Afatmustafa\SeoSuite\Models\Traits\InteractsWithSeoSuite;
protected ?array $seoFallbacks = [
'title' => 'name',
'description' => 'excerpt'
];
}
#In Your Resource
To use the form component, you can add \Afatmustafa\SeoSuite\SeoSuite::make() function into your resource.
// App\Filament\Resources\PageResource.php
class 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 Frontend Controller
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.php
class 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');
}
}
#In Your View
You can use the SEO::generate() to render the SEO tags in your view.
<html>
<head>
{!! SEO::generate() !!}
</head>
<body>
</body>
</html>
#Result 🤩
#Frontend Result
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>
#Panel Result

#Supported Open Graph Types

#Default Values
You can set default values for your SEO tags in the artesaos/seotools config file.
// config/seotools.php
#Roadmap
- JSON-LD support
- Multi-language support with spatie/laravel-translatable
- OG Image support with spatie/laravel-medialibrary
- Admin page for managing default SEO values like prefix, suffix, etc.
- Cache support
- More Open Graph types
- Music / Song
- Music / Album
- Music / Playlist
- Music / Radio Station
- Video / Movie
- Video / Episode
- Video / TV Show
- Video / Other
#Testing
composer test
#Changelog
Please see CHANGELOG for more information on what has changed recently.
#Contributing
Please see CONTRIBUTING for details.
#Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
#Credits
#License
The MIT License (MIT). Please see License File for more information.
The author
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.
From the same author
Featured Plugins
A selection of plugins curated by the Filament team
Custom Dashboards
Let your users build and share their own dashboards with a drag-and-drop interface. Define your data sources in PHP and let them do the rest.
Filament
Custom Fields
Eliminate custom field migrations forever. Let your users create and manage form fields directly in Filament admin panels with 20+ built-in field types, validation, and zero database changes.
Relaticle
Advanced Tables (formerly Filter Sets)
Supercharge your tables with powerful features like user-customizable views, quick filters, multi-column sorting, advanced table searching, convenient view management, and more. Compatible with Resource Panel Tables, Relation Managers, Table Widgets, and Table Builder!
Kenneth Sese