Generate Search Engine Friendly URLs with PHP Functions
Join the DZone community and get the full member experience.
Join For FreeGenerate Search Engine Friendly URLs with PHP Functions
Generating search engine friendly (SEF) URLs can dramatically improve your search engine results. There's a big difference between "/post.php?id=2382" and "/great-php-functions/". Having search engine friendly URLs also gives the user an idea of what will be on the page they are clicking on if the link text isn't adequate.
I've created sister PHP functions to generate search engine friendly URLs for the CMS' I create for my customers. The idea is fairly simple. <!--break-->I take the user-created page title and feed it to a scrubbing function to:
- remove all punctuation
- switch the URL to lowercase
- remove spaces, replace with a given delimiter (in this case, a dash)
- remove duplicate words
- remove words that aren't helpful to SEO
The Code
/* takes the input, scrubs bad characters */
function generate_seo_link($input,$replace = '-',$remove_words = true,$words_array = array())
{
//make it lowercase, remove punctuation, remove multiple/leading/ending spaces
$return = trim(ereg_replace(' +',' ',preg_replace('/[^a-zA-Z0-9\s]/','',strtolower($input))));
//remove words, if not helpful to seo
//i like my defaults list in remove_words(), so I wont pass that array
if($remove_words) { $return = remove_words($return,$replace,$words_array); }
//convert the spaces to whatever the user wants
//usually a dash or underscore..
//...then return the value.
return str_replace(' ',$replace,$return);
}
/* takes an input, scrubs unnecessary words */
function remove_words($input,$replace,$words_array = array(),$unique_words = true)
{
//separate all words based on spaces
$input_array = explode(' ',$input);
//create the return array
$return = array();
//loops through words, remove bad words, keep good ones
foreach($input_array as $word)
{
//if it's a word we should add...
if(!in_array($word,$words_array) && ($unique_words ? !in_array($word,$return) : true))
{
$return[] = $word;
}
}
//return good words separated by dashes
return implode($replace,$return);
}
The Explanation
The function accepts four values:
- $input - string - will be SEO'd, in my case, the page title
- $replace - string - the word separator, in most cases a dash or underscore
- $remove_words - boolean - remove specific, non-helpful SEO words
- $words_array - array - an array of words that should be removed from every URL because they aren't helpful to SEO
Example Results
$bad_words = array('a','and','the','an','it','is','with','can','of','why','not');
echo generate_seo_link('Another day and a half of PHP meetings','-',true,$bad_words);
//displays :: another-day-half-php-meetings
echo generate_seo_link('CSS again? Why not just PHP?','-',true,$bad_words);
//displays :: css-again-just-php
echo generate_seo_link('A penny saved is a penny earned.','-',true,$bad_words);
//displays :: penny-saved-earned
Do yourself a favor — make your dynamic pages more search engine friendly with clean URLs!
Opinions expressed by DZone contributors are their own.
Trending
-
Getting Started With the YugabyteDB Managed REST API
-
Using OpenAI Embeddings Search With SingleStoreDB
-
Explainable AI: Making the Black Box Transparent
-
Reducing Network Latency and Improving Read Performance With CockroachDB and PolyScale.ai
Comments