PHPackages                             dkrasov/seo-manager - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. dkrasov/seo-manager

ActiveLibrary

dkrasov/seo-manager
===================

SEO Manager for Laravel Framework

v1.3.4(6y ago)0211MITPHPPHP ^7.1

Since Dec 29Pushed 6y agoCompare

[ Source](https://github.com/dkrasov/seo-manager)[ Packagist](https://packagist.org/packages/dkrasov/seo-manager)[ RSS](/packages/dkrasov-seo-manager/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (5)Dependencies (5)Versions (25)Used By (0)

Seo Manager Package for Laravel ( with Localization )
=====================================================

[](#seo-manager-package-for-laravel--with-localization-)

`dkrasov/seo-manager` package will provide you an interface from where you can manage all your pages metadata separately and get dynamically changing content. Let's see how.

Update:
=======

[](#update)

After updating to version &gt; v1.2.\* you have to run:

```
php artisan vendor:publish --provider="Krasov\SeoManager\SeoManagerServiceProvider" --tag=config --force
```

```
php artisan vendor:publish --provider="Krasov\SeoManager\SeoManagerServiceProvider" --tag=assets --force
```

and

```
php artisan migrate
```

to publish latest configs and new migration files.

Localization
------------

[](#localization)

In version v1.2.\* you will have availability to localize your metadata and set translates to your data.

For that, you just should add your available locales with top right button "Add Locales" and chose locale for which you want to add translations.

That's it, Package will automatically detect your locale from website and will set needed translations, you don't need to do any other configs. Easy, isn't it?

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require dkrasov/seo-manager
```

Publishing package files

```
php artisan vendor:publish --provider="Krasov\SeoManager\SeoManagerServiceProvider"
```

This command will create `config/seo-manager.php`file and will copy package assets directory to `public/vendor/dkrasov`.

#### Configurations

[](#configurations)

In `config/seo-manager.php` file you can do the following configurations:

```
return [
    /**
     * Database table name where your manager data will be stored
     */
    'database' => [
            'table' => 'seo_manager',
            'locales_table' => 'seo_manager_locales',
            'translates_table' => 'seo_manager_translates'
        ],

    /**
     * Set default locale,
     * It will be added as default locale
     * when locales table migrated
     */
    'locale' => 'en',

    /**
     * Path where your eloquent models are
     */
    'models_path' => '',

    /**
     * Route from which your Dashboard will be available
     */
    'route' => 'seo-manager',

    /**
     * Middleware array for dashboard
     * to prevent unauthorized users visit the manager
     */
    'middleware' => [
        //  'auth',
    ],

    /**
     * Routes which shouldn't be imported to seo manager
     */
    'except_routes' => [
        'seo-manager',
        'admin'
        //
    ],

    /**
     * Columns which shouldn't be used ( in mapping )
     */
    'except_columns' => [
        // "created_at",
        // "updated_at",
    ],

    /**
     * Set this parameter to true
     * if you want to have "$metaData" variable
     * shared between all views in "web" middleware group
     */
    'shared_meta_data' => false
];
```

After finishing with all configurations run `php artisan migrate` to create SEO manager table.

That's it, now your SEO manager will be available from /seo-manager URL (or, if you changed route config, by that config URL)

Usage
-----

[](#usage)

After visiting your dashboard URL you have to import your routes to start to manage them.

[![routes import](https://camo.githubusercontent.com/321456162b5b93b35e3b78c1416ad3066d35f5b122c5252b8fa33cad2e40ed63/68747470733a2f2f6c68362e676f6f676c6575736572636f6e74656e742e636f6d2f5953624674386a76563673776f646a424534786936554350306836734e787730316b456867375975654d6e73754951786d65576f456a42616769593d7732343030)](https://camo.githubusercontent.com/321456162b5b93b35e3b78c1416ad3066d35f5b122c5252b8fa33cad2e40ed63/68747470733a2f2f6c68362e676f6f676c6575736572636f6e74656e742e636f6d2f5953624674386a76563673776f646a424534786936554350306836734e787730316b456867375975654d6e73754951786d65576f456a42616769593d7732343030)

Route importing will store all your GET routes into the database ( except the ones which specified in "except\_routes" configs).

[![imported routes](https://camo.githubusercontent.com/bf9bcacf925b851d4c20cb73f2026949a8f39723be04b536bd49a294661aba58/68747470733a2f2f6c68352e676f6f676c6575736572636f6e74656e742e636f6d2f446e2d7475706859714d4e39626d4e5f577a63576d54674f437a757a67336d335f5463576c7a6262374e66377a625648724854426b5863344f34453d7732343030)](https://camo.githubusercontent.com/bf9bcacf925b851d4c20cb73f2026949a8f39723be04b536bd49a294661aba58/68747470733a2f2f6c68352e676f6f676c6575736572636f6e74656e742e636f6d2f446e2d7475706859714d4e39626d4e5f577a63576d54674f437a757a67336d335f5463576c7a6262374e66377a625648724854426b5863344f34453d7732343030)

### Let the fun begin!

[](#let-the-fun-begin)

**Mapping**

[![](https://camo.githubusercontent.com/e56d8a09e021c9ced76ae61c81e4d25dad31fde9944e68113c2e04667eddb1c2/68747470733a2f2f6c68342e676f6f676c6575736572636f6e74656e742e636f6d2f6678766f4f5051554739474e694f71416a3643327a375f5a6f6c4d4d4a53562d35334d5f51367350717433667031546459702d39626c4c334451383d7732343030)](https://camo.githubusercontent.com/e56d8a09e021c9ced76ae61c81e4d25dad31fde9944e68113c2e04667eddb1c2/68747470733a2f2f6c68342e676f6f676c6575736572636f6e74656e742e636f6d2f6678766f4f5051554739474e694f71416a3643327a375f5a6f6c4d4d4a53562d35334d5f51367350717433667031546459702d39626c4c334451383d7732343030)

To get dynamically changing metadata you should map your route params to the correct Models.

*Param: Route param*

*Model: Eloquent Model which you are using to get the record by route param*

*Find By: Database table column name which you are using to get the record by route param*

*Use Columns: Database table columns which we should use for further mapping*

*Mapping available only if your route has params*

Next steps you can do, is to set Keywords, Description, Title, URL, Author, Title Dynamic, OpenGraph Data.

**About "Title Dynamic":**

Here you can drag &amp; drop your mapped params, your title and write custom text to generate the dynamic title for your page. Every time your "title" will be changed or your mapped params value changed, the dynamic title will be changed automatically.

[![](https://camo.githubusercontent.com/4c855f4274ac65bef87435bac606b93dcc868bde71f6dab2ccb319f91a5ed8df/68747470733a2f2f6c68332e676f6f676c6575736572636f6e74656e742e636f6d2f5667616c4d3838516e6a48386942392d6245633269696b655f31344c625f6346374a4579696c42777142547575444f666f654a76522d6e3635354d3d7732343030)](https://camo.githubusercontent.com/4c855f4274ac65bef87435bac606b93dcc868bde71f6dab2ccb319f91a5ed8df/68747470733a2f2f6c68332e676f6f676c6575736572636f6e74656e742e636f6d2f5667616c4d3838516e6a48386942392d6245633269696b655f31344c625f6346374a4579696c42777142547575444f666f654a76522d6e3635354d3d7732343030)

**About "Open Graph":**

Here you can write your open graph data or map your fields to mapping based on params.

[![](https://camo.githubusercontent.com/23a7b91dc7dc9f4bcc059b4ea0437ddd649280090ece6d1122399d123953991b/68747470733a2f2f6c68362e676f6f676c6575736572636f6e74656e742e636f6d2f5a39332d4e55554b4c464f6c655a626a346f5977664535394d4d794778687539534878452d3069414b4e77617457486d3977354c665a5f683572673d7732343030)](https://camo.githubusercontent.com/23a7b91dc7dc9f4bcc059b4ea0437ddd649280090ece6d1122399d123953991b/68747470733a2f2f6c68362e676f6f676c6575736572636f6e74656e742e636f6d2f5a39332d4e55554b4c464f6c655a626a346f5977664535394d4d794778687539534878452d3069414b4e77617457486d3977354c665a5f683572673d7732343030)

Example Usage
-------------

[](#example-usage)

Via `SeoManager` Facade
-----------------------

[](#via-seomanager-facade)

```
use Krasov\SeoManager\Facades\SeoManager;
```

##### This will return an array with all your SEO Manager data

[](#this-will-return-an-array-with-all-your-seo-manager-data)

```
SeoManager::metaData();

```

*Example:*

```
array:13 [▼
  "keywords" => "First Keyword, Second, Third"
  "description" => "Test Description"
  "title" => "Test Titile"
  "url" => "http://example.com/users/1"
  "author" => "Sergey Karakhanyan"
  "title_dynamic" => "Test Titile - Custom Text - Test User Name "
  "og:url" => "http://example.com/users/1"
  "og:type" => "website"
  "og:image:url" => "https://wallpaperbrowse.com/media/images/3848765-wallpaper-images-download.jpg"
  "og:title" => "Test Titile - Custom Open Graph Text"
  "og:locale" => "en_GB"
  "og:site_name" => "Seo Manager Package"
  "og:description" => "Open Graph Description"
]
```

`SeoManager::metaData();` method can receive property variable to get the value of some property

*Example:*

`SeoManager::metaData('keywords');` will return `"First Keyword, Second, Third"`

##### To get only OpenGraph data array:

[](#to-get-only-opengraph-data-array)

```
SeoManager::metaData('og_data');
```

*Example*

```
array:7 [▼
  "og:url" => "http://example.com/users/1"
  "og:type" => "website"
  "og:image:url" => "https://wallpaperbrowse.com/media/images/3848765-wallpaper-images-download.jpg"
  "og:title" => "Test Titile - Custom Open Graph Text"
  "og:locale" => "en_GB"
  "og:site_name" => "Seo Manager Package"
  "og:description" => "Open Graph Description"
]
```

##### Aliases

[](#aliases)

`SeoManager::metaKeywords()`

`SeoManager::metaTitle()`

`SeoManager::metaDescription()`

`SeoManager::metaUrl()`

`SeoManager::metaAuthor()`

`SeoManager::metaTitleDynamic()`

`SeoManager::metaOpenGraph()` - Can receive property variable to get the value of some OG property

*Example*

`SeoManager::metaOpenGraph('og:image:url')`

Will return `"https://wallpaperbrowse.com/media/images/3848765-wallpaper-images-download.jpg"`

Via `helper` functions
----------------------

[](#via-helper-functions)

`metaData()`

`metaKeywords()`

`metaTitle()`

`metaDescription()`

`metaUrl()`

`metaAuthor()`

`metaTitleDynamic()`

`metaOpenGraph()`

Via @Blade directives
---------------------

[](#via-blade-directives)

You can use this blade directives in your view files to get metadata.

`@meta`

*Output Example*

```

```

`@meta` can receive property param

`@meta('description')`

*Output Example*

```

```

> **Note:**You can't add open graph properties to `@meta()` like `@meta('og:url')`But you can get only OpenGraph meta data by `@meta('og_data')`. If you want to get concrete OG param meta tag you can use `@openGraph` (*similar to `@meta('og_data')`*) and pass param there like `@openGraph('og:url)`

> **Note #2:** If you want to do modifications in your og data and display it manually, you should do that before `@meta`

*Example:*

```

@meta
```

##### Aliases

[](#aliases-1)

`@keywords`

`@url`

`@author`

`@description`

`@title`

`@openGraph`

`@titleDynamic` - will return dynamically generated title which you can use inside your `` tags.

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 81.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~11 days

Recently: every ~0 days

Total

24

Last Release

2433d ago

Major Versions

v0.2.0 → v1.0.02019-01-12

PHP version history (2 changes)v0.0.2PHP ^7.0

v1.3.1PHP ^7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/56be7ed9f07610ea8c324668202bd8cdc39fa76519131dbd7a8ecb9fb08fe5ce?d=identicon)[dmitriymarley](/maintainers/dmitriymarley)

---

Top Contributors

[![karakhanyans](https://avatars.githubusercontent.com/u/12999189?v=4)](https://github.com/karakhanyans "karakhanyans (31 commits)")[![denishostelpass](https://avatars.githubusercontent.com/u/54020970?v=4)](https://github.com/denishostelpass "denishostelpass (6 commits)")[![dkrasov](https://avatars.githubusercontent.com/u/8083744?v=4)](https://github.com/dkrasov "dkrasov (1 commits)")

---

Tags

laravelseometameta dataopen-graphseo managerog-data

### Embed Badge

![Health badge](/badges/dkrasov-seo-manager/health.svg)

```
[![Health](https://phpackages.com/badges/dkrasov-seo-manager/health.svg)](https://phpackages.com/packages/dkrasov-seo-manager)
```

###  Alternatives

[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.5k25.9M106](/packages/laravel-cashier)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k12.1M99](/packages/laravel-pulse)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[lionix/seo-manager

SEO Manager for Laravel Framework

2165.4k](/packages/lionix-seo-manager)[yadahan/laravel-authentication-log

Laravel Authentication Log provides authentication logger and notification for Laravel.

416632.8k5](/packages/yadahan-laravel-authentication-log)[torchlight/torchlight-laravel

A Laravel Client for Torchlight, the syntax highlighting API.

120452.8k11](/packages/torchlight-torchlight-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
