Search by

agustrio1 / seo-analyzer

agustrio1

SEO analysis library seperti Yoast/RankMath, framework-agnostic

Package info

github.com/agustrio1/seo-analyzer

pkg:composer/agustrio1/seo-analyzer

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-07-26 08:16 UTC

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

  1. Salin seluruh folder src/ ke packages/seo-analyzer/src/ (atau lokasi package lain)
  2. Tambahkan path repository di composer.json project Laravel:
{
    "repositories": [
        {
            "type": "path",
            "url": "packages/seo-analyzer"
        }
    ],
    "require": {
        "agustrio1/seo-analyzer": "*"
    }
}
  1. Install:
composer require yourname/seo-analyzer
  1. 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