SEO friendly URL in PHP
Filed under PHP
When I started implementing mod_rewrite in websites I had a problem in PHP as how to make a SEO friendly URL. All tutorials were geared towards how to implement mod_rewrite, about modifying .htaccess files, but none treated how to make the urls friendly with dynamic content. For example I have a news section which are pulled from the database, but how can I make the URL friendly with the title.
For example, my problem was to convert titles like “Barca rejects FIFA statement on Olympics row” into “barca-rejects-fifa-statement-on-olympics-row.html”. The trick has to work also with french titles (I’am sure my friends at Nexen will appreciate ;-)) like “Guantanamo: le chauffeur de Ben Laden plaide non coupable à l’ouverture de son procès” into “guantanamo-le-chauffeur-de-ben-laden-plaide-non-coupable-a-l-ouverture-de-son-proces.html”, removing all french accentuated characters.
Hopefully I came across this function which I think might help you too :
function friendlyURL($string){
$string = preg_replace("`\[.*\]`U","",$string);
$string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
$string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
return strtolower(trim($string, '-'));
}
Use :
$myFriendlyURL = friendlyURL("Barca rejects FIFA statement on Olympics row");
echo $myFriendlyURL; // will echo barca-rejects-fifa-statement-on-olympics-row
You just have to concatenate anything you want with the string afterwards. For french users, make sure your string is encoded in UTF-8 else it won’t work.
If you’re using the Smarty templating engine I made a little modifier which you can download. Extract the zip file in your Smarty/libs/plugins/ folder and to use it in your templates :
{"Barca rejects FIFA statement on Olympics row" | friendlyURL}
Or if your string is in a variable :
{$yourString | friendlyURL}
Jul23









July 25, 2008 at 12:22 pm
this is my function for friendly Romanian URLS:
public function setId( $id, $nume )
{
$nume = strToLower( $nume );
$nume = str_replace( array( ” “, “ş”, “Ş”, “Ţ”, “ţ”, “ă”, “î”, “â” ),
array( “-”, “s”, “s”, “t”, “t”, “a”, “i”, “a” ),
$nume );
$nume = preg_replace( “/[^a-zA-Z0-9\-]/”, “-”, $nume );
$nume = urlEncode( $nume );
$url = $id . “-” . $nume . ‘.html’;
return $url;
}
July 25, 2008 at 12:36 pm
thanks for the tip Dumitru ;-)
July 29, 2008 at 3:51 am
Thx for the function.
What is your experience the easiest way to implement reading of seo friendly urls? (e.g. mod_rewrite)
July 29, 2008 at 9:44 am
The easiest way to implement it is to use htaccess files. Create one and simply put these :
RewriteEngine on
RewriteRule ^my-friendly-url.html$ myphppage.php?id=2
July 29, 2008 at 4:24 pm
Do you know if it possible to build the .htaccess file automatically?
It is a bit tedious to update the file with a new RewriteRule, every time a new page is added.
July 29, 2008 at 6:36 pm
materix,
Maybe you’re talking about RewriteMap.
Check out this link :
http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html
October 10, 2008 at 8:45 pm
Well I have been using symfony for a while, I have seen the routing engine built is very for building SEO friendly url without knowledge of mod_rewrite or any other technique…
October 17, 2008 at 7:16 pm
To say the least, mods in the .htaccess for rewriting purposes are ineffective with a site that has products, categories, articles etc.
If you need 100% static URLs you need to utilize database tables of such entities. Checkout how the SEO-G module performs that. (You could check my site where it is deployed)
As of the different languages yes you do need a simple filtering method to modify the characters. But if you have such an SEO module in place, this can be done when a new product, article etc is created or edit the url afterwards.
February 10, 2009 at 8:56 pm
[...] If you are interested on how to do it, check apache mod-rewrite or you can read more about how to do “Friendly URLS with PHP” at “The html blog“ [...]
April 2, 2009 at 5:38 am
Hi, this is just what I am after, the only trouble is I don’t have a clue as to ho to use it.Can you show it in relation to the header and body tags? and a link as well … thanks
April 2, 2009 at 9:37 am
@thewackonerd
You can use the function like this :
$myFriendlyURL = friendlyURL(“Barca rejects FIFA statement on Olympics row”);
echo $myFriendlyURL; // will echo barca-rejects-fifa-statement-on-olympics-row
In fact you must write your rewriting rules separately.
Let me know if it’s OK,
April 3, 2009 at 3:45 am
Hi Asvin, as usual I typed before engaging brain, I have it all working and it is exactly what I wanted / needed for my sites, thanks again for the code.
April 3, 2009 at 11:38 am
NP thewack ;-)
May 19, 2009 at 10:30 am
[...] string based on your topic, or in my case, the name of the individual, you need to create a string substitution function, like [...]
July 30, 2009 at 10:22 pm
Thanks for this plugin!
Very useful as I use .htaccess to modify urls, although I needed a a specific PHP script to rewrite the title of urls added by my CMS.
This does the job perfectly.
Thanks again!!
August 5, 2009 at 9:16 am
How do u use “barca-rejects-fifa-statement-on-olympics-row.html” to find the corresponding post in my database ?
- Perhaps convert “barca-rejects-fifa-statement-on-olympics-row.html” back to Barca rejects FIFA statement on Olympics row” and search for this title in my database ?!?
August 6, 2009 at 6:45 pm
[...] http://htmlblog.net/seo-friendly-url-in-php/ [...]
August 23, 2009 at 8:22 pm
[...] the title through a function. As the one I use is a at work I shamelessly used the one from the html blog. Here’s the PHP to generate our links page (note, I used a simple loop to output the links for [...]
August 28, 2009 at 5:20 am
Thank you very much !!! i changed a little bit for my need with some foraign characters
but your idea was perfect for me !!!
$string = preg_replace(“`\[.*\]`U”,”",$string);
$string = preg_replace(array(“`Ç`i”,”`ç`i”,”`Ö`i”,”`ö`i”,”`Ä`i”,”`ä`i”,”`Ü`i”,”`ü`i”,”`Ç`i”,”`ç`i”,”`İ`i”,”`ı`i”,”`Ş`i”,”`ş`i”,”`Ğ`i”,”`ğ`i”),array(“c”,”c”,”o”,”o”,”a”,”a”,”u”,”u”,”c”,”c”,”i”,”i”,”s”,”s”,”g”,”g”),$string);
$string = preg_replace(‘`&(amp;)?#?[a-z0-9]+;`i’,'_’,$string);
$string = htmlentities($string, ENT_COMPAT, ‘utf-8′);
$string = preg_replace( “`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i”,”\\1″, $string );
$string = preg_replace( array(“`[^a-z0-9]`i”,”`[-]+`”) , “_”, $string);
return strtolower(trim($string, ‘_’));
August 30, 2009 at 10:31 pm
Hi,
Nice article. I shamelessly used your neat little function in my seo url article – http://www.web-design-talk.co.uk/116/seo-friendly-urls-with-mod-rewrite/ :)
Thanks
September 21, 2009 at 6:51 pm
Can you tell what I need to do to make seo friendly urls for my site http://www.ipl-schedule.com . I created site by paying 300$ but I have no idea about php.
October 9, 2009 at 6:52 pm
Asvin,
Many thanks for this code! Works wonderfully… just what I’m looking for!
October 30, 2009 at 2:31 am
Hi Asvin,
Is this used for displaying only ?
I have tried it but how do I convert it back to it’s orignal format so that I can click on the link ?
Thanks,
Ron
December 23, 2009 at 5:02 pm
Hey, thanks for this function, i have used it and its really nice.
Happy New Year for all!
-HR-
January 13, 2010 at 9:30 pm
@Hitesh
go to http://www.freelancereference.com and hire a programmer (at affortable rates) to do it for you because its not that easy
February 7, 2010 at 2:08 pm
how can I reverse this function?
February 17, 2010 at 7:59 am
Thank you for giving valuable information, but i need seo urls like facebook, i mean urls with dots.
http://www.facebook.com/anil.kumar.panigrahi
like that, can you suggest me.
thank you.
March 10, 2010 at 3:24 am
can you ether email me or supply a url where I can find the smarty plug-in that you ref to in your post.
March 17, 2010 at 9:21 am
thanks for the fix!
April 8, 2010 at 4:18 am
[...] feature uses a custom PHP function on a blog by asvin to create the URL. Let’s have a look at this [...]
May 22, 2010 at 3:36 pm
Good article, it’s help me. Let me know Is it working same as Yahoo and MSN search engine?
August 16, 2010 at 9:34 am
SEO friendly URL in PHP post for thanx.
October 27, 2010 at 1:59 am
this is one of those “must know” tutorials. seo becomes more important to clients every day. you must let search engines know what data is on your site. great info. thanks