SEO meta management package for Laravel

Maintainers

Package info

github.com/tunasahincomtr/meta-kit

pkg:composer/tunasahincomtr/metakit

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2025-12-27 17:07 UTC

This package is auto-updated.

Last update: 2026-02-27 17:33:08 UTC


README

Laravel için URL bazlı SEO meta tag yönetim paketi. Her sayfa için özel meta bilgileri tanımlayın, cache desteği ile hızlı çalışın.

Özellikler

  • 🎯 URL bazlı meta yönetimi (domain, path, query parametreleri)
  • 🚀 Otomatik cache sistemi
  • 🎨 Blade direktifleri ile kolay kullanım
  • 📱 Open Graph ve Twitter Card desteği
  • 📊 JSON-LD schema desteği
  • 🔄 RESTful API ile yönetim
  • 🛡️ Duplicate meta tag koruması
  • 🗺️ Otomatik sitemap oluşturma
  • 🎨 Bootstrap uyumlu admin arayüzü

Kurulum

1. Repository'yi Composer'a Ekleyin

composer.json dosyanıza GitHub repository'yi ekleyin:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/tunasahincomtr/meta-kit"
        }
    ]
}

2. Paketi Yükleyin

composer require tunasahincomtr/metakit:dev-main

Alternatif: Eğer paketi projeniz içinde local olarak kullanmak isterseniz:

{
    "repositories": [
        {
            "type": "path",
            "url": "modules/packages/tunasahincomtr/metakit",
            "options": {
                "symlink": true
            }
        }
    ]
}

Sonra composer require tunasahincomtr/metakit:"*" komutunu çalıştırın.

3. Config ve Migration

Config dosyasını yayınlayın:

php artisan vendor:publish --tag=metakit-config

Migration'ları çalıştırın:

php artisan migrate

Hepsi bu kadar! Paket Laravel'in auto-discovery özelliği sayesinde otomatik olarak yüklenir.

Hızlı Başlangıç

Blade Template'inde Kullanım

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
    @metakit
    @metakitJsonLd
</head>
<body>
    <!-- İçerik -->
</body>
</html>

@metakit direktifi şunları otomatik oluşturur:

  • <title> tagı
  • Meta description, keywords, robots
  • Canonical URL
  • Open Graph tagları
  • Twitter Card tagları

Controller'da Programatik Kullanım

use function TunaSahincomtr\MetaKit\metakit;

public function show(Product $product)
{
    metakit()
        ->setTitle($product->name . ' - Ürün Detayı')
        ->setDescription($product->description)
        ->setOgImage($product->image_url);

    return view('products.show', compact('product'));
}

Admin Arayüzü

MetaKit, Bootstrap 5 uyumlu bir admin arayüzü ile gelir. Sadece bir Blade direktifi ile kullanabilirsiniz:

@metakitform

Bu direktif ile şunları yapabilirsiniz:

  • ✅ Sayfa ekleme, düzenleme, silme
  • ✅ Liste görünümü ile pagination
  • ✅ Arama ve filtreleme
  • ✅ SEO skoru görüntüleme
  • ✅ İstatistikler ve raporlar
  • ✅ JSON-LD schema yönetimi

Renk Özelleştirme

Admin arayüzünün renklerini CSS variable ile özelleştirebilirsiniz:

.metakit-form-wrapper {
    --metakit-primary: #198754; /* Buton arka plan rengi */
    --metakit-primary-text: #ffffff; /* Buton metin rengi */
}

API Kullanımı

MetaKit RESTful API ile çalışır. API endpoint'leri:

Public Endpoints (Token gerekmez):

  • GET /api/metakit/pages - Sayfa listesi
  • GET /api/metakit/pages/{id} - Tek sayfa
  • GET /api/metakit/stats/dashboard - İstatistikler

Protected Endpoints (Token gerekli):

  • POST /api/metakit/pages - Yeni sayfa
  • PUT /api/metakit/pages/{id} - Sayfa güncelle
  • DELETE /api/metakit/pages/{id} - Sayfa sil
  • POST /api/metakit/pages/import/csv - CSV import
  • GET /api/metakit/pages/export/csv - CSV export

API token oluşturmak için:

$user = User::first();
$token = $user->createToken('api-token')->plainTextToken;

Blade Direktifleri

Tüm Meta Tagları

@metakit

Sadece Title

<title>@metakitTitle</title>

Belirli Meta Değeri

<meta name="description" content="@metakitMeta('description')">

JSON-LD Schema

@metakitJsonLd

JSON-LD Schema Yönetimi

MetaKit ile sayfanıza birden fazla JSON-LD schema ekleyebilirsiniz:

metakit()->addJsonLd([
    '@context' => 'https://schema.org',
    '@type' => 'Article',
    'headline' => 'Makale Başlığı',
    'author' => [
        '@type' => 'Person',
        'name' => 'Yazar Adı'
    ]
]);

// Veya Product schema
metakit()->addJsonLd([
    '@context' => 'https://schema.org',
    '@type' => 'Product',
    'name' => 'Ürün Adı',
    'price' => '99.99',
    'currency' => 'TRY'
]);

Admin arayüzünde hazır template'ler ile kolayca schema ekleyebilirsiniz:

  • Article, BlogPosting
  • Product
  • FAQPage
  • BreadcrumbList
  • Organization, WebSite
  • LocalBusiness, Person
  • Ve daha fazlası...

Sitemap

MetaKit otomatik olarak sitemap.xml oluşturur. Aktif sayfalarınız otomatik olarak sitemap'e eklenir:

GET /sitemap.xml

Config'de özelleştirebilirsiniz:

// config/metakit.php
'sitemap' => [
    'enabled' => true,
    'route' => '/sitemap.xml',
    'include_images' => true,
    'only_active' => true,
],

Cache Yönetimi

MetaKit otomatik cache kullanır. Sayfa oluşturulduğunda, güncellendiğinde veya silindiğinde ilgili cache otomatik temizlenir.

Manuel cache temizleme:

metakit()->purgeCache('example.com', '/products', $queryHash);

Query Hash

URL'deki query parametreleri için farklı meta tanımlamak istediğinizde query hash kullanılır. Sadece config/metakit.php içindeki query_whitelist listesindeki parametreler hash hesaplamasına dahil edilir.

Örnek:

  • URL: https://example.com/products?city=istanbul&type=apartment&page=2
  • Whitelist: ['city', 'type']
  • Query Hash: city=istanbul&type=apartment parametrelerinden oluşturulur
  • page parametresi hash'e dahil edilmez

Konfigürasyon

config/metakit.php dosyasında aşağıdaki ayarları yapabilirsiniz:

'api_prefix' => 'api/metakit',
'cache_ttl_minutes' => 360,
'query_whitelist' => ['city', 'type', 'price_min'],
'default' => [
    'site_name' => env('APP_NAME', 'Laravel'),
    'title_suffix' => ' - ' . env('APP_NAME', 'Laravel'),
    'default_image' => '/images/og-default.jpg',
],
'sitemap' => [
    'enabled' => true,
    'route' => '/sitemap.xml',
],
'form' => [
    'auth_required' => false, // Admin arayüzü için auth kontrolü
],

Örnekler

Basit Kullanım

<head>
    @metakit
</head>

Dinamik Override

// Controller'da
metakit()
    ->setTitle('Özel Başlık')
    ->setDescription('Özel Açıklama')
    ->setCanonical('https://example.com/canonical')
    ->setOgImage('https://example.com/image.jpg');

API ile Toplu İşlemler

// JavaScript
fetch('/api/metakit/pages', {
    method: 'POST',
    headers: {
        'Authorization': 'Bearer ' + token,
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        domain: window.location.hostname,
        path: window.location.pathname,
        title: 'Sayfa Başlığı',
        description: 'Sayfa Açıklaması',
        status: 'active',
    }),
});

Gereksinimler

  • PHP >= 8.1
  • Laravel >= 10.0
  • Laravel Sanctum (API için)

Lisans

MIT

Destek

Sorularınız için: info@tunasahin.com.tr