littleboy130491 / seo-suite
SEO Suite for FilamentPHP: Easily integrate and manage SEO features in your Filament projects
Requires
- php: ^8.1
- artesaos/seotools: ^1.3
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- filament/filament: ^3.2
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.1
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2025-06-13 09:22:49 UTC
README
This project is a fork of https://packagist.org/packages/afatmustafa/seo-suite. It inherits the core functionalities from the original repository, with additional customizations and improvements.
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
composer require littleboy130491/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' => \Littleboy130491\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 Littleboy130491\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 Littleboy130491\SeoSuite\Models\Traits\InteractsWithSeoSuite; protected ?array $seoFallbacks = [ 'title' => 'name', 'description' => 'excerpt' ]; }
In Your Resource
To use the form component, you can add \Littleboy130491\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([ \Littleboy130491\SeoSuite\SeoSuite::make() ]) ... ]); } ... }
In Your Frontend Controller
In your controller you can add the trait Littleboy130491\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 \Littleboy130491\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.