0

現時点では、このコードを自分のサイトの投票システムに使用しています(PHPファイルにありますが、クローラーがそれを認識しないようにJavaScriptとして統合しました)。

$rater.= '<script data-cfasync="true" type="text/javascript">';
for ($ncount = 1; $ncount <= $units; $ncount++) {
    if(!$voted) {
         $rater.='document.write("<p onClick=\"parent.location=\'\/db.php?j='.$ncount.'&q='.$id.'&t='.$ip.'&c='.$units.'\'\" style=\"cursor:pointer\" class=\"r'.$ncount.'-unit rater\"></p>");';
    }
}
$rater.='</script>';

それは完全に機能していますが、グーグルがこのファイルを見て、このファイルには302リダイレクトがあるので、リンクから抜け出す方法を作らなければなりません。db.php

しかし、同じ評価システムを使用しているサイトを見つけましたが、評価システムを「rel」属性で機能させる方法を見つけました。

誰かがそれをどのようにしたのか手がかりがありますか?

これは、すべてのphpコンテンツを含む元のファイルです。

<?php
/*
Page:           _drawrating.php
Created:        Aug 2006
Last Mod:       Mar 18 2007
The function that draws the rating bar.
--------------------------------------------------------- 
ryan masuga, masugadesign.com
ryan@masugadesign.com 
Licensed under a Creative Commons Attribution 3.0 License.
http://creativecommons.org/licenses/by/3.0/
See readme.txt for full credit details.
--------------------------------------------------------- */
function rating_bar($id,$units='',$static='') { 
global $LANG;
require('_config-rating.php'); // get the db connection info

//set some variables
$ip = $_SERVER['REMOTE_ADDR'];
if (!$units) {$units = 10;}
if (!$static) {$static = FALSE;}

// get votes, values, ips for the current rating bar
$query=mysql_query("SELECT total_votes, total_value, used_ips FROM `$rating_dbname`.$rating_tableName WHERE id='$id' ")or die(" Error: ".mysql_error());


// insert the id in the DB if it doesn't exist already
// see: http://www.masugadesign.com/the-lab/scripts/unobtrusive-ajax-star-rating-bar/#comment-121
if (mysql_num_rows($query) == 0) {
$sql = "INSERT INTO `$rating_dbname`.$rating_tableName (`id`,`total_votes`, `total_value`, `used_ips`) VALUES ('$id', '0', '0', '')";
$result = mysql_query($sql);
}

$numbers=mysql_fetch_assoc($query);


if ($numbers['total_votes'] < 1) {
    $count = 0;
} else {
    $count=$numbers['total_votes']; //how many votes total
}
$current_rating=$numbers['total_value']; //total number of rating added together and stored
$tense=($count==1) ? $LANG->l('vote') : $LANG->l('votes'); //plural form votes/vote

// determine whether the user has voted, so we know how to draw the ul/li
$voted=mysql_num_rows(mysql_query("SELECT used_ips FROM `$rating_dbname`.$rating_tableName WHERE used_ips LIKE '%".$ip."%' AND id='".$id."' ")); 

// now draw the rating bar
$rating_width = @number_format($current_rating/$count,2)*$rating_unitwidth;
$rating1 = @number_format($current_rating/$count,1);
$rating2 = @number_format($current_rating/$count,2);


if ($static == 'static') {

        $static_rater = array();
        $static_rater[] .= "\n".'<div class="ratingblock static">';
        $static_rater[] .= '<div id="unit_long'.$id.'">';
        $static_rater[] .= '<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
        $static_rater[] .= '<li class="current-rating" style="width:'.$rating_width.'px;">'.$rating2.'/'.$units.'</li>';
        $static_rater[] .= '</ul>';
//      $static_rater[] .= '<p class="static">('.$count.' '.$tense.') <em>This is \'static\'.</em></p>';
        $static_rater[] .= '</div>';
        $static_rater[] .= '</div>'."\n\n";

        return join("\n", $static_rater);


} else {

      $rater ='';
      $rater.='<div class="rating-text">'.$LANG->l('Rate this wallpaper:').' </div><div class="ratingblock nonstatic">';

      $rater.='<div id="unit_long'.$id.'">';
      $rater.='<ul id="unit_ul'.$id.'" class="unit-rating" style="width:'.$rating_unitwidth*$units.'px;">';
      $rater.='<li class="current-rating" style="width:'.$rating_width.'px;">'.$rating2.'/'.$units.'</li>';

      for ($ncount = 1; $ncount <= $units; $ncount++) { // loop from 1 to the number of units
           if(!$voted) { // if the user hasn't yet voted, draw the voting stars
              $rater.='<li><a href="'.WEB_PATH.'db.php?j='.$ncount.'&amp;q='.$id.'&amp;t='.$ip.'&amp;c='.$units.'" title="'.$ncount.' out of '.$units.'" class="r'.$ncount.'-unit rater" rel="nofollow">'.$ncount.'</a></li>';
           }
      }
      $ncount=0; // resets the count

      $rater.='</ul>';
      $rater.='<p';
      if($voted){ $rater.=' class="voted"'; }
      $rater.='>('.$count.' '.$tense.')';
      $rater.='</p>';
      $rater.='</div>';
      $rater.='</div>';
      return $rater;
 }
}
?>
4

1 に答える 1

0

リンクに属性を追加するrel="nofollow"と、Google (および他のクローラー) にリンクをたどらないように指示することになります。彼らがこれに従うという保証はありませんが、彼らのほとんどは従います。

別の方法として、robots.txt を使用することもできます (または両方を使用することもできます)。これには、インデックスを作成しない URL または URL マスクのリストを含めることができます。

スクリプトでクローラーを認識しようとすることもできますが、それは、データを最新の状態に保つリストを作成し、各要求に対して多くのチェックを行う必要があることを意味します. 最良の選択肢ではありません。

db.phpとにかく、ログインしているユーザーがいない場合は何も特別なことをしないようにすることで、これを回避します。すべてのリンクは匿名で保存されるだけなので、従わないクローラーが立ち寄るたびに大量の投票が保存されるのは望ましくありません。そのような投票システムは、その URL へのリクエストをスクリプト化するだけで何千もの賛成票をシミュレートできるため、簡単に混乱する可能性があります。

于 2012-10-26T12:37:54.147 に答える