agustrio1 / seo-analyzer
SEO analysis library seperti Yoast/RankMath, framework-agnostic
dev-main
2026-07-26 08:16 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-08-26 08:32:17 UTC
README
Library analisis SEO seperti Yoast/RankMath, ditulis dengan PHP native (framework-agnostic) sehingga bisa dipakai di PHP murni maupun Laravel.
Fitur
- Analisis SEO on-page (8 rule): panjang judul, keyword di judul/URL/paragraf pertama, kepadatan keyword, meta description, alt text gambar
- Readability score (adaptasi Bahasa Indonesia)
- Schema/JSON-LD generator: Article, Product, FAQ, Breadcrumb
- Sitemap generator (manual + otomatis dari database via Artisan command)
- Robots.txt generator
- Snippet preview (simulasi hasil pencarian Google dengan pixel width)
- Redirect manager (301/302/410) dengan pelacakan broken link 404
- Dashboard live-analysis (Blade component) dan dashboard kelola redirect
Instalasi
PHP Native
Salin folder src/Core ke project kamu, lalu daftarkan autoload PSR-4 di composer.json:
{
"autoload": {
"psr-4": {
"SeoAnalyzer\\": "src/"
}
}
}
Jalankan:
composer dump-autoload
Laravel
- Salin seluruh folder
src/kepackages/seo-analyzer/src/(atau lokasi package lain) - Tambahkan path repository di
composer.jsonproject Laravel:
{
"repositories": [
{
"type": "path",
"url": "packages/seo-analyzer"
}
],
"require": {
"agustrio1/seo-analyzer": "*"
}
}
- Install:
composer require yourname/seo-analyzer
- Publish config dan migration:
php artisan vendor:publish --tag=seo-config php artisan vendor:publish --tag=seo-migrations php artisan migrate
Pemakaian Dasar (PHP Native)
use SeoAnalyzer\Core\Analyzer; use SeoAnalyzer\Core\ContentData; $content = new ContentData( title: 'Cara Membuat Library SEO dengan PHP', metaDescription: 'Panduan lengkap membuat library SEO analyzer...', bodyHtml: '<h1>Cara Membuat Library SEO</h1><p>Konten...</p>', focusKeyword: 'library SEO', url: '/artikel/cara-membuat-library-seo' ); $analyzer = Analyzer::withDefaultRules(); $report = $analyzer->analyze($content); print_r($report->toArray());
Pemakaian di Laravel
use SeoAnalyzer\Core\ContentData; use SeoAnalyzer\Laravel\Facades\Seo; $content = new ContentData( title: $post->title, metaDescription: $post->meta_description, bodyHtml: $post->body, focusKeyword: $post->focus_keyword, url: $post->slug ); $report = Seo::analyze($content);
Dashboard Live-Analysis
Tambahkan attribute data-seo-field pada input form, lalu include component:
<input type="text" name="title" data-seo-field="title" value="{{ $post->title }}"> <textarea name="body" data-seo-field="body">{{ $post->body }}</textarea> @include('seo-analyzer::components.seo-panel')
Daftarkan route analisis di routes/web.php:
use SeoAnalyzer\Laravel\Http\Controllers\SeoAnalysisController; Route::post('/seo/analyze', [SeoAnalysisController::class, 'analyze'])->name('seo.analyze');
Redirect Manager
Daftarkan middleware di bootstrap/app.php (Laravel 11+):
->withMiddleware(function (Middleware $middleware) { $middleware->prepend(\SeoAnalyzer\Laravel\Middleware\HandleRedirects::class); })
Daftarkan route API dan dashboard:
use SeoAnalyzer\Laravel\Http\Controllers\RedirectController; Route::prefix('seo/redirects')->group(function () { Route::get('/', [RedirectController::class, 'index']); Route::post('/', [RedirectController::class, 'store']); Route::put('/{redirect}', [RedirectController::class, 'update']); Route::delete('/{redirect}', [RedirectController::class, 'destroy']); }); Route::get('/seo/redirects-dashboard', function () { return view('seo-analyzer::redirects.index'); });
Sitemap Otomatis
Konfigurasi sumber data di config/seo.php:
'sitemap' => [ 'sources' => [ [ 'model' => \App\Models\Post::class, 'url' => '/post/{slug}', 'slug_field' => 'slug', 'scope' => 'published', 'changefreq' => 'weekly', 'priority' => 0.8, ], ], ],
Jalankan:
php artisan seo:generate-sitemap
Schema/JSON-LD
use SeoAnalyzer\Core\Schema\ArticleSchema; $article = new ArticleSchema( headline: 'Judul Artikel', description: 'Deskripsi singkat', authorName: 'Nama Penulis', publisherName: 'Nama Situs', publisherLogoUrl: 'https://mysite.com/logo.png', imageUrl: 'https://mysite.com/cover.jpg', datePublished: '2026-07-26', url: 'https://mysite.com/artikel' ); echo $article->toJsonLd();
Struktur Folder
src/
├── Contracts/RuleInterface.php
├── Core/
│ ├── Analyzer.php
│ ├── AnalysisReport.php
│ ├── ContentData.php
│ ├── ContentParser.php
│ ├── RuleResult.php
│ ├── Rules/
│ ├── Readability/
│ ├── Schema/
│ ├── Sitemap/
│ ├── Robots/
│ └── Snippet/
├── Laravel/
│ ├── SeoServiceProvider.php
│ ├── Facades/Seo.php
│ ├── Console/GenerateSitemapCommand.php
│ ├── Middleware/HandleRedirects.php
│ ├── Models/
│ ├── Http/Controllers/
│ ├── resources/views/
│ └── config/seo.php
tests/
database/migrations/
Testing
composer require --dev phpunit/phpunit --break-system-packages ./vendor/bin/phpunit
Lisensi
MIT