We were talking about this today at work and I believe it is a combination of domain, title, url, text content, alt tags etc. Actually I just checked one of the sites and the single word search beats wikipedia and is number one due to it is in the domain and title.
Whether the url has such a great importance as it did it will have a score and possibly a weighting higher than the term appearing singularly in the body. Google tries to serve the best results so it deems that the weight higher it is a reduced space part( you can't write a page in a url or a domain name etc ).
Whether this is completeley proven the one singlular benefit is the urls are always kept singular so multiple variations of the same page are not referenced due to param misordering/ useless variation.
eg.
/index.php?mode=search&search_txt=mooo
/index.php?search_txt=mooo&mode=search&page=1
when the rewrite rule always has to be
/search/mooo/1/
By writing a class to handle all rewriting it also ends up reducing effort or at worst no impact on the effort of the proccess.
eg.
<?
/**
* Mock object of data accessing class
*/
class CategoryServer{
function getTitle( $category_id ){
static $titles = array();
if(array_key_exists( $category_id, $titles ) ){
$category_title = $titles[ $category_id ];
echo 'Got from cache :' . $category_title . '- id=' . $category_id . "\n";
return $category_title;
}
$category_title = '';
switch( $category_id ){
case 1 :
$category_title = 'bananas';
break;
case 2 :
$category_title ='apples';
break;
}
$titles[ $category_id ] = $category_title;
return $category_title;
}
}
final class SeoUrl{
public function __construct(){
}
public function createSearch( $search_text, $page=1 ){
return '/search/' . $search_text . '/' . $page . '/index.htm';
}
public function createHome(){
return '/';
}
public function createCategory( $category_id ){
if( !is_numeric( $category_id ) ){
throw new Exception("Invalid category id " . $category_id );
}
$CategoryServer = new CategoryServer();
$category_title = $CategoryServer->getTitle( $category_id );
return '/category/' . $category_id . '/' . $category_title . '/index.htm';
}
}
$SeoUrl = new SeoUrl();
echo "<pre>\n";
echo $SeoUrl->createHome() . "\n";
echo $SeoUrl->createSearch('muffins'). "\n";
echo $SeoUrl->createCategory(1). "\n";
echo $SeoUrl->createCategory(1). "\n";
echo $SeoUrl->createCategory(2). "\n";
echo "</pre>";
?>
Every time a method has been created to serve a url it makes life easier from that point on.
The benefits of building something that handles returning a title for a section( forced by this process and for a plus with memory cacheing ) it then makes it a doddle to use elsewhere( title, top of section, keywords etc, alt tags), whereever is deemed strategically beneficial. Either way not abstracting the generating of urls always seem easy at first but manually creating every time( remembering what params go in what order etc to keep singularity ) soon becomes tiresome and a waste of energy to me.
I wonder if there's some kind of mathematical analysis of google results we can whip up to statistically correlate a page's ranking on google to the appearance of a search term in its url. Surely this is doable? Seems pretty easy to use cURL in PHP to fetch the first 100 results for a given search term and do some analysis.
You could do that and run it as a cron job to keep track of changes over time. Also keep an eye on who moves up and down.