How to create SEO friendly URL for Blog posts in PHP? | Part 2

In this tutorial, we will create SEO friendly URLs for the blog CMS using PHP and MYSQL database. We are elaborating "how to create a blog from beginning in PHP". Before this, we have created a simple blog in Blog Tutorial. In this tutorial, you will learn to create an SEO friendly URL by changing the same blog PHP code. In the present time , SEO is a very important technique, with the help of which blogs can be ranked in any search engine. The URL for SEO should also be SEO friendly. SEO friendly URLs for blogs can be easily created by PHP programming.SEO friendly URLs contain keywords. like


How to make SEO friendly URL?



In this way, you can see that title keywords are also available in the blog blog post URL.

One column has to be added to the MYSQL table to create SEO friendly URLs via PHP.

Add a database table column for SEO friendly URL –

Add a column in techno_blog table –

SEO friendly URL for blog post -MYSQL Slug Table

In the table above, you can see that the articleSlug column has been added to it, which will be used to save the slug of the blog article title to the articleSlug column and display it in the article URL. The table named techno_blog has been created in the previous tutorial. The articleSlug column has been added to create SEO friendly URLs via PHP and MYSQL. Some changes have to be made to create SEO friendly URLs.
Let's change the PHP code –


This PHP file is used to write blog posts. Until now, blog posts were being added with IDs. But now we will insert slug in a database table instead of articleId.In order to create SEO friendly URLs, blog posts title are converted to slugs and inserted into database table. To convert blog post title to slug we will also create a function that will convert blog title to slug.
Open the add-blog-article.php PHP file and change the code –


$stmt = $db->prepare('INSERT INTO techno_blog (articleTitle,articleDescrip,articleContent,articleDate) VALUES (:articleTitle, :articleDescrip, :articleContent, :articleDate)') ;

    ':articleTitle' => $articleTitle,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleDate' => date('Y-m-d H:i:s'),

Change the code above to –
 $articleSlug = slug($articleTitle);

    //insert into database
   $stmt = $db->prepare('INSERT INTO techno_blog (articleTitle,articleSlug,articleDescrip,articleContent,articleDate) VALUES (:articleTitle, :articleSlug, :articleDescrip, :articleContent, :articleDate)') ;

    ':articleTitle' => $articleTitle,
    ':articleSlug' => $articleSlug,//Blog article slug 
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleDate' => date('Y-m-d H:i:s')

Understand the code above. We added the articleSlug with MYSQL insert query .

Now, we will create the slug() function file in the includes folder outside the Admin folder.
The slug() function will be converted the blog post title to slug-like –

My title is –
How to make blog in PHP?
Slug is –

Let's create the functions.php file inside the includes folder –


function slug($text){ 

  // replace non letter or digits by -
  $text = preg_replace('~[^\\pL\d]+~u', '-', $text);

  // trim
  $text = trim($text, '-');

  // transliterate
  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);

  // lowercase
  $text = strtolower($text);

  // remove unwanted characters
  $text = preg_replace('~[^-\w]+~', '', $text);

  if (empty($text))
    return 'n-a';

  return $text;



In the PHP code above, we created a slug() function to convert the blog post title into a slug. In the code above, we used strtolower() function to convert the capital words into small later. We used another function to convert the title into SEO friendly.

Now, open the config file and include the function.php . Include the functions.php file after line 43 For eg - After the code line -
$user = new User($db); 




Every blog post can be edited. Here , we will edit the blog post slug manually. An admin can manage the slug manually. Now change the edit file code –


$stmt = $db->prepare('UPDATE techno_blog SET articleTitle = :articleTitle,  articleDescrip = :articleDescrip, articleContent = :articleContent WHERE articleId = :articleId') ;
    ':articleTitle' => $articleTitle,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleId' => $articleId,

Change the code above to –

 $stmt = $db->prepare('UPDATE techno_blog SET articleTitle = :articleTitle, articleSlug = :articleSlug, articleDescrip = :articleDescrip, articleContent = :articleContent WHERE articleId = :articleId') ;
    ':articleTitle' => $articleTitle,
    ':articleSlug' => $articleSlug,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleId' => $articleId

We added the postSlug with update query. The postSlug will be update manually because we can make manage short URL for better SEO. It will be helpful for SEO friendly URL. The blog title could be lengthily in size but the URL should not be lengthily.
Now , change the select query .
$stmt = $db->prepare('SELECT articleId,articleTitle, articleDescrip, articleContent FROM techno_blog WHERE articleId = :articleId') ; 

Change the code above to –

$stmt = $db->prepare('SELECT articleId, articleSlug,articleTitle, articleDescrip, articleContent FROM techno_blog WHERE articleId = :articleId') ; 

Here , we are selecting the articleSlug from the table. We will display the articleSlug into the text box .

Now , add a text box for articleSlug manual customization .

 <h2><label>Article Slug(Manual Customize)</label>
<input type='text' name='articleSlug' style="width:100%;height:40px" value='<?php echo $row['articleSlug'];?>'></h2>

Add the code above after the Article Title text box in the form.
You can edit the slug manually. The manual operation is important for SEO friendly URL.


This is the home page file of the blog in which the list of blog articles has been displayed. Along with the blog list, a button has also been created by clicking on the blog post to read it completely. But here blog posts have been displayed by IDs, which is not SEO friendly. To make a blog post SEO friendly, the blog post will have to be displayed by slug instead of the ID, only then the BLOG post URL becomes SEO friendly. For this, we have to make some changes in the index and show PHP .


 $stmt = $db->query('SELECT articleId, articleTitle,articleDescrip, articleDate FROM techno_blog ORDER BY articleId DESC');

Change the query above to –
$stmt = $db->query('SELECT articleId, articleTitle, articleSlug, articleDescrip, articleDate FROM techno_blog ORDER BY articleId DESC'); 

We fetched the blog articleSlug and will be used for the backend link for the title and read more button.
Now , change the title code –

echo '

<a href="show.php?id='.$row['articleId'].'">'.$row['articleTitle'].'</a>


Change the PHP code above to –
 echo '

<a href="'.$row['articleSlug'].'">'.$row['articleTitle'].'</a>

Now, change the button backend link –
echo '

<button class="readbtn"><a href="show.php?id='.$row['articleId'].'">Read More</a></button>


Change to –
 echo '

<button class="readbtn"><a href="'.$row['articleSlug'].'">Read More</a></button>


This is the backend link for read more button .
Now , we create the .htaccess file to make redirection . We are hiding the articleId and redirecting to articleSlug using .htaccess file .

Create a file and save as .htaccess


RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteRule ^(.*)$ show.php?id=$1 [QSA,L]
Blog is a folder name . You can remove the blog if you upload the all files on website root folder rather than blog folder –
Now, change the show.php file –


 $stmt = $db->prepare('SELECT articleId,articleDescrip,articleTitle, articleContent, articleDate FROM techno_blog WHERE articleId = :articleId');
$stmt->execute(array(':articleId' => $_GET['id']));

Change the code lines above to –

 $stmt = $db->prepare('SELECT articleId,articleDescrip, articleSlug ,articleTitle, articleContent, articleDate FROM techno_blog WHERE articleSlug = :articleSlug');
$stmt->execute(array(':articleSlug' => $_GET['id']));

We fetch the articleSlug using MYSQL select query and change the articleId to articleSlug.
Now, run the PHP scripts and you will get the SEO friendly URL with your BLOG posts.

Please Share

Recommended Posts:-

Previous Posts:-

Featured Item

Complete Blog CMS system in PHP with MYSQL database | PHP scripts


Modern blog CMS in PHP with MYSQL database | PHP blog scripts


amelia brown 12 Aug 2022

According to Link Architechts, SEO stands for search engine optimization that is useful for increasing website visibility organically in search results. All these efforts are important to grab more visitors for the website. It increases the chances for better conversions and leads.

@amelia brown replied by Techno Smarter 13 Aug 2022

We appreciate that you've shared great information about SEO.

Kenoly 17 May 2022

It is not redirecting.

@Kenoly replied by Vishal Rana 19 Jul 2022

Kindly remove the code line from .htaccess file

RewriteBase /blog/
@Kenoly replied by Techno Smarter 18 May 2022

Kindly use the htaccess file code and set your source path in line.

RewriteBase /blog/

Here, the blog is the folder name where all sources are available. You have to create show.php and click from the index page of the blog website.