2019年8月初旬頃から一部ブラウザやアプリにおいて「target=”_blank”が付加されたリンクが開けない」という問題が出てきました。
以下では、この問題をWordPressカスタマイズで解決する方法を紹介します。
目次
target=”_blank”リンクが何故開けないのか
そもそも、target=”_blank”属性のついたリンクが、何故開けないのかというと、おそらくセキュリティー問題を回避するためと思われます。
target=”_blank”属性がついていて、「新しいタブ(ウィンドウ)」で開かれるリンクは、悪用されると、悪意あるスクリプトコードが実行されてしまうという問題があります。
それを回避するには、target=”_blank”リンクに対してrel=”noopener”を付加する必要があります。
よりセキュリティを高めるのであれば、rel=”noopener noreferrer”も付加した方が良いでしょう。
そもそもtarget=”_blank”を使わなければ万事解決
target=”_blank”を利用すると、「noopener、noreferrerを付けないと…」とややこしいことになります。
それ以前に、target=”_blank”を使わなければ、セキュリティー問題は生じません。
ぶっちゃけ、ページ上の全てのリンクから「target=”_blank”」を取り除いてやれば、今回の「target=”_blank”問題」は起きません。
当然、セキュリティー問題も起きず、リファラーもしっかり取れる状態になります。
ということで以下では、「WordPressページのソースコード全てからtarget=”_blank”を取り除く方法」を紹介します。
target=”_blank”の是非については、詳しくは以下のページ等が参考になると思います。
target=”_blank”を取り除く方法
一応、以前紹介していた以下の方法で、WordPress本文中のtarget=”_blank”は取り除くことはできます(※以下の例はtarget属性自体を取り除く例)。
ただ、本文中のみtarget属性を取り除いただけでは、サイドバーや、その他カスタマイズの部分にtarget=”_blank”リンクがあると対応できません。
そこで、WordPressページ全体のソースコードからtarget=”_blank”を取り除くコードを書きました。
ページ全体からtarget=”_blank”を取り除く方法
以下のコードをテーマ(子テーマ)のfunctions.phpに貼り付ければ利用できます。
//最終HTML取得開始 add_action('get_header', function () { ob_start('remove_target_blank_call_back'); }, 9999); //最終HTML取得終了 add_action('shutdown',function () { if (ob_get_length()){ ob_end_flush(); } }); function remove_target_blank_call_back($html) { $html = str_replace(' target="_blank"', '', $html); // //以下は必要なものだけコメントを外してください // //シングルコーテーションのtarget=_blank // $html = str_replace(" target='_blank'", '', $html); // //noopener // $html = str_replace(' rel="noopener"', '', $html); // //noreferrer // $html = str_replace(' rel="noreferrer"', '', $html); // //noopener noreferrer // $html = str_replace(' rel="noopener"', '', $html); // //他にも必要な処理があれば、以下に置換処理を追加していってください return $html; }
rel=”noopener”やrel=”noopener noreferrer”なども取り除くには、コメントアウトしてある部分のコメントを外して有効化してください。
その他にも不要なコードがあれば置換処理を追加しても良いかと思います。
PHPカスタマイズ以外の対応方法
PHPをカスタマイズするのが怖い…。
なんて場合は、External Linksプラグインを利用することでも対応できます。
プラグインをインストールして、以下のようにtarget=”_blank”リンクに対してrel=”noopener”を付加してやることで、今回の問題に対処できます。
Cocoonテーマ以外でtarget=_blankリンクのnoopener問題に対処するには、External Linksプラグインを使うというのもアリかもhttps://t.co/ssY2DAYIdw
「外部リンク」メニューで「外部リンクを開く」が「それぞれ別の新しいウィンドウまたはタブ」になっている場合は「noopenerを追加」を有効にすればOK pic.twitter.com/8IyKkIUbAE— わいひら@寝ログ (@MrYhira) August 8, 2019
そもそも、今回のカスタマイズのように「target=”_blank”自体を使用しない」ということであれば、以下の設定でOKかと思います。
target=”_blank”(新しいタブ)で開く必要がない場合は、「外部リンクを開く」を「同じウィンドウ、タブ、フレーム」にするとOK。 pic.twitter.com/V7NlzUV0Lx
— わいひら@寝ログ (@MrYhira) 2019年8月8日
まとめ
今回は、「target=”_blank”リンクを開けなくなる」というブラウザやアプリは、一部ではありました。
しかし根本は、セキュリティー問題であることから、今後もtarget=”_blank”リンクを開けないブラウザ(アプリ)は増えるのではないかと思います。
リンクを開けないということは、コンバージョンページ(成約ページ等)に移動することもできないので、「アフィリエイト報酬が発生しない…」なんてこともあると思います。
今後、報酬を取りこぼさないためにも、今回の問題には早めに対処しておく必要があるかもしれません。
noreferrer”属性が付加される仕様にはなっています。ただ、本文以外の部位では、必ずしも挿入されるとは限らないので、今回のカスタマイズ方法を書きました。
https://netwriter.biz/target_blank
読んだらバリューコマースは改変NGだそうですよ。
以下のようにtarget=”_blank”リンクに対してrel=”noopener”を付加してやることで、今回の問題に対処できます。
この方法でrel=”noopener”を付加してしまったのですが、どうしたらいいですか?