2013
10/31

コメントに含まれる「rel=”nofollow”」を消したいけどもう手遅れだった

WordPressの仕様で、コメントに含まれるリンクにはrel=”nofollow”が付加されます。
このブログはHTMLタグを無効にして表示させている(正確にはhtmlspecialcharsを通している)ので、rel=”nofollow”は付加して欲しくありません。そこでrel=”nofollow”を無効にする方法について調べました。

ADs

方法その1.comment_textへのフィルターフック

「WordPress コメント nofollow」などと検索すれば多く出てきますが、comment_text(コメント本文を画面に出力する前に適用される)に対するフィルターフックで「rel=”nofollow”」の部分を置換するという方法が王道と言えるでしょう。

以下をfunctions.phpに記述します。

しかしこの方法の欠点として、コメント内に「 rel=”nofollow」という記述があった場合は置換されてしまうという問題があります。SEOの話題を扱うようなブログではnofollowの話題は多く出そうですので、意図せず内容が置換されるような可能性も考えられます。

方法その2.「Nofollow Free」というプラグインを使う。

Nofollow Freeはrel=”nofollow”を外すプラグインです。nofollowを外す条件も細かく設定できるようで、コメント投稿者のユーザー登録の有無によって外す・外さないを分岐したりコメント回数が多い人だけnofollowを外したりといった使い方ができます。

機能は便利そうなのですが、アップデートが3年以上滞っていたりPHP5.3移行で非推奨となったeregiを使っていたりとちょっと気になる点もあります。

そもそもどのタイミングでrel=”nofollow”が付加されるのか

このrel=”nofollow”がどこでどのように追加されるのかが分かれば、もっと根本的な解決になりそうでしたので調べたところ、「pre_comment_content」というフィルターフックで「wp_rel_nofollow」という関数が実行されているようでした。

「pre_comment_content」は、コメントが投稿されデータベースに書き込まれる前に実行されるフックです。
「wp_rel_nofollow」は、aタグに対して「rel=”nofollow”」を追加する関数です。

ですのでこのフィルターフックをremoveすることが根本的な解決となります。
以下をfunctions.phpに追記します。

余談ですが、上記のpre_comment_contentのフックはwp-includes/default-filters.phpの180行目あたりの以下の様な記述で実行されます。

このdefault-filters.phpには投稿内容のエスケープなどデフォルトでフックされている処理がまとめられていますので、目を通してみるとテーマ作成に役立ちそうな関数も見つかります。

既にコメントが投稿されている場合

pre_comment_contentは「コメントが投稿されデータベースに書き込まれる前」に実行されます。
つまり、投稿済みのコメントに含まれるaタグについてはrel=”nofollow”が追記された状態で保存されています。

ですのでこのnofollowを抜くためには「方法その1」で提示したようなコメント出力時に置換するしか方法がありません。
WordPressで新規にWebサイトやブログをはじめる際には、真っ先にremove_filterしておいたほうがいいでしょう。
nofollowを追記することは簡単にできますので・・・。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。