WordPressページ全体からtarget=_blankを削除するカスタマイズ方法【リンクが開けない問題対策】

2019年8月初旬頃から一部ブラウザやアプリにおいて「target=”_blank”が付加されたリンクが開けない」という問題が出てきました。

以下では、この問題をWordPressカスタマイズで解決する方法を紹介します。

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

target=”_blank”リンクが何故開けないのか

そもそも、target=”_blank”属性のついたリンクが、何故開けないのかというと、おそらくセキュリティー問題を回避するためと思われます。

WordPressの投稿で別ウィンドウで開くリンクtarget="_blank"を作成すると、 LINK TEXT のようなrel="noopener"属性を持ったaタグが出力されます。 rel="noopener" の意味 1. target="_blank" のセキュリティ上の脆弱性の問題を避ける Without ...

target=”_blank”属性がついていて、「新しいタブ(ウィンドウ)」で開かれるリンクは、悪用されると、悪意あるスクリプトコードが実行されてしまうという問題があります。

それを回避するには、target=”_blank”リンクに対してrel=”noopener”を付加する必要があります。

よりセキュリティを高めるのであれば、rel=”noopener noreferrer”も付加した方が良いでしょう。

ただし、noreferrer値を追加してしまうと、リファラーを取得できず、ASP管理画面などでコンバージョンページ分析などができないという難点もあります。

そもそもtarget=”_blank”を使わなければ万事解決

target=”_blank”を利用すると、「noopener、noreferrerを付けないと…」とややこしいことになります。

それ以前に、target=”_blank”を使わなければ、セキュリティー問題は生じません。

ぶっちゃけ、ページ上の全てのリンクから「target=”_blank”」を取り除いてやれば、今回の「target=”_blank”問題」は起きません。

当然、セキュリティー問題も起きず、リファラーもしっかり取れる状態になります。

ということで以下では、「WordPressページのソースコード全てからtarget=”_blank”を取り除く方法」を紹介します。

target=”_blank”の是非については、詳しくは以下のページ等が参考になると思います。

リンクからtarget=”_blank”を取り除くことで、当然ながら同一タブ(ウィンドウ)内で新しいページが開かれることになります。

target=”_blank”を取り除く方法

一応、以前紹介していた以下の方法で、WordPress本文中のtarget=”_blank”は取り除くことはできます(※以下の例はtarget属性自体を取り除く例)。

先日、Google Chromeで「target="_blank"」の入ったAmazonのAリンクを開こうとしました。 すると、開いた瞬間...

ただ、本文中のみ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”なども取り除くには、コメントアウトしてある部分のコメントを外して有効化してください。

その他にも不要なコードがあれば置換処理を追加しても良いかと思います。

上記はあくまでサンプルコードです。上記コードを用いたことにより不具合が生じたとしても、責任は持てません。
このカスタマイズは、あくまでtarget=”_blank”がどこにあるのかわからない(もしくは手動の対処が面倒くさい)時用の対処方法です。target=”_blank”リンクのある場所が分かっている場合は、手動で削除した方が、サーバー処理的に負荷も少ないと思います(※そこまで負荷のある処理でもないですがないわけではないので)。
target=”_blank”という文字列をページに出力している場合は、それ自体も削除してしまいます。WEBプログラムコードを出力しているサイトでの使用はやめたほうが良いのかも。
functions.phpの編集に誤りがあると、エラーで画面が真っ白になる恐れがあります。編集を行う前に、functions.phpファイルをバックアップしておいて、戻せる体制を整えておいてください。

PHPカスタマイズ以外の対応方法

PHPをカスタマイズするのが怖い…。

なんて場合は、External Linksプラグインを利用することでも対応できます。

Internal links & external links manager: open in new window or tab, control nofollow, ugc, sponsored & noopener. SEO friendly.

プラグインをインストールして、以下のようにtarget=”_blank”リンクに対してrel=”noopener”を付加してやることで、今回の問題に対処できます。

そもそも、今回のカスタマイズのように「target=”_blank”自体を使用しない」ということであれば、以下の設定でOKかと思います。

まとめ

今回は、「target=”_blank”リンクを開けなくなる」というブラウザやアプリは、一部ではありました。

しかし根本は、セキュリティー問題であることから、今後もtarget=”_blank”リンクを開けないブラウザ(アプリ)は増えるのではないかと思います。

リンクを開けないということは、コンバージョンページ(成約ページ等)に移動することもできないので、「アフィリエイト報酬が発生しない…」なんてこともあると思います。

今後、報酬を取りこぼさないためにも、今回の問題には早めに対処しておく必要があるかもしれません。

WordPressデフォルト動作では、本文にtarget=”_blank”リンクrel=”noopener
noreferrer”属性が付加される仕様にはなっています。ただ、本文以外の部位では、必ずしも挿入されるとは限らないので、今回のカスタマイズ方法を書きました。

『WordPressページ全体からtarget=_blankを削除するカスタマイズ方法【リンクが開けない問題対策】』へのコメント

  1. 名前:imaru 投稿日:2019/10/07(月) 09:50:33 ID:ed53dfe74

    https://netwriter.biz/target_blank

    読んだらバリューコマースは改変NGだそうですよ。

    以下のようにtarget=”_blank”リンクに対してrel=”noopener”を付加してやることで、今回の問題に対処できます。

    この方法でrel=”noopener”を付加してしまったのですが、どうしたらいいですか?

  2. Avatar photo 名前:わいひら 投稿日:2019/10/08(火) 23:22:47 ID:d34b63c2e

    この方法でrel=”noopener”を付加してしまったのですが、どうしたらいいですか?

    プラグインの設定を元に戻すか、プラグインを使用しなければ元に戻るかと思います。

  3. Avatar photo 名前:わいひら 投稿日:2019/10/08(火) 23:27:26 ID:d34b63c2e

    バリューコマースにメールで改変OKかの問い合わせをした際の回答
    「target=”_blank”」の削除につきましては、ご認識の通り弊社は推奨しておりますが、それ以外の広告コードの改変は、削除の方法は問わず規約違反となりますため、公認することはできません。ということです。

    これが事実だとすれば、WordPressはデフォルトの動作で全てのtarget=”_blank”リンクに対してrel=”noopener noreferrer”を勝手につけてしまいますので、ほとんどのサイトが規約違反ということになりますね(target=”_blank”タグからを削除しない限り)。

  4. 名前:imaru 投稿日:2019/10/09(水) 05:57:45 ID:0937c4e9d

    なるほど 大変参考になりました。ありがとうございました。

  5. Avatar photo 名前:わいひら 投稿日:2019/10/09(水) 13:02:44 ID:235f2976c

    なので、バリューコマースもWordPressサイトのrel=”noopener noreferrer”は黙認ってことになってそうです(※推測)。
    推奨はしないけどといった感じで。
    でないと厳しく取り締まってしまうと、売上が減ったり、Twitterで何言われるか分からなそうですし。
    ただ、ASPの立場としては規約違反ということは、今のところ揺るがないのかもしませんが。
    A8は特に違反とは言っていないんですけどね^^;
    WordPress4.7.4アップデートに伴う影響について