web-dev-qa-db-ja.com

ロボットがページの特定の部分をクロールしないようにする

フォーラムのある小さなサイトを担当するウェブマスターとして、内部検索エンジンと外部検索(Googleを使用する場合など)の両方がユーザーの署名によって完全に汚染されている(ユーザーが長い間使用している)私のフォーラムでは署名が非常に理にかなっているため、これはフォーラムの経験の一部です。

だから、基本的に私は今のところ2つのオプションを見ています:

  1. 署名を画像としてレンダリングし、ユーザーが「署名画像」をクリックすると、実際の署名(署名内のリンクなど)を含むページに移動し、そのページは検索でクロール不可として設定されます。エンジンスパイダー)。これはいくらか帯域幅を消費し、いくつかの作業が必要になります(画像を生成するHTMLレンダラーなどが必要になるため)が、明らかにそれは問題を解決します(署名がフォント/カラースキームを尊重しないという小さな落とし穴があります)ユーザーは、しかし私のユーザーは、カスタムフォント/色/サイズなどを使用して、とにかく署名で非常に創造的であるため、それほど問題ではありません)。

  2. 署名を含むWebページのすべての部分をクロール不可としてマークする。

しかし、私は後について確信がありません:これはできることですか? Webページの特定の部分をクロール不可としてマークすることはできますか?

28
WebbyTheWebbor

スタックオーバーフローで googleのnoindexタグ に提供したのと同じ回答を次に示します。

Robots.txtによってブロックされているiframeにそれらの部分を配置することで、Googleがページの一部を表示しないようにすることができます。

robots.txt

Disallow: /iframes/

index.html

This text is crawlable, but now you'll see 
text that search engines can't see:
<iframe src="/iframes/hidden.html" width="100%" height=300 scrolling=no>

/iframes/hidden.html

Search engines cannot see this text.

Iframeを使用する代わりに、AJAXを使用して隠しファイルのコンテンツをロードできます。 jquery ajaxを使用してこれを行う例は次のとおりです。

his text is crawlable, but now you'll see 
text that search engines can't see:
<div id="hidden"></div>
<script>
    $.get(
        "/iframes/hidden.html",
        function(data){$('#hidden').html(data)},
    );
</script>
8

別の解決策は、スタイルをdisplay:noneに設定したスパンまたはdivでsigをラップし、Javascriptを使用してそれを取り除いて、Javascriptが有効なブラウザーでテキストが表示されるようにすることです。検索エンジンは、それが表示されないことを知っているので、インデックスに登録するべきではありません。

HTML、CSS、およびjavascriptのこのビットはそれを行う必要があります。

HTML:

<span class="sig">signature goes here</span>

CSS:

.sig {
display:none;
}

javascript:

<script type="text/javascript"> 
$(document).ready(function()
  {
      $(".sig").show();
  }
</script>

jquery ライブラリを含める必要があります。

7
paulmorriss

私は同様の問題を抱えていました。cssで解決しましたが、javascriptとjqueryでも解決できます。

1-「disallowed-for-crawlers」と呼ぶクラスを作成し、Googleボットに見せたくないすべてのものにそのクラスを配置するか、そのクラスのスパン内に配置します。

2-ページのメインCSSには次のようなものがあります

.disallowed-for-crawlers {
    display:none;
}

3- disallow.cssというCSSファイルを作成し、robots.txtに追加してクロールできないようにします。これにより、クローラーはそのファイルにアクセスせず、メインcssの後にページへの参照として追加します。

4- disallow.cssにコードを配置しました:

.disallowed-for-crawlers {
    display:block !important;
}

JavaScriptまたはCSSで遊ぶことができます。許可されないクラスとCSSクラスを利用しました。 :)それが誰かを助けることを願っています。

3
Rolando Retana

これを行う1つの方法は、プレーンテキストではなくテキストのイメージを使用することです。

Googleは最終的には画像からテキストを読み取るのに十分なほどスマートになる可能性があるため、完全に将来に対応できるとは限りませんが、少なくとも今からはしばらくは機能するはずです。

このアプローチには多くの欠点があります。人が視覚障害者であれば、それは悪いことです。コンテンツをデスクトップコンピューターではなくモバイルデバイスに適合させたい場合、それは悪いことです。 (等々)

しかし、それは現在(ある程度)動作する方法です。

2
James Foster

これは簡単。

ページを提供する前に、ボット、コンピューター、または電話のいずれであるかを知る必要があります。その後、それに応じてコンテンツを設定する必要があります。これは、今日の標準的な方法であり、一部のCMSの時代とコア機能です。

SEには、htaccessに配置できるユーザーエージェントに基づいてリダイレクトを行うための多くのソリューションがあります。これがフォーラムソフトウェアに適している場合は、同じDBから別のコードを実行して、Googleが必要とするものを手間やトリミングなしで提供できます。

または、「[USER AGENT == Googlebotの場合、署名を表示しない」場合」を実行するPHPコードに小さな行を挿入できます。

本当にそれができない場合は、ボットに提供するmod_proxyを取得し、それを使用して、ボットが見る必要のないphpコードが生成するものをすべて取り除きます。

技術的には、Googleは通常のサイト訪問者が見るものとは異なるページが検索エンジンに表示されることを承認していませんが、これまでは、BBCやブラウザ/ IP /訪問者固有のコンテンツを検索エンジン結果から提供する他のものを取得していません。また、ボットが「監禁」されているかどうかを確認する手段が限られています。

スクリプトでコンテンツをCSSで非表示にする代替ソリューションも、灰色の領域です。 2011年6月20日のウェブマスターツールガイドラインによると、これは良い考えではありません。

http://www.google.com/support/webmasters/bin/answer.py?answer=6635

それは石で鋳造されたタブレットではないかもしれませんが、Googleによって最新のものです。

コンテンツを隠すトリックは、javascriptを持たない少数の人々では機能しませんが、これは大きな懸念ではないかもしれませんが、ドキュメントの読み込みを待ってから署名を表示することは満足のいく視聴体験ではありませんページが読み込まれたと思うと、隠された署名が表示されるとジャンプし、コンテンツをページの下にプッシュします。このタイプのページ読み込みは、ローエンドのネットトップがある場合はいらいらする可能性がありますが、高速インターネット接続で高速開発者のマシンを使用している場合は目立たない場合があります。

1
ʍǝɥʇɐɯ

いいえ、ロボットがページの一部をクロールするのを防ぐ方法はありません。ページ全体または何もないです。

Googleの検索結果のスニペットは通常、ページ上のメタの説明から取得されます。したがって、メタ記述タグにそれを配置することで、Googleにページの特定の部分を表示させることができます。ユーザー生成コンテンツでは、適切なスニペットを取得することは困難ですが、スレッドの最初の投稿を取得することはおそらく機能します。

私が考えることができる唯一の他の方法は、Javascriptを使用することです。 paulmorrissのようなものがmayを示唆しましたが、HTML内にある場合でも検索エンジンはコンテンツのインデックスを作成すると思います。 HTMLから削除し、Javascript文字列に保存してから、ページの読み込み時に追加し直すことができます。ただし、これは少し複雑になります。

最後に、覚えておくべきことが1つあります。Googleがスニペットにユーザーの署名を表示している場合、それがユーザーのクエリに最も関連する部分であると判断しました。

0
DisgruntledGoat

If部分のキーを提供するcaptchaにつながる「else」を使用して、ページをPHP ifに配置できます。

ユーザー資格情報がページで一致しない場合、空白ページが表示されるか、ログインページに送信されるため、あまり気にしません。

<?php
session_start();

if(empty($_SESSION['captcha']) or $_SESSION['captcha'] != $key){
    header("Location: captcha.php");
}

if(!empty($_SESSION['captcha']) and $_SESSION['captcha'] == $key){

"the page"

}
?>

$keyは、セッションの値を追加するだけでは不十分であるため、現在の日のハッシュまたは変更されるものでなければなりません。

キャプチャのサンプルを追加したい場合は、コメントを書いてください。

0
Alfons Marklén