Lightweight, modern SEO toolkit for Laravel, Inertia, Schema.org, sitemaps, robots, OpenGraph, Twitter Cards and optional AI SEO.
v1.0.0
2026-05-15 16:41 UTC
Requires
- php: ^8.2|^8.3|^8.4
- illuminate/contracts: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^2.0|^3.0
- laravel/pint: ^1.18
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0|^10.0|^11.0
- pestphp/pest: ^2.0|^3.0
- pestphp/pest-plugin-laravel: ^2.0|^3.0
- phpstan/phpstan: ^1.10|^2.0
This package is auto-updated.
Last update: 2026-05-15 17:06:23 UTC
README
Modern AI-Powered SEO Toolkit for Laravel, Inertia.js & Modern Web Apps.
Features
- Meta Tags
- OpenGraph
- Twitter/X Cards
- JSON-LD Schema
- Multi Schema Builder
- Canonical & hreflang Links
- Inertia.js SEO Payloads
- React/Vue SSR Helpers
- SSR Support
- Sitemap Generator
- Image Sitemap
- Video Sitemap
- News Sitemap
- Robots.txt Generator
- SEO Audit Command
- Performance SEO Helpers
- Auto Model SEO
- Blade Components
- Optional AI SEO Drivers
- Laravel Auto Discovery
- Livewire Support
- Filament Support
- Nova Support
- Developer Friendly Fluent API
Installation
composer require programmerhasan/seo
Publish config:
php artisan vendor:publish --tag=seo-config
Publish views:
php artisan vendor:publish --tag=seo-views
Quick Usage
use ProgrammerHasan\Seo\Facades\Seo; Seo::title('Laravel SEO Package') ->description('A lightweight SEO toolkit for Laravel.') ->canonical(url()->current()) ->image(asset('images/og.jpg'));
Render SEO tags:
<head> {!! Seo::generate() !!} </head>
Or use the Blade component:
<x-seo />
Fluent Builder API
$html = Seo::make() ->title('Best Laravel SEO Toolkit') ->description('Modern SEO package for Laravel, Inertia and APIs.') ->canonical('https://example.com/packages/seo') ->image('https://example.com/images/seo-og.jpg') ->article(published: now()->toAtomString()) ->generate();
Meta Tags
Seo::title('Page title'); Seo::description('Page description'); Seo::keywords(['laravel', 'seo', 'schema']); Seo::canonical('https://example.com/page'); Seo::author('Programmer Hasan'); Seo::robots('index, follow'); Seo::noIndex(); Seo::noFollow();
OpenGraph
Seo::title('Product page') ->description('Product description') ->image('https://example.com/product.jpg') ->type('product') ->og('locale', 'en_US') ->og('site_name', 'Example Store');
Twitter/X Cards
Seo::twitter('card', 'summary_large_image') ->twitter('site', '@yourhandle') ->twitter('creator', '@programmerhasan');
JSON-LD Schema
$schema = Seo::schema(); Seo::make() ->title('SEO Toolkit') ->schema($schema->product( name: 'SEO Toolkit', description: 'Laravel SEO package', image: 'https://example.com/product.jpg', sku: 'SEO-001', offers: $schema->offer('49', 'USD') )) ->generate();
Available Schema Helpers
Seo::schema()->organization('Example', 'https://example.com'); Seo::schema()->website('Example', 'https://example.com'); Seo::schema()->person('Programmer Hasan'); Seo::schema()->article('Title', 'https://example.com/post'); Seo::schema()->blogPosting('Title', 'https://example.com/post'); Seo::schema()->newsArticle('Title', 'https://example.com/news'); Seo::schema()->product('Product name'); Seo::schema()->offer('49', 'USD'); Seo::schema()->aggregateRating(4.8, 120); Seo::schema()->review('Great product', 'Hasan', 5); Seo::schema()->faq([['question' => 'Question?', 'answer' => 'Answer.']]); Seo::schema()->breadcrumb([['name' => 'Home', 'url' => '/']]); Seo::schema()->event('Laravel Meetup', '2026-05-12'); Seo::schema()->course('Laravel SEO', 'Learn SEO for Laravel'); Seo::schema()->howTo('How to install', ['Install package', 'Publish config']); Seo::schema()->recipe('Recipe name', ['Ingredient'], ['Step 1']); Seo::schema()->videoObject('Video title', 'Description', 'thumb.jpg', '2026-05-12'); Seo::schema()->softwareApplication('App name');
Inertia.js SEO
return Inertia::render('Posts/Show', [ 'post' => $post, 'seo' => Seo::make() ->title($post->title) ->description($post->excerpt) ->canonical(route('posts.show', $post)) ->forInertia(), ]);
React example:
import { Head } from '@inertiajs/react' export default function Show({ post, seo }) { return ( <> <Head> <title>{seo.title}</title> <meta name="description" content={seo.description} /> <link rel="canonical" href={seo.canonical} /> </Head> <h1>{post.title}</h1> </> ) }
Auto Model SEO
Seo::fromModel($post)->generate();
Supported model fields:
- seo_title
- title
- name
- seo_description
- description
- excerpt
- seo_image
- image_url
- image
Canonical, hreflang & Pagination
Seo::autoCanonical(); Seo::alternate('en', 'https://example.com/en/page'); Seo::alternate('bn', 'https://example.com/bn/page'); Seo::alternate('x-default', 'https://example.com/page'); Seo::pagination($posts);
Sitemaps
This package supports dynamic sitemaps, static sitemap files, image/video/news sitemaps, model-based URLs, and sitemap indexes.
Basic example:
$xml = Seo::sitemap() ->add('https://example.com') ->add('https://example.com/about') ->image('https://example.com/post', [ 'https://example.com/image.jpg' ]) ->video('https://example.com/video', [ ['title' => 'Demo video'] ]) ->news('https://example.com/news', [ 'name' => 'Example News', 'language' => 'en', 'title' => 'News title', ]) ->toXml();
Save sitemap:
Seo::sitemap() ->add('https://example.com') ->save(public_path('sitemap.xml'));
Sitemap index:
Seo::sitemap() ->index('https://example.com/sitemap-posts.xml') ->index('https://example.com/sitemap-products.xml') ->save(public_path('sitemap.xml'));
Generate via command:
php artisan seo:sitemap
👉 Full documentation: docs/sitemap.md
Robots.txt
$content = Seo::robots() ->allow('/') ->disallow('/admin') ->sitemap('https://example.com/sitemap.xml') ->toString();
Command:
php artisan seo:robots
Performance SEO
Seo::preload('/fonts/app.woff2', as: 'font', type: 'font/woff2', crossorigin: true); Seo::preconnect('https://fonts.googleapis.com'); Seo::dnsPrefetch('https://cdn.example.com');
Optional AI SEO
Seo::ai()->generate($content); Seo::ai()->improve($content); Seo::ai()->analyze($content, 'laravel seo');
OpenAI
SEO_AI_DRIVER=openai SEO_OPENAI_API_KEY=your-api-key SEO_OPENAI_MODEL=gpt-4o-mini
Gemini
SEO_AI_DRIVER=gemini SEO_GEMINI_API_KEY=your-api-key SEO_GEMINI_MODEL=gemini-1.5-flash
Ollama
SEO_AI_DRIVER=ollama SEO_OLLAMA_URL=http://localhost:11434 SEO_OLLAMA_MODEL=llama3
Commands
php artisan seo:install php artisan seo:sitemap php artisan seo:robots php artisan seo:audit
Testing
composer install
composer test
composer format:test
composer analyse
Run all quality checks:
composer ci
Version Support
| Package | Supported |
|---|---|
| PHP | 8.2, 8.3, 8.4 |
| Laravel | 10, 11, 12 |
Documentation
Full docs are available in the docs/ directory.
- Installation
- Configuration
- Basic Usage
- Meta Tags
- OpenGraph
- Twitter Cards
- JSON-LD Schema
- Sitemaps
- Robots.txt
- Inertia.js
- AI SEO
- Blade Components
- Testing
Security
Please see SECURITY.md.
Contributing
Please see CONTRIBUTING.md.
License
MIT License.
Author
Programmer Hasan
- GitHub: https://github.com/programmerhasan
- LinkedIn: https://linkedin.com/in/programmerhasan
- Website: https://programmerhasan.com
