主に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を指定するとアフィリエイトリンクに影響が出るため適用は自己判断で
以上です。
コメント
medicament kamagra en ligne buy
livraison le lendemain kamagra
cheap enclomiphene uk delivery
compare generic enclomiphene prices
ordering androxal uk pharmacy
online order androxal canada internet
buy flexeril cyclobenzaprine generic drug
purchase flexeril cyclobenzaprine cheap canadian pharmacy
online order gabapentin price australia
purchase gabapentin generic in us
purchase fildena generic now
discount fildena cheap online in the uk
how to order itraconazole usa buy online
discount itraconazole buy for cheap
order staxyn generic information
cheap staxyn price dubai
discount avodart no prescription online
how to buy avodart generic avodart
how to order rifaximin uk meds
cheapest canada rifaximin mail order
buying xifaxan generic discount
buy xifaxan cheap info
kamagra v mexiku bez lékařského předpisu
kamagra v kanadě