外部リンクを別タブで開くようにするJavaScript(jQuery不要)

Web

主にWordPress記事内の外部リンクに対して、リンク先を別タブで開く設定をJavaScriptのみで行う方法を解説します。
jQueryなど特定のライブラリを必要としない、素のJavaScriptのみで実装するため、利用しているテーマやプラグインには依存しません。

利用背景

当ブログではMarkdownで本文を投稿し、出力時にPHPのパーサーを利用してHTMLに出力変換しています。
ただし、リンクに関してはHTMLを直書きしないとtarget属性を指定できないため、記事内の外部リンクをクリックするとそのまま画面遷移してしまう問題がありました。
当初利用を検討していたWordPressテーマ「Simplicity2」では、外部リンクを別タブで開く機能が備わっていませんでした。
そこでJavaScriptを用いて対策を行ったのが本記事の内容となります。
次の項で設置するコードを載せますが、WordPressのテーマによりコードの設置場所や方法が異なるため各自でご確認ください。

ちなみに現在利用しているWordPressテーマ「Coccon」では、この機能は標準で備わっています。

設置するJavaScriptコード

(function(window, document, location) {
  window.addEventListener('DOMContentLoaded', function() {
    var anchor = document.querySelectorAll('.entry-content a');
    for (var i = anchor.length; i--;) {
      if (location.hostname !== anchor[i].hostname) {
        anchor[i].target = '_blank';
        anchor[i].rel = 'nofollow noopener';
      }
    }
  });
})(this, this.document, this.location);

コード要所解説

window.addEventListener('DOMContentLoaded', function() {・・・});

でDOM要素読み込み完了時に実行される処理を指定します。
jQueryの$(function(){・・・});と同じです。

var anchor = document.querySelectorAll('.entry-content a');

でWordPress記事本文内のリンク要素を全て取得。
「.entry-content」の部分は使用するテーマにより変わる可能性もあるため、適宜調整してください。

if (location.hostname !== anchor[i].hostname) {・・・}

でホスト名を比較して、内部リンクか外部リンクかを判別します。if文内の処理、

anchor[i].target = '_blank';
anchor[i].rel = 'nofollow noopener';

でリンクを別タブで開くようにtarget属性に「_blank」を設定しています。
なお、rel属性に「noopener」を設定しているのはセキュリティ対策のためで、リンク先のJavaScriptからwindow.openerで画面操作されるのを防ぐためです。 「nofollow」はSEO対策で、リンク先へサイト評価を引き継がないための設定となります。

※サポート切れのIE11ではrel属性に「noreferrer」も指定しないとopener対策になりません
※ただしnoreferrerを指定するとアフィリエイトリンクに影響が出るため適用は自己判断で

以上です。

コメント

  1. medicament kamagra en ligne buy

    livraison le lendemain kamagra

  2. cheap enclomiphene uk delivery

    compare generic enclomiphene prices

  3. ordering androxal uk pharmacy

    online order androxal canada internet

  4. buy flexeril cyclobenzaprine generic drug

    purchase flexeril cyclobenzaprine cheap canadian pharmacy

  5. online order gabapentin price australia

    purchase gabapentin generic in us

  6. purchase fildena generic now

    discount fildena cheap online in the uk

  7. how to order itraconazole usa buy online

    discount itraconazole buy for cheap

  8. order staxyn generic information

    cheap staxyn price dubai

  9. discount avodart no prescription online

    how to buy avodart generic avodart

  10. how to order rifaximin uk meds

    cheapest canada rifaximin mail order

  11. buying xifaxan generic discount

    buy xifaxan cheap info

  12. kamagra v mexiku bez lékařského předpisu

    kamagra v kanadě

タイトルとURLをコピーしました