Today, we are going to learn How to create SEO friendly sluggable URL Laravel 9 Example. This tutorial will going to cover how to create SEO friendly slug URL in latest laravel 9 with example.
SEO friendly URLs are URLs that are designed to meet the needs of users and searchers. Specifically, URLs optimized for SEO tend to be short and keyword-rich. URLs are a minor ranking factor search engines use when determining a particular page or resource’s relevance to a search query. While they do give weight to the authority of the overall domain itself, keyword use in a URL can also act as a ranking factor.
Steps on How to create SEO friendly sluggable URL Laravel 9 Example:
- Step 1: Installing fresh new Laravel 9 Application
- Step 2: Installing eloquent-sluggable Package
- Step 3: Creating Database and Migration
- Step 4: Creating Model
- Step 5: Creating Route
- Step 6: Creating Controller
- Step 7: Creating View Blade File
- Step 8: Testing
- Step 9: Conclusion
Also Read: Restrict User Access from IP Address in Laravel 9 Tutorial
Step 1: Installing fresh new Laravel 9 Application
First step, We are going to install a fresh new laravel 9 application. To install a fresh laravel application run the following code in terminal.
composer create-project laravel/laravel seo-slug-app
cd seo-slug-app
Note: “seo-slug-app” is a laravel application name.

Step 2: Installing eloquent-sluggable Package
In next step, we are installing a package called cviebrock/eloquent-sluggable. To install a package run the following command in terminal.
composer require cviebrock/eloquent-sluggable
Now add service provider and alias. Open app/config.php and add the following provider:
'providers' => [
....
Cviebrock\EloquentSluggable\ServiceProvider::class,
]
.....
Optionally, publish the configuration file if you want to change any defaults:
php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider"

Step 3: Creating Database and Migration
Now, Its time to create a database for our application. Open phpmyadmin and create a new database with name “seo-slug-app” (you can name it anything you like!).

Once you created the database add the database details to .env file
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=seo-slug-app
DB_USERNAME=root
DB_PASSWORD=

Now, We are creating a Items migration file. To create a Items migration run the following command in terminal.
Also Read: Livewire Pagination Laravel 9 Example Tutorial
php artisan make:migration create_items_table
This will create a new items migration which can be found at database/migrations open the file and update with the following code.
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('slug');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop("items");
}
}

Then run the migration with the following code.
php artisan migrate

Step 4: Creating Model
Now we are going to create a Item model. To create a Item model run the following command in terminal.
php artisan make:model Item
You can find the Item model inside app/Models/. Open the file and update with the following code.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
class Item extends Model
{
use HasFactory;
use Sluggable;
public $fillable = ['title'];
/**
* Return the sluggable configuration array for this model.
*
* @return array
*/
public function sluggable(): array
{
return [
'slug' => [
'source' => 'title'
]
];
}
}

Also Read: Enum Model Attribute Casting in Laravel 9 Example
Step 5: Creating Route
Now, Its time to create a route for our application. Open route file from routes/web.php and add the following route into it.
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/items', [App\Http\Controllers\ItemController::class, 'index']);
Route::post('/item-create', [App\Http\Controllers\ItemController::class, 'create'])->name('item-create');

Step 6: Creating Controller
Its time to create a controller. To create a ItemController run the following command in terminal.
php artisan make:controller ItemController
This will create a ItemController file inside app/Http/Controllers. Open the file and update with the following code.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Item;
class ItemController extends Controller
{
/**
* Get the index name for the model.
*
* @return string
*/
public function index()
{
$items = Item::all();
return view('items',compact('items'));
}
/**
* Get the index name for the model.
*
* @return string
*/
public function create(Request $request)
{
$this->validate($request,['title'=>'required']);
$items = Item::create($request->all());
return back();
}
}
?>

Also Read: How to Store JSON in Database Laravel 9
Step 7: Creating View Blade File
At last step, We are creating a view blade file to display our list and creating of item page. Create a items.blade.php inside resources/views and enter the following code.
resources/views/items.blade.php
<!DOCTYPE html>
<html>
<head>
<title>How to create SEO friendly sluggable URL Laravel 9 Example - LaravelTuts.com</title>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<h2>How to create SEO friendly sluggable URL Laravel 9 Example - LaravelTuts.com</h2><br/>
<form method="POST" action="{{ route('item-create') }}" autocomplete="off">
@if(count($errors))
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.
<br/>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="row">
<div class="col-md-6">
<div class="form-group {{ $errors->has('title') ? 'has-error' : '' }}">
<input type="text" id="title" name="title" class="form-control" placeholder="Enter Title" value="{{ old('title') }}">
<span class="text-danger">{{ $errors->first('title') }}</span>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<button class="btn btn-success">Create New Item</button>
</div>
</div>
</div>
</form>
<div class="panel panel-primary">
<div class="panel-heading">Item management</div>
<div class="panel-body">
<table class="table table-bordered">
<thead>
<th>Id</th>
<th>Title</th>
<th>URL</th>
<th>Creation Date</th>
<th>Updated Date</th>
</thead>
<tbody>
@if($items->count())
@foreach($items as $key => $item)
<tr>
<td>{{ ++$key }}</td>
<td>{{ $item->title }}</td>
<td><a href="">{{ URL::to('/') . '/item/' . $item->slug }}</a></td>
<td>{{ $item->created_at }}</td>
<td>{{ $item->updated_at }}</td>
</tr>
@endforeach
@else
<tr>
<td colspan="4">There are no data.</td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
Step 8: Testing
That it’s! Now you can test the laravel application. To start the laravel 9 application server run the following command in terminal.
php artisan serve
and open the following URL in any web browser.
http://127.0.0.1:8000/items
Preview:

Step 9: Conclusion
Today, We had learn How to create SEO friendly sluggable URL Laravel 9 Example. Hope this tutorial helped you with learning Laravel 9. If you have any question you can ask us at comment section below. If you like the tutorial please subscribe our YouTube Channel and follow us on social network Facebook and Instagram.
Also Read: Create React JS CRUD using Vite in Laravel 9 Example
[…] Also Read: How to create SEO friendly sluggable URL Laravel 9 Example […]
[…] Also Read: How to create SEO friendly sluggable URL Laravel 9 Example […]