target='_blank'なリンクが開かない

Languages: Japanese | English

Table of Contents

公開日:

最終更新日:

トラブルシューティング Disqus target_blank noopener noreferrer アフィリエイトリンク 外部リンク Chrome Safari Hugo

結論

経緯: target="_blank" のリンクが開かない

このブログでは、外部リンクに target="_blank" を付けることで、デフォルトで新しいタブを開くようにしています。

ところが、本番環境に記事を公開して閲覧していたところ、外部リンクが正しく開かない現象に遭遇しました。具体的には、Google Chrome ではアドレスバーに about:blank と表示され、新規タブで真っ白なページが開いてしまします。Safari では、アドレスバーに遷移元のURLが表示され、新規タブで真っ白なページが表示されます。

さらに奇妙なのは、この挙動が一定ではない点です。例えば「1回目は正しくリンク先が開くのに、2回目以降は真っ白なタブになってしまう」場合もあれば、「最初のクリックから真っ白なタブが開く」場合もあります。

さらにさらに、新規タブを開くを押下 or Command + クリックすると正常に開きます。

まとめると👇️

です。 なんだこれ…原因が知りたい…

原因

クリックイベントを補足しているJavaScriptを調べていたところ、Disqusの一部スクリプトが関係していることがわかりました。Disqus はウェブサイトやブログにコメントを追加できるサービスです。2007年頃の立ち上げから2013年頃に向けてバズった模様。それ移行も「Disqus導入してみた」系の記事は散見され、私も Hugo で作成している本ブログに導入しました。それが 2024年8月初旬頃です。

Disqus には、外部リンクを自動的にアフィリエイトリンクに差し替える Affiliate Links 機能があります。これにより収益を得ているようです。

Disqusで新しいサイトを作成するとデフォルトで有効化されています。

これが有効だと、記事内リンクのクリックをスクリプトで捕捉してアフィリエイトリンク先にリダイレクトします。この機能を無効化することでスクリプトが読み込まれなくなり、正常に新規タブで外部リンクを開けるようになりました。

おそらく新規タブを開いた後に非同期で取得したリンクにリダイレクトをさせる処理が何らかの理由で、うまくいってなかったのだと思います。

openerで新規タブのlocationをアフィリエイトリンクに変更しているが、nopener属性のせいでうまくいかない…というストーリーかとも思いましたが、それだとすべての target="_blank" なリンクが開けなくなる致命的なバグになるし、そもそも元タブから新規タブのURLを変更するのはlocationじゃない気がするし…

うーん、よくわからない

解決方法

追記 2025-09-14

今動作を確認したところ、

でも問題なく遷移できました

テスト用ページ

執筆時は確かに記事冒頭の動作だったのですが…

新規タブで開きたい <a>タグ の属性はどうすべきか

良い機会なので調べ直してみました。

よって

ということがわかりました。

まとめ

Disqusが埋め込むスクリプトの詳細な仕組みや、1回目は正しくリンク先が開くのに2回目以降は真っ白なタブになってしまう理由は不明ですが、もう noreferrer は不要であることがわかってよかったです。

というか、Disqusのコメント欄に広告が出るようになってしまったので消そうかな…

Share on: X Facebook Hatena