target=”_blank”は削除するべきか?脆弱性とSEOへの影響について

ここ数日、多くのASPから同じ内容のメールが届いています。

今後、広告コードから「target="_blank"」を削除するという内容です。

SEOにも関連するので、理由を探ってみました。

target="_blank"をなぜ使うのか

パソコンの場合、リンク先の記事を読み終わったらタブを閉じてしまいます。
この時、同じ画面で開いていると、遷移前のページを読むには、もう一度検索することになり、とても面倒です。
パソコンユーザー側からすると、新しいタブで開いた方が使い勝手がいいのです。

回遊率が上がるので、SEO的にもよさそうな気がするので、_blankを付けていました。

脆弱性

なんと、target="_blank"には深刻な脆弱性があるそうです。

それは別画面で開いたページから、元画面のページを操作できてしまうということです。

例えば、このサイト(https://affi-sapo.com/)から、新しいタブで別のサイトを開いたとします。

元のサイトを親サイトとします。

(新しいタブで開く)

開かれたサイトは小サイトです。

小サイトは、window.openerというオブジェクトで、親サイトを操作することができます。

小サイトが親サイトのURLを書き換えると…

window.opener.location="https://affi-sapo.com/"

window.opener.location="https://hogehoge.com/"

元のページが、改変された!

このように自由に操作できて、知らずにフィッシングサイトへの誘導されていた、などということも可能性があります。

こんなことができるのは専門的な技術が必要だとおもわれがちです。
実際は、Javascriptを少し勉強して、閉鎖されたサイトのドメインを取得すれば、簡単に悪意あるサイトを作成できてしまいます。

外部サイトにリンクを大量に貼っているまとめサイトなど、リンクを管理しきれていないサイトは、非常に危険な状態ですね。

脆弱性対策:rel="noopener"

WordPressは、target="_blank"属性を付与したaタグに自動でrel="noopener"が付加されます。

僕は最初、「ノーペナー」と読んでいて、

「ペナルティがない?なんだそれ?」

と思っていたのですが、違いました(苦笑

"no opener" つまり、新しく開いたタブでwindow.openerを使用できないようにする指示だったのです。
これさえつけておけば、脆弱性の問題を回避できます。

ブラウザが"noopener"をサポートしていれば、ですが…

"noopener"は、後から追加された属性のため、古いブラウザでは機能しません。
Can I use | rel="noopener"対応状況

Microsoft Edgeが怪しい状況です…

Googleはrel="noopener"推奨

SEOには触れていませんが、Googleはrel="noopener"を推奨しています。

サイトで rel="noopener" を使用して外部アンカーを開く| Tools for Web Developers

理由は脆弱性のほかに、新しく開いたページで重い処理をしていると、元のページがその影響を大きく受けてしまうからです。

サイトの読み込みや、動作が遅いなどの理由の一つに、target="_blank"があるかもしれないのです。

他ドメインのリンク先を新しいタブで開くときは、rel="noopener"が必須ですね。

スマホは新規タブが開かない

そもそもアンドロイド端末では、target="_blank"が効きません。

「target="new"」を使うとよいなどの情報がありましたが、スマホユーザーはブラウザの使い方がパソコンと違うので、あまり意味がないとか…

パソコンの場合、リンク先の記事を読み終わったらタブを閉じてしまいます。
元のページに戻ろうとしても、タブを閉じてしまっているので、戻れません。
だから新しいタブで開いた方が、僕は使いやすいと思っています。

ですがスマホユーザーは、戻るボタンを押すことに慣れているため、タブを閉じるというアクションをあまりしないようです。
僕はスマホ操作に慣れていないのでわからないのですが、新しいタブで開かれてしまうと、思ったようにページ移動ができなくて、イラっとすることがあるようです。

この話を聞く限り、自分のサイトがスマホユーザーメインなら、target="_blank"を積極的に削除すべきと感じます。

ASPも_blank削除の流れ

ASP(アフィリエイト・サービス・プロパイダ)も、広告リンクコードからtarget="_blank"を削除する流れのようです。

理由は上記の、脆弱性やブラウザのよって挙動が異なるというものと、正常に集計ができないケースがあるということのようです。

ブラウザ側で、target="_blank"の脆弱性対策として特殊な処理を行った結果、広告側のページで何らかの悪影響を及ぼしているかもしれないのです。

アフィリエイターにとって、これは致命的です。
成約があっても、把握できないとなると、努力が無駄になってしまいます。

怖いですね…

私も、今まで作成したサイトから、target="_blank"の削除作業を開始しようと思います。