Laravel Seo package for Content writer/admin/web master who do not know programming but want to edit/update SEO tags from dashboard

Overview

Laravel Seo Tools

Laravel is becoming more and more popular and lots of web application are developing. In most of the web application there need some SEO work for their marketing purpose. There are some tools but those are not suitable for non programmer. Everything can be control via dashboard like Wordpress Yoast

See Demo

Installation

  "require": { 
     "digitaldream/laravel-seo-tools": "1.*"
}

Settings

  1. Add this line to config/app.php providers array . Not needed if you are using laravel 5.5 or greater
    SEO\SeoServiceProvider::class
  1. Then Run
    php artisan vendor:publish --provider="SEO\SeoServiceProvider"

Please have a look to App\Policies\Seo folder. Adjust permission for seo settings routes.

  1. Run migration
  php artisan migrate
  1. Run Seed
   php artisan db:seed --class="SEO\Database\Seeders\SeoTablesSeeder"
  1. Show form into your post/content page by adding this custom blade tag
     @seoForm($model)

This will be usually inside your form.

  1. Save tags into your controller
    
     if ($model->save()) {
           \SEO\Seo::save($model, route('blog::posts.show', $model->slug), [
               'title' => $model->title,
               'images' => [
                   $model->getImageUrl()
               ]
           ]);
          }

Do not make your controller dirty. Do not worry follow this instruction

  1. Finally display tags into your layouts header by this custom blade tag
   @seoTags()

Now visit /seo/dashboard from your browser to see seo dashboard and settings

Easy to use

Target user of this tool is non programmer. So they can able to add/modify on page SEO tags and do some necessary action that can give full control how this page will be appear by Search Engine.

Social media sharing

Everybody loves to share their page or content in social media. By using this tools you can able to manage how your page looks like in Facebook, Twitter and others and what image will be shown, which title and description are shown and many more. social_media

Page management

Your application have many pages but not all of them for search engine. You can control this from your dashboard. Also it can be set via programatically for example when a post is published it will automatically added to xml sitemap and will add necessary seo tags so search engine can understand its purpose and content. page_management

Submit company or personal information to Google

For business or ecommerce we often see support email, telephone and some other extra information like their Facebook, Twitter account in google search. This can be done schema.org tags. To make this super simple there have few input field that you can easily fill and save. Behind the scene everything will be done for you. company_personal_info

Webmaster tools

Sometimes web master need ftp or file access because they need to add some verification code into your site. Using this tools they can simply add this from dashboard. Like Google Verification code webmaster_tools

Sitemap generator

Sitemap are the key to search engine. Search engine will crawl your website according to this. It will be created automatically for you. Also you can set pririty and change frequency of your page. site_map

Robot.txt and .htaccess file customization

Web master sometimes need to have access to robot.txt and .htaccess. Now it can be done via dashboard. Although it requires expertise knowledge to modify this files. robot_htaccess

Meta tag management

Only way to inform search engine about your site or page is via Meta tags. There are many tags. Most common are already there. But you can able to create, edit or delete any of them. To add a meta tag you do not have to call programmer. You can do it from dashbarod.

meta_tags

This is simple. Isn't it?
Comments
  • Blade Compiler

    Blade Compiler

    Laravel 5.8.8 SEO Tools 1.01

    When I require the package and install the following errors are displayed in terminal:

    `In Container.php line 794:

    Class blade.compiler does not exist

    Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1 `

    I uninstalled your package and the error went away.

    Thanks

    opened by DerekBuntin 5
  • isSuperAdmin

    isSuperAdmin

    Hi can you please help me... i get 403 Unauthorised when i try to modify i ran php artisan make:auth and setup a default user. how do i apply property isSuperAdmin to my user. please can you also update your readme to reflect this

    opened by dali546 2
  • Call to undefined method App\Page::getImageUrl()

    Call to undefined method App\Page::getImageUrl()

    on if ($page->save()) { \SEO\Seo::save($page, $page->slug, [ 'title' => $page->name, 'images' => [ $page->getImageUrl() ] ]); }

    i see the getImageUrl() but what that function do.

    opened by masumonline 1
  •  Class 'SEO\SeoServiceProvider' not found

    Class 'SEO\SeoServiceProvider' not found

    hello

    i have composer.json as follow

    {
        "name": "laravel/laravel",
        "description": "The Laravel Framework.",
        "keywords": [
            "framework",
            "laravel"
        ],
        "license": "MIT",
        "type": "project",
        "require": {
            "php": "^7.3|^8.0",
            "ext-curl": "*",
            "ext-json": "*",
            "ext-zip": "*",
            "ext-gd": "*",
            "botble/api": "*@dev",
            "botble/menu": "*@dev",
            "botble/page": "*@dev",
            "botble/platform": "*@dev",
            "botble/plugin-management": "*@dev",
            "botble/shortcode": "*@dev",
            "botble/theme": "*@dev",
            "botble/revision": "*@dev",
            "botble/sitemap": "*@dev",
            "botble/widget": "*@dev",
            "botble/slug": "*@dev",
            "botble/seo-helper": "*@dev",
            "doctrine/dbal": "^3.1",
            "fideloper/proxy": "^4.4",
            "fruitcake/laravel-cors": "^2.0",
            "guzzlehttp/guzzle": "^7.3",
            "laravel/framework": "^8.62",
            "league/flysystem-aws-s3-v3": "^1.0",
    		"digitaldream/laravel-seo-tools": "1.*",
            "wikimedia/composer-merge-plugin": "^2.0"
        },
        "require-dev": {
            "facade/ignition": "^2.14",
            "fakerphp/faker": "^1.16",
            "laravel/sail": "^1.10",
            "mockery/mockery": "^1.4",
            "nunomaduro/collision": "^5.10",
            "phpunit/phpunit": "^9.5",
            "laravel/tinker": "^2.6",
            "barryvdh/laravel-debugbar": "^3.6",
            "barryvdh/laravel-ide-helper": "^2.10"
        },
        "autoload": {
            "psr-4": {
                "App\\": "app/",
                "Database\\Factories\\": "database/factories/",
                "Database\\Seeders\\": "database/seeders/"
            }
        },
        "autoload-dev": {
            "psr-4": {
                "Tests\\": "tests/"
            }
        },
        "extra": {
            "laravel": {
                "dont-discover": [
                ]
            },
            "merge-plugin": {
                "include": [
                    "./platform/plugins/*/composer.json",
                    "./platform/themes/*/composer.json"
                ],
                "recurse": false,
                "replace": false,
                "ignore-duplicates": false,
                "merge-dev": false,
                "merge-extra": false,
                "merge-extra-deep": false,
                "merge-scripts": false
            },
            "google/apiclient-services": [
                "Analytics"
            ]
        },
        "scripts": {
            "post-root-package-install": [
                "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
            ],
            "post-create-project-cmd": [
                "@php artisan key:generate --ansi"
            ],
            "post-autoload-dump": [
                "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
                "@php artisan package:discover --ansi"
            ],
            "post-update-cmd": [
                "Google\\Task\\Composer::cleanup",
                "@php artisan cms:publish:assets"
            ]
        },
        "config": {
            "preferred-install": "dist",
            "sort-packages": true,
            "optimize-autoloader": true,
            "allow-plugins": {
                "composer/package-versions-deprecated": true,
                "wikimedia/composer-merge-plugin": true
            }
        },
        "minimum-stability": "dev",
        "prefer-stable": true,
        "repositories": [
            {
                "type": "path",
                "url": "./platform/core"
            },
            {
                "type": "path",
                "url": "./platform/packages/*"
            }
        ]
    }`
    

    and config/app.php as follow

    <?php
    
    return [
    
        /*
        |--------------------------------------------------------------------------
        | Application Name
        |--------------------------------------------------------------------------
        |
        | This value is the name of your application. This value is used when the
        | framework needs to place the application's name in a notification or
        | any other location as required by the application or its packages.
        |
        */
    
        'name' => env('APP_NAME', 'Laravel'),
    
        /*
        |--------------------------------------------------------------------------
        | Application Environment
        |--------------------------------------------------------------------------
        |
        | This value determines the "environment" your application is currently
        | running in. This may determine how you prefer to configure various
        | services the application utilizes. Set this in your ".env" file.
        |
        */
    
        'env' => env('APP_ENV', 'production'),
    
        /*
        |--------------------------------------------------------------------------
        | Application Debug Mode
        |--------------------------------------------------------------------------
        |
        | When your application is in debug mode, detailed error messages with
        | stack traces will be shown on every error that occurs within your
        | application. If disabled, a simple generic error page is shown.
        |
        */
    
        'debug' => (bool) env('APP_DEBUG', false),
    
        /*
        |--------------------------------------------------------------------------
        | Application URL
        |--------------------------------------------------------------------------
        |
        | This URL is used by the console to properly generate URLs when using
        | the Artisan command line tool. You should set this to the root of
        | your application so that it is used when running Artisan tasks.
        |
        */
    
        'url' => env('APP_URL', 'http://localhost'),
    
        'asset_url' => env('ASSET_URL', null),
    
        /*
        |--------------------------------------------------------------------------
        | Application Timezone
        |--------------------------------------------------------------------------
        |
        | Here you may specify the default timezone for your application, which
        | will be used by the PHP date and date-time functions. We have gone
        | ahead and set this to a sensible default for you out of the box.
        |
        */
    
        'timezone' => 'UTC',
    
        /*
        |--------------------------------------------------------------------------
        | Application Locale Configuration
        |--------------------------------------------------------------------------
        |
        | The application locale determines the default locale that will be used
        | by the translation service provider. You are free to set this value
        | to any of the locales which will be supported by the application.
        |
        */
    
        'locale' => 'en',
    
        /*
        |--------------------------------------------------------------------------
        | Application Fallback Locale
        |--------------------------------------------------------------------------
        |
        | The fallback locale determines the locale to use when the current one
        | is not available. You may change the value to correspond to any of
        | the language folders that are provided through your application.
        |
        */
    
        'fallback_locale' => 'en',
    
        /*
        |--------------------------------------------------------------------------
        | Faker Locale
        |--------------------------------------------------------------------------
        |
        | This locale will be used by the Faker PHP library when generating fake
        | data for your database seeds. For example, this will be used to get
        | localized telephone numbers, street address information and more.
        |
        */
    
        'faker_locale' => 'en_US',
    
        /*
        |--------------------------------------------------------------------------
        | Encryption Key
        |--------------------------------------------------------------------------
        |
        | This key is used by the Illuminate encrypter service and should be set
        | to a random, 32 character string, otherwise these encrypted strings
        | will not be safe. Please do this before deploying an application!
        |
        */
    
        'key' => env('APP_KEY'),
    
        'cipher' => 'AES-256-CBC',
    
        /*
        |--------------------------------------------------------------------------
        | Autoloaded Service Providers
        |--------------------------------------------------------------------------
        |
        | The service providers listed here will be automatically loaded on the
        | request to your application. Feel free to add your own services to
        | this array to grant expanded functionality to your applications.
        |
        */
    
        'providers' => [
    
            /*
             * Laravel Framework Service Providers...
             */
            Illuminate\Auth\AuthServiceProvider::class,
            Illuminate\Broadcasting\BroadcastServiceProvider::class,
            Illuminate\Bus\BusServiceProvider::class,
            Illuminate\Cache\CacheServiceProvider::class,
            Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
            Illuminate\Cookie\CookieServiceProvider::class,
            Illuminate\Database\DatabaseServiceProvider::class,
            Illuminate\Encryption\EncryptionServiceProvider::class,
            Illuminate\Filesystem\FilesystemServiceProvider::class,
            Illuminate\Foundation\Providers\FoundationServiceProvider::class,
            Illuminate\Hashing\HashServiceProvider::class,
            Illuminate\Mail\MailServiceProvider::class,
            Illuminate\Notifications\NotificationServiceProvider::class,
            Illuminate\Pagination\PaginationServiceProvider::class,
            Illuminate\Pipeline\PipelineServiceProvider::class,
            Illuminate\Queue\QueueServiceProvider::class,
            Illuminate\Redis\RedisServiceProvider::class,
            Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
            Illuminate\Session\SessionServiceProvider::class,
            Illuminate\Translation\TranslationServiceProvider::class,
            Illuminate\Validation\ValidationServiceProvider::class,
            Illuminate\View\ViewServiceProvider::class,
    	SEO\SeoServiceProvider::class,
    
            /*
             * Package Service Providers...
             */
    
            /*
             * Application Service Providers...
             */
            App\Providers\AppServiceProvider::class,
            App\Providers\AuthServiceProvider::class,
            // App\Providers\BroadcastServiceProvider::class,
            App\Providers\EventServiceProvider::class,
            App\Providers\RouteServiceProvider::class,
    
        ],
    
        /*
        |--------------------------------------------------------------------------
        | Class Aliases
        |--------------------------------------------------------------------------
        |
        | This array of class aliases will be registered when this application
        | is started. However, feel free to register as many as you wish as
        | the aliases are "lazy" loaded so they don't hinder performance.
        |
        */
    
        'aliases' => [
    
            'App' => Illuminate\Support\Facades\App::class,
            'Arr' => Illuminate\Support\Arr::class,
            'Artisan' => Illuminate\Support\Facades\Artisan::class,
            'Auth' => Illuminate\Support\Facades\Auth::class,
            'Blade' => Illuminate\Support\Facades\Blade::class,
            'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
            'Bus' => Illuminate\Support\Facades\Bus::class,
            'Cache' => Illuminate\Support\Facades\Cache::class,
            'Config' => Illuminate\Support\Facades\Config::class,
            'Cookie' => Illuminate\Support\Facades\Cookie::class,
            'Crypt' => Illuminate\Support\Facades\Crypt::class,
            'Date' => Illuminate\Support\Facades\Date::class,
            'DB' => Illuminate\Support\Facades\DB::class,
            'Eloquent' => Illuminate\Database\Eloquent\Model::class,
            'Event' => Illuminate\Support\Facades\Event::class,
            'File' => Illuminate\Support\Facades\File::class,
            'Gate' => Illuminate\Support\Facades\Gate::class,
            'Hash' => Illuminate\Support\Facades\Hash::class,
            'Http' => Illuminate\Support\Facades\Http::class,
            'Js' => Illuminate\Support\Js::class,
            'Lang' => Illuminate\Support\Facades\Lang::class,
            'Log' => Illuminate\Support\Facades\Log::class,
            'Mail' => Illuminate\Support\Facades\Mail::class,
            'Notification' => Illuminate\Support\Facades\Notification::class,
            'Password' => Illuminate\Support\Facades\Password::class,
            'Queue' => Illuminate\Support\Facades\Queue::class,
            'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
            'Redirect' => Illuminate\Support\Facades\Redirect::class,
            // 'Redis' => Illuminate\Support\Facades\Redis::class,
            'Request' => Illuminate\Support\Facades\Request::class,
            'Response' => Illuminate\Support\Facades\Response::class,
            'Route' => Illuminate\Support\Facades\Route::class,
            'Schema' => Illuminate\Support\Facades\Schema::class,
            'Session' => Illuminate\Support\Facades\Session::class,
            'Storage' => Illuminate\Support\Facades\Storage::class,
            'Str' => Illuminate\Support\Str::class,
            'URL' => Illuminate\Support\Facades\URL::class,
            'Validator' => Illuminate\Support\Facades\Validator::class,
            'View' => Illuminate\Support\Facades\View::class,
    		
    
        ],
    
    ];
    

    When I run this command php artisan vendor:publish --provider="SEO\SeoServiceProvider"

    I have notification

    In ProviderRepository.php line 208:
    
      Class 'SEO\SeoServiceProvider' not found
    

    What is the problem? anyone can help me?

    Thank you

    opened by antnb 1
  • Undefined variable: model (View: \resources\v

    Undefined variable: model (View: \resources\v

    Undefined variable: model (View: \resources\views\post\createOrEdit\multiSteps\create.blade.php) In the: "\resources\views/post/createOrEdit/multiSteps/create.blade.php" file at line: 427

    I was get the error after add @seoForm($model) in post blade In my project I don't have form folder only single blade

    opened by careerhub-source 0
Owner
Tuhin Bepari
Software Developer with 8 years progressive experience in the design, development, testing of web based software application.
Tuhin Bepari
This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform. It helps to liven up your server with Tags!

General This is a plugin written in the PHP programming language and running on the PocketMine platform that works stably on the API 3.25.0 platform.

Thành Nhân 4 Oct 21, 2021
GeoLocation-Package - This package helps you to know the current language of the user, the country from which he is browsing, the currency of his country, and also whether he is using it vpn

GeoLocation in PHP (API) ?? ?? ?? This package helps you to know a lot of information about the current user by his ip address ?? ?? ?? This package h

Abdullah Karam 4 Dec 8, 2022
SEO Helper is a package that provides tools and helpers for SEO (Search Engine Optimization).

SEO Helper By ARCANEDEV© SEO Helper is a package that provides tools and helpers for SEO (Search Engine Optimization). Feel free to check out the rele

ARCANEDEV 301 Nov 25, 2022
Simple Arabic Laravel Dashboard , has basic settings and a nice layout . to make it easy for you to create fast dashboard

Simple Arabic Laravel Dashboard ✅ Auto Seo ✅ Optimized Notifications With Images ✅ Smart Alerts ✅ Auto Js Validations ✅ Front End Alert ✅ Nice Image V

Peter Tharwat 254 Dec 19, 2022
The Laravel magic you know, now applied to joins.

The Laravel magic you know, now applied to joins. Joins are very useful in a lot of ways. If you are here, you most likely know about and use them. El

Kirschbaum Development Group, LLC 1k Dec 30, 2022
Product admin and edit implementations for the WLTDO framework.

Woo Let The Devs Out | Product Admin Module To be used either as a standalone module or library, or as part of the WLTDO framework, this module intend

null 2 Nov 22, 2021
A convenient helper for using the laravel-seo package with Filament Admin and Forms

Combine the power of Laravel SEO and Filament PHP. This package is a convenient helper for using the laravel-seo package with Filament Admin and Forms

Ralph J. Smit 39 Dec 21, 2022
An open source Laravel Soundboard with Admin Panel CRUD (Create Read Update Delete) built on Laravel, Bootstrap, and Vue.js

Laravel Soundboard An open source Laravel Soundboard with Admin Panel CRUD (Create Read Update Delete) built on Laravel 5.8, Bootstrap 4, Vue.js, Boot

Jeremy Kenedy 24 Oct 28, 2022
Master Websockets Laravel

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Filimantaptius Gulo 1 Mar 8, 2022
Projeto Trainee da CODE Jr. do qual fui Scrum Master.

Trainee2021.2 MyCão Pet Shop Projeto Trainee, Code Jr, Grupo 2, 2021.2 Desenvolvedores: Gabriel Duque Igor Ernandes Isabelly Cristine João Pedro Banha

Maycon Douglas 4 Dec 19, 2021
This is an open source demo of administration panel for polymorphic relationship and SEO content

Laravel SEO admin This application demonstrates usage of polymorphic relationships described at (http://maxoffsky.com/code-blog/using-polymorphic-rela

Maksim Surguy 127 Oct 11, 2022
Fully customizable and tests supported Laravel admin dashboard for developers.

Laravel Admin dashboard Like Laravel Jetstream but built with Hotwire Turbo + additional perks. Tools used: tailwindcomponents/dashboard Hotwire Turbo

null 12 Nov 1, 2022
Free and open-source Laravel admin dashboard interface built with Livewire & Alpine.js based on Bootstrap 5

Volt Dashboard Laravel Free Frontend Web App for Laravel with Livewire & Alpine.js Never start a development project from scratch again. We've partner

Themesberg 200 Jan 4, 2023
The admin (Backend Dashboard) for Charcoal

Charcoal Admin Module The standard Charcoal Admin Control Panel (Backend Dashboard). How to install The preferred (and only supported) way of installi

Locomotive 11 Jul 5, 2022
Package for Laravel that gives artisan commands to setup and edit environment files.

Setup and work with .env files in Laravel from the command line NOTE: This doesn't work with Laravel 5 since .env files were changed. This is for Lara

Matt Brunt 6 Dec 17, 2022
If you are beginner in WordPress plugin development or if you want to develop your own store product plugin you use this plugin

hirwa-products-plugin If you are beginner in WordPress plugin development or if you want to develop your own store product plugin you use this plugin

NIYIBIZI HIRWA 1 Aug 23, 2022
Specify the tables that you don't want to drop during refreshing the database.

Custom Fresh Custom Fresh allows fine-grain control of migrations inside your Laravel project. You can choose which tables will not be dropped during

Mahmoud Mohamed Ramadan 7 Jul 25, 2022
A laravel package to handle sanitize process of model data to create/update model records.

Laravel Model UUID A simple package to sanitize model data to create/update table records. Installation Require the package using composer: composer r

null 66 Sep 19, 2022
HTML Meta Tags management package available for for Laravel 5.*

HTML Meta Tags management package available for Laravel 5/6/7/8 With this package you can manage header Meta Tags from Laravel controllers. If you wan

Lito 182 Dec 5, 2022