コメントスパムの対策として、コメントに含まれるアンカータグに rel="nofollow" という属性を追加する方法がありますが、今回はこの方法について説明します。
よくあるコメントスパムで、文章自体はあまり害のないようなふつうの内容だけど、さりげなく他サイトへのアンカーをかませるようなものがあります。
このアンカー入りのコメントスパムは、このコメントを眼にした人にアンカーをクリックしてオンラインカジノにきてもらうよりも、サーチエンジンのSEO対策をねらったものだと言えます。
Googleの検索結果で上位にランクされるのはサイトランクが高いサイトからになっています。このサイトのランクを決定する上で重要な基準となることのひとつが「たくさんの優良なサイトからリンクされているサイトほど、いいサイトである」という点なのです。
そこで自分のサイトをより検索結果で上位にくるようにするには、サイトのランクをあげればいいことになり、そのために、できるだけおおくのブログに自分のサイトのリンク入りのコメントを残すのです。そうすれば、「たくさんの優良なサイトからリンクされているサイトほど、いいサイトである」という基準に合うことになるからなのです。
Googleでは、こういった不正なランキング操作を防止するために提唱しているのが、アンカーにrel="nofollow"をつけることです。Googleは自動巡回ロボットでインターネットのサイトを調べる時に、rel="nofollow"のついたアンカータグはリンクとしてみなさないようにしています。だから、このrel="nofollow"をコメント中のアンカーにつけることで、コメントを利用して不正に自分のサイトランクをあげるようなことができなくなります。
もちろん、中にはちゃんとしたコメントをつけてくれる人もいるわけで、一概にアンカーにrel="nofollow"をつけてしまうことはあまりよろしくないという意見もありむずかしいところですが、それでもこの方法はコメントスパムを撃退する上では簡単に実行できる方法としては有効な手段のひとつです。
Drupalでこれをおこなうには、管理ページ>入力書式で、匿名ユーザの書式(下図ではFiltered HTML)を選択して、次に設定(Configure)メニュを選択します。
ここで、検索エンジンに対するリンク効果の抑止(Spam link deterrent)のチェックボックスにチェックを入れればOKです。以下はこのオプションの日本語の説明です(翻訳by Drupal.jp)
検索エンジンに対するリンク効果の抑止
すべてのリンクに rel="nofollow" を追加するかどうかを指定してください。 チェックを入れると、以下のようにアンカータグに rel="nofollow" が追加されます。
<a href="http://drupal.jp/" rel="nofollow">≡ Drupal Japan ≡</a>
これは、Googleをはじめとする多くの検索サイトで、検索結果の上位にリストアップされる条件の1つを抑止する働きがあり、主にスパムリンクの効果を減少させるために利用されます。登録ユーザが投稿したコンテンツ内の正当なリンクに対しても働くことになりますので、匿名ユーザにのみ使用できる入力書式に適用することが、おそらく最も効果的です。
コメントの書き込みを許可するサイトの場合、コメントスパムを完全に排除することは不可能ですが、それでもできる限りの対策をするのとしないのでは全然違うと思います。手軽にできる対策としておすすめします。
これ以外の対策として、コメントは投稿されてもすぐに掲載せずに管理者の承認を必要にするというものもあります。こうすることで、コメントスパムが短期間に大量に投稿されたとしても、それを他のビジターに見せないですみますのでサイト自体の印象をそこねることは避けられます。ただし、ちゃんとしたコメントをつける人にはちょっと失礼だし、スムーズでタイムリーなコミュニケーションを阻害してしまうという問題がありますのでこれも諸刃の剣です。
当サイトもコメントスパムを放置しすぎていたために一時期ひどいことになっていたので、その経験と反省をふまえてコメントスパム対策について色々と勉強しつつ、ここに記事として紹介していくことにしました。
問題点
最近気がついたのですが、Drupalの標準のHTMLフィルタに搭載されているrel="nofollow"をアンカーに付加する機能は、入力書式の設定しだいでは完全ではないのです。 詳しく説明すると、Filtered HTMLの入力書式で通常使われるHTMLフィルタとURLフィルタの2つがかかわってきます。URLフィルタは http://www.google.com のようなアンカータグを含まないURLをアンカー付きに変更する機能をもっています。
一方HTMLフィルタは許可されていないタグを除去したり<と>を>と<に変更したりする機能、それに有効にすればrel="nofollow"をアンカーに付けるといったことをします。
で、URLフィルタを先にして、HTMLフィルタを後にする場合にはHTMLフィルタの許可タグに<a>が含まれている場合にはうまくrel="nofollow"がアンカーに付くのですが、許可タグに<a>が含まれていない場合は、せっかくURLフィルタでつけたアンカーがはずされてURLフィルタの機能が無効化されてしまいます。
次に、HTMLフィルタを先にしてURLフィルタを後にするとURLフィルタでアンカーがついたリンクにはrel="nofollow"が付かない、ということになってしまいます。
従って、URLフィルタを先にして、かつHTMLフィルタで<a>タグを許可する、という設定にしたときに限りうまくいき、それ以外の場合にはうまくrel="nofollow"がつかなくなるのです。この点注意が必要です。
ケース1
URLフィルタを先にして、HTMLフィルタを後にする場合にはHTMLフィルタの許可タグに<a>が含まれている場合にはうまくrel="nofollow"がアンカーに付くのですが、許可タグに<a>が含まれていない場合は、せっかくURLフィルタでつけたアンカーがはずされてURLフィルタの機能が無効化されてしまいます。ケース2
次に、HTMLフィルタを先にしてURLフィルタを後にするとURLフィルタでアンカーがついたリンクにはrel="nofollow"が付かない、ということになってしまいます。従って、URLフィルタを先にして、かつHTMLフィルタで<a>タグを許可する、という設定にしたときに限りうまくいき、それ以外の場合にはうまくrel="nofollow"がつかなくなるのです。この点注意が必要です。

