WordPressが自動付加するrel="noopener noreferrer"を除去する方法

先日、アフィリエイトリンクのリファラ(参照元)が急に取得できなくなりました。

原因を探ってみたら、どうやらWordpress4.7.4で、とあるセキュリティー対策が実装されたからのようです。

WordPress 4.7.4から、セキュリティ対策のためにある機能が実装されました。 外部リンクにtarget=”_blank”が指定されていると、(つまり、「リンクを新しいタブで開く」が設定されていると)、自動でrel="noopener noreferrer"という属性も付加されるようになったのです。 これにより...

セキュリティー問題詳細に関してはこちら。

本サイト以下全ての `target=_blank` 付きのリンクに `rel="noopener noreferrer"` の付与を実施した。このプロパティの意味と、これが無い場合のフィッシング詐欺攻撃の可能性について解説する。...

どうやら、外部リンクに「target=”_blank”(リンクを新しいタブで開く)」が指定されていると、そのリンクに対して「rel=”noopener noreferrer”」属性が自動的に付加されるので、参照元が取得できなくなるようです。

ただ、リファラ(参照元)が取得できた方が何かと便利です。加えて、アフィリエイトサービスによっては、リファラ情報がないと成果が発生しないケースも考えられます(アフィリエイトURLにIDとかがなくリファラで判断するASPの場合)。

なので、一旦設定を元に戻して「自分のサイトにどのような影響が出るか?」を確かめるため、「rel=”noopener noreferrer”を無効にするコード」を書いたので紹介です。

スポンサーリンク
レクタングル(大)広告

rel=”noopener noreferrer”を無効にするコード

とりあえず、「rel=”noopener noreferrer”」属性の自動付加を解除したい場合は、以下のコードをfunctions.phpにコピペします。

以下では、それぞれのコードの役割について簡単に説明します。

ビジュアルエディターで「rel=”noopener noreferrer”」が自動付加されるのを解除

最初の関数は、ビジュアルエディターで属性が勝手に付加されるのを防ぎます。

例えば、ビジュアルエディターに以下のような、「target=”_blank”」属性のついた外部リンクを貼り付けととします。

すると、ビジュアルエディター側で自動的に以下のようにrel属性が付加されます。

こんな感じ。

ビジュアルエディターにより自動的にrel属性が付加

tinymce_allow_unsafe_link_target_demo関数では、上記のようなビジュアルエディターによる自動編集機能をオフにしています。

参考 Topic: Remove rel = “noopener noreferrer” in wordpress 4.7.4 « WordPress.org Forums

既にポストされた「rel=”noopener noreferrer”」を取り除く

tinymce_allow_unsafe_link_target_demo関数では、ビジュアルエディターの自動編集は無効にできます。

ただ既に「rel=”noopener noreferrer”」が付いたリンクをポストしてしまった場合、rel属性は、そのままになります。

ビジュアルエディター側で対処しただけではrel属性は付加されたまま

ですので本文中から「rel=”noopener noreferrer”」を取り除く以下のようなコードが必要になります。

これは、単に本文中から「rel=”noopener noreferrer”」を取り除いているだけです。

あと、nofollowがついていた場合は、「rel=”nofollow noopener noreferrer”」→「rel=”nofollow”」となるように変更しています。

僕の環境では特に必要なかったので、nofollow以外のrel属性値が入っている場合には、対処していません。nofollow以外にもrel属性値を使用している場合は、置換処理を追加する必要があります。

注意点

WordPress4.7.4で行われたセキュリティー対策である、「rel=”noopener noreferrer”」の自動付加は、当然必要だから追加された機能です。

なので、今回のカスタマイズを行うことにより、セキュリティー対策機能が一つオフになるわけですから、あまり好ましいことではありません。

ですので、以下のような用途でもない限り、あまりカスタマイズはおすすめしません。

  • リファラ(参照元)情報が必要なASPを利用しているのでnoopener noreferrerはオフにしたい
  • どうしてもアフィリエイトリンク等のリファラ情報は取得したい
  • noopener noreferrerで自分のサイトに影響が出ていないか一旦機能をオフにして確認したい

僕も、しばらく動作確認した後は、元に戻すかと思います。

まとめ

とりあえず、今回紹介したコードをコピペしただけで、「rel=”noopener noreferrer”」の自動付加機能が追加される前の状態には戻ると思います。

ただ、注意点でも書きましたが、セキュリティー機能が1つ強制的に無効にされていることになります。ですので、動作確認後、「必ずしも必要ない」と判断した場合は、コピペ部分を削除して元に戻すことをおすすめします。

当記事の機能はSimplicityに既に実装されているのでカスタマイズは不要です。

『WordPressが自動付加するrel="noopener noreferrer"を除去する方法』へのコメント

  1. 名前:ぽぽ 投稿日:2017/05/12(金) 11:05:39 ID:9dcd3f40d

    とても参考になる記事の更新ありがとうございます。

    ブログ村のインポイントがnoopener noreferrerで入らなくなっていたので、その対策を先月しました。(それ自体はブログ村でバナーを取り直した)

    しかし、いつの間にかnoopener noreferrerが入るようになっていたので、困っていましたが、ワードプレスそのもののセキュリティ対策だったとは・・・。

    アフィリエイトでも一部noreferrerだと困るところがあるので、functions.phpを修正してみましたが、本文からnoopener noreferrerが取り除かれません。

    私は賢威というテーマを使っているのですが、使ってるテーマによって、関数を追記する場所などの指定があったりするのでしょうか?
    お手数をかけて申し訳ないですが、もしご存知であれば教えてください。

    また、関数自体はfunctions.phpのどこに追記する事を想定して書かれているのでしょうか?

  2. わいひら 名前:わいひら 投稿日:2017/05/12(金) 21:47:50 ID:3258decbf

    私は賢威というテーマを使っているのですが、使ってるテーマによって、関数を追記する場所などの指定があったりするのでしょうか?

    functions.phpであれば場所の指定などはないです。
    僕は、賢威を使ったことがないので、詳しいことはわからないです。あと、該当ページのURLがあれば、ソースコードから何か分るかもしれません(※分からない可能性もあります)。

    また、関数自体はfunctions.phpのどこに追記する事を想定して書かれているのでしょうか?

    普通に、最終行に追記すればいけるとは思います。
    ただテーマファイルが手元にない以上、詳しいことはわ分からないので、可能ならば、テーマ開発元にお問い合わせいただければと思います。