Ранг должен быть вне цикла, или вы будете каждый раз сбрасывать его в 0
$rank = 0;
while($row = mysql_fetch_array($result)) {
$name = stripslashes($row['name']);
$description = stripslashes($row['description']);
$votes = stripslashes($row['votes']);
$id = ($row['id']);
$link = ($row['link']);
?>
<div class="site" id="site">
<u><center>
<strong><a href="<?php echo $link ?>" target="_blank"><?php echo $name; ?></a></strong></u>
</font></center>
<p>Rank:<?php echo $rank ; ?></p>
<p><b><?php echo $description; ?></b><br />
Votes:<b> <?php echo $votes; ?></b><br />
</p>
</div>
<center>
<?php
$rank++;
}
?>
Дополнительно для комментария:
Используйте для этого смещение, например
$result_per_page = 5; // this is the number of result you show per page
$offset = isset($_GET['id'])? (int)$_GET['id'] : 1;
$rank = $offset * $result_per_page;