エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応

      2017/03/09

コピーコンテンツ対策・直リンクへの対策

 

コピーコンテンツからの直リンクの問題点

 
このコンテンツは「コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ」の続きのコンテンツとして書いていますので、そもそもなぜしっかり対処しなくてはいけないか、ということについては「コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ」の方を読んでくださいね。
 
 
コピーコンテンツの中には、記事を全文コピーする上で、画像はコピーせずにリンクをそのまま元のサイトに直リンクを張っているサイトも存在します。
 
そもそも記事を全文コピーしていますので記事丸ごと著作権侵害なわけですが、画像への直リンクは、直リンクを設定している側のサイトへアクセスがあるたびに、画像を呼び出すためのサーバアクセスがあるためにサーバの資源を消費し、サーバ負荷が高まる恐れや、場合によっては契約のデータ転送量上限をオーバーさせてしまう危険性もあるわけです。
 
記事も他人のものを使っているうえに、画像を表示するためのサーバの資源も他人のものを使っているわけです。
 
 
そのようにいろいろな問題がある画像への直リンクですが、画像の直リンクを禁止したり、画像を差し替えたりする方法がありますので、その方法を解説します。
 
 
ちなみに、この記事を書くにあたって調査した結果、「直リンク」に関してはいろいろな意味が含まれていることが分かりました。
興味がある方は「直リンクとは何か?直リンクとディープリンクの違いと著作権問題」に詳しい記事を書きましたので、そちらを参考にしてください。
 
 

.htaccessで直リンクに対して処置を行う

 
このコンテンツの親記事である「コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ」では Googleへの通報の方法を解説しましたが、加えて、自分でも対処する方法として、直リンクの対策として .htaccessを使った対応についての技術的な解説を行います。
 
 
処理内容は直リンクに対して、下記の 2つの方法を紹介します。
 「画像を表示させない
 「画像を違うものに差し替える
 
また、条件指定としても下記の 2つの設定方法を紹介します。
 「拒否するサイトを指定する
 「許可するサイトを指定する
 
そのため、それぞれの組み合わせで 4パターンの解説になります。
 
 
.htaccessで直リンク対策・目次
指定したサイトからの直リンクを.htaccessで許可する
指定したサイトからの直リンクを.htaccessで禁止する
指定したサイト以外の直リンクを.htaccessで画像の差し替え
指定したサイトからの直リンクを.htaccessで画像の差し替え
各設定のメリットとデメリット
 
 
 

指定したサイトからの直リンクを.htaccessで許可する

 
許可するサイトを具体的に記述し、そこに記述されたサイト以外からの直リンクを禁止する設定です。
 

 
.htaccessを作成し、ドキュメントルートに置くことで指定されたサイト以外からの直リンクの画像を表示できないようにします。
WordPressの場合は、WordPressが .htaccessを使用していますので、そのファイルに追記すれば OKです。
 
 

指定したサイトからの直リンクを.htaccessで許可する方法の解説

 
上記の記述内容をそれぞれ説明をしていきます。
 
 

<Files ~ "\.(gif|png|jpg)$">

 
この .htaccessの設定の対象を指定します。
.htaccessは、基本的にフォルダ全体を対象にして処理しますが、この「Files」を指定することで、記述されたファイルのみを対象にすることを指定します。
この設定をしないと、画像のリンクだけではなく、通常の aタグによるリンクも拒否してしまうことになります。
 
「(gif|png|jpg)」で画像の拡張子を指定します。
ここでは指定したものが対象になりますので、例えば、pngは使っていないので余計なものは指定しないという考え方もできますし、PDFや Excelなども直リンクを禁止したい場合はそれも追加するといいでしょう。
「.gif」だけの場合は

となり、PDFや Excel、JPEGの拡張子のバリエーションを考慮した場合は

となります。
 
 
.htaccessをファイル単位で設定する内容は、「Basic認証をファイル単位・URL単位で設定する方法の解説」にも書いています。
こちらはタイトル通り、フォルダ単位ではなくファイル単位で Basic認証を設定する内容です。
 
 

SetEnvIf Referer "^http://blog\.s-giken\.net" OK

 
ここでは許可するサーバを指定します。
「Referer」の値に「^http://blog\.s-giken\.net」が含まれている場合は「Env」に「OK」を編集します、という意味です。
 
許可するサイトを増やす場合は、下記の様に行数を増やしていきます。
下記は、Google、Yahoo、MSNなどの検索エンジンを追加した想定です。
例えば Googleであれば「google.co.jp」「google.com」「search.google.co.jp」など多彩ですので、「google」と入っていれば許可する設定です。
ただ、この場合は、サブドメインに「google」と入れている場合は許可してしまいます。
 

 
 

SetEnvIf Referer "^$" OK

 
ここも許可する設定ですが、「”^$”」は「リファラーがない」場合を想定しています。
リファラーを返さないプロキシサーバなどを通ってきている場合や、ブラウザに画像の URLを入力して画像だけを表示させようとした場合などの対応が必要なために追加しています。
 

order deny,allow
deny from all
allow from env=OK

 
許可(allow)、拒否(deny)の順番を指定しています。
 

 
ここで、「deny from all」ですので、まずすべてのアクセスを拒否(deny)します。
そして、「order deny,allow」ですので、拒否(deny)の設定を評価し、続いて許可(allow)を評価します。
ここでは、「allow from env=OK」しかありませんので、「allow from env=OK」だけが有効になります。
 
「allow from env=OK」は、「env」が「OK」のもののみ許可する、という内容ですので、2行目、3行目で「SetEnvIf Referer」で「OK」が編集された URLを許可する、という内容になります。
 
 
日本語で説明するよりより分かりやすい説明として「超分かりやすい直リンク禁止の.htaccess解説。日本語じゃなくてPHPで説明」を書きましたので、PHPが分かる方は参考にしてみてください。
 
 


 
 

指定したサイトからの直リンクを.htaccessで禁止する

 
先の設定と逆に、拒否するサイトを具体的に記述し、そこに記述されたサイトからの直リンクを禁止する設定です。
 

 
.htaccessを作成し、ドキュメントルートに置くことで指定されたサイト以外からの直リンクの画像を表示できないようにします。
 
 

指定したサイトからの直リンクを.htaccessで禁止する方法の解説

 

SetEnvIf Referer "^http://xxx\.xxx\.xxx" NG

 
ここで拒否するサイトを指定していきます。
複数のサイトを設定する場合は、許可するときと同じように下記のように複数の URLを設定していきます。
 

 
 

order allow,deny
allow from all
deny from env=NG

 
設定方法はもう一つの設定と見比べてもらえばわかると思いますが、「order」の「allow」「deny」の順番と、「from all」で設定しているのが「allow」になっていること、最後の行で指定しているのが「deny」の条件である点が変わっています。
 
考え方は先の説明と同じで、「allow from all」ですべてを許可し、「deny from env=NG」で指定されたものだけを拒否する設定になっています。
ちなみに「NG」は、変数「env」に入っている値なだけですので、「SetEnvIf Referer」の行で指定した値と同じであれば「OK」のままでも何の問題もありません。
 
 
 

指定したサイト以外の直リンクを.htaccessで画像の差し替え

 
ここから説明する内容は、直リンクを禁止するのではなく、リンクに対して「Rewrite」によるリダイレクト(リライト)処理を行います。
表示する画像を「Rewrite」によるリダイレクト(リライト)により、指定した画像に差し替える処理を行いますが、それを行う条件として、ここでは指定したサイト以外のリンクを差し替えるという設定を行います。
 

 
 
.htaccessを作成し、ドキュメントルートに置くことで指定されたサイト以外からのリンクの画像を差し替えることができます。
 
 

指定したサイト以外の直リンクを.htaccessで画像の差し替え方法の解説

 

RewriteEngine On

 
「RewriteEngine」は、URLをリライト(リダイレクト)するための機能を「On/Off」にする設定です。
ここでは「RewriteEngine」を利用開始にあたって「On」を指定します。
 
 

RewriteBase /image/

 
画像が置いてあるフォルダを指定します。
WordPressの場合は「RewriteBase /wp-content/uploads/」になります。
また、WordPress以外で複数のフォルダに分かれている場合は、「RewriteBase /」の様にドキュメントルートを指定すれば OKです。
 
 

RewriteCond %{HTTP_REFERER} !^$

 
「RewriteCond」の各行で許可、不許可の条件を設定していきます。
ここでは、「%{HTTP_REFERER}(リファラー)」が「^$(行頭と行末に文字がない)」でないとき(!)をリダイレクトの条件として設定します。
一番最初の拒否設定と同じく、リファラーがない場合は許可しておく方がいいため、その設定を行います。
 
 

RewriteCond %{HTTP_REFERER} !^http://blog.s-giken.net/ [NC]

 
許可する(リダイレクトしない)サイトを指定します。
複数ある場合は、下記の様に指定します。
「[NC]」は、大文字小文字を区別しない、という設定です。
 

 
 

RewriteCond %{REQUEST_FILENAME} !/directlinkng\.gif$

 
リクエストされるファイル「%{REQUEST_FILENAME}」に、差し替える画像を指定します。
これを指定しないと、差し替えて表示する画像もリダイレクトしようとしてしまいますので、リダイレクトループしてしまい、エラーとなって差し替える画像が表示されません。
 
 

RewriteRule ^(.*)\.(gif|jpg|png)$ /directlinkng.gif [L]

 
「RewriteRule」でリダイレクト(リライト)する条件を指定します。
具体的には、差し替える画像を指定します。
 
^(.*)\.(gif|jpg|png)$」でリダイレクトする条件を指定します。具体的には対象とする元のファイルの拡張子を指定します。
 
差し替える画像の指定は、「/directlinkng.gif」とするとドキュメントルートの画像になります。
「directlinkng.gif」とすると「RewriteBase」で指定してあるフォルダの中にある画像が呼び出されます。
「[L]」は処理終了を意味します。
 
ちなみに、見た目の画像はリダイレクトされますが、HTMLのソースを表示しても元のままになっています。
 
また、リダイレクトする先の画像のファイル名は、他のファイル名とは明らかに違う長めのファイル名がおススメです。万に一つでも間違って付けてしまうようなファイル名は避けましょう。
 
 


 
 

指定したサイトからの直リンクを.htaccessで画像の差し替え

 
先の設定と逆に、拒否するサイトを具体的に記述し、そこに記述されたサイトからの直リンクの画像を差し替える設定です。
 

 
.htaccessを作成し、ドキュメントルートに置くことで指定されたサイト以外からの直リンクの画像を差し替えます。
 
 

指定したサイトからの直リンクを.htaccessで画像の差し替え方法の解説

 

RewriteCond %{HTTP_REFERER} ^http://xxx.xxxx.xxxxx/ [NC]

 
設定に関しては、こちらの方が非常にシンプルで、画像をリダイレクト(リライト)したいサイトを指定していくだけです。
ただし、一つ注意するのは行末の「[NC]」を「[NC,OR]」にする必要がある点です。
 
より詳細には、この「RewriteCond」の指定は、最後に「[OR]」を記述しないときはデフォルトの「[AND]」が設定されている状態になりますので、条件を満たすサイトがなくなる状態になります。
 

 
 


 
 

各設定のメリットとデメリット

 
この記事で解説したのは、下記の組み合わせです。
 
 指定したサイトを許可するか、拒否するか。
 単純にリンクを拒否するだけか、リダイレクトさせるか。
 
それぞれのメリット、デメリットを解説しますので、メリット・デメリットを理解した上で必要に応じて設定を選んでください。
 
 

指定したサイトを許可するか、拒否するか

 
この記事を読まれている方は、ググってこのサイトに来たと思いますのでよく分かると思いますが、「指定したサイトを拒否する」設定を解説しているサイトはほぼありません(指定したサイトを許可する設定の解説ばかりです)。
そのため、どちらがいいかを説明しているサイトもないワケですが、個人的には指定したサイトのみ拒否する方法がおススメです。
 
指定したサイトのみを許可するデメリット
・Yahooや Googleを始め、指定していない有益なサイトからのリンクも拒否してしまう
 
指定したサイトのみを拒否するデメリット
・直リンクのサイトを探して個別に指定する必要がある
 
 
上記は、それぞれデメリットのみの紹介ですが、メリットはその逆になります。
 
指定したサイトのみ許可しておけば、わざわざ直リンクをしているサイトを探す必要がありませんので楽ですが、逆に、Yahooや Googleといった有名な検索エンジンを始め、日々多様な有益なサービスが生まれてくる Webサービスにあって、それらも一様に拒否してしまいます。
そのため、許可する方のサイトを一つ一つ調べて許可するサイトを一つ一つ追加していく必要がありますが、そちらの方が現実的ではないように思います。
 
具体的には、許可の指定をしていない場合は、例えば、下記の「NAVERまとめ」のようなサービスにリンクを張ってもらう際に画像が表示されず、リンクを張ってもらえない場合も出てくるでしょう。
 http://matome.naver.jp/odai/2139201511417949101/2139936784834209603
 
ただ、この指定するサイトのみ許可する設定にしていた場合でも、Facebookや Google+などの OGP(Open Graph Protocol)として設定している画像は問題なく編集されますので、その点は安心です。
これは直リンクではないためです。
 
 
逆に、指定したサイトのみ拒否する設定では、基本的には許可するため、新しいサービスが出てきても影響を受けることはありません。
ただ、今度は直リンクを張っているコピーコンテンツサイトは自分で探す必要があります。
 
 
ですが、著作権を無視した直リンクのコピーコンテンツサイトは、有益な Webサービスが生まれてくるよりは数は少ないと思いますし、関連コンテンツとして書いた「コピーコンテンツ・直リンクの3つの対策Google通報などのまとめ」にも書きましたが、今後はコピーコンテンツ自体が存在しにくくなる環境が整ってきていますので、私はこちらの指定したサイトのみ拒否する方をおススメします。
(このエス技研ブログであってもコピーコンテンツが生まれているわけですので、もっとアクセスが多い方のサイトのコピーコンテンツはうんざりするほどあるのかもしれませんが...)
 
直リンクのサイトを探すには、WordPressの場合は検索エンジンで画像が入っているフォルダを「"http://blog.s-giken.net/wp-content/uploads"」の様に入力して検索すれば直リンクを張っているサイトが表示されます。
 
また、「"http://blog.s-giken.net/"」の部分だけで検索をすればサイトの URLを掲載しているサイトが見つかります。
(「""」ダブルクォーテーションで囲むことで文字列の固まりとして検索できます。)
 
その他、コピーコンテンツをチェックする「影武者」というツールもあるようです。
 https://kagemusya.biz-samurai.com/
 
その中から拒否したいサイトを選んで拒否リストに追加していくことで拒否をしていくことができます。
 
 
また、この狙い撃ちの設定をして、該当サイトをリロードすることで直リンクしている画像が見えなくなり、直リンク拒否の設定がその目で確認できますので、コピーコンテンツの対処をした!という実感が得られます(笑)。
 
精神的にも満足感を得られておススメです。
 
 

単純にリンクを拒否するだけか、画像を差し替えるか

 
リンクを拒否するか、画像を差し替えるかは、直リンクを拒否する目的によります。
 
拒否する目的が直リンクによりサーバへの負荷が高い場合は、リンク拒否の設定が必要です。
 
拒否する目的がコピーコンテンツへの制裁の意味を持つ場合は、画像の差し替えの設定の方がいいでしょう。
 
直リンクによるサーバの負荷を軽減する目的でリダイレクト(リライト)の設定をしても、同じサーバ内の画像を指定する場合は、結局サーバ内の画像にアクセスされるため、サーバの負荷軽減にはなりません。
 
これはどちらがいいかという問題ではありませんので、状況によって選択してください。
 
ちなみに、リダイレクト(リライト)は外部のサーバのファイルにリダイレクトすることもできますので、画像を無料ブログなんかにおいておいて、そちらにリダイレクトするといった方法もできますので、リダイレクト一択のような感じもしますね。
 
 

画像を差し替える場合の画像のバリエーション

 
画像を差し替える場合は、どのような画像に差し替えるかですが、いくつかのバリエーションが考えられます。
 
 

直リンク拒否であることを知らせる画像

 
一番やさしい警告方法でしょう。
 
20150218_web_01
 
 

「パクリサイト」と警告を出す画像

 
サイトを見た人がパクリコンテンツと理解してくれます。
 
20150218_web_02
 
 

巨大な画像/重たい画像

 
正常に画面が表示されなくなる画像や、なかなか画面が表示されないような重たい画像にリダイレクトする方法です。
そもそも意図しない画像が表示されている時点でコンテンツは読まれなくなるものですが、非常に大きなサイズの画像が表示されていれば続きのコンテンツは読まれなくなるでしょう。 
 
また、非常に重たい画像(10MBとか)を貼っておくことでページの表示が遅くなり、これまたユーザは途中で表示をあきらめるでしょう。
また、Googleのサイトの評価基準としてページの表示スピードも一つの指標に入っていますので、検索順位を落とす効果もあるでしょう。
 
ただ、これを自サーバ上に置いた画像で行うと、自サーバの負荷が急激に大きくなりますので避けましょう。
リダイレクトする画像は、無料のブログや誰でも投稿できる掲示板サイトなどに画像を置くなどの方法を検討した方がいいでしょう。
(直リンクを他のサービスへの直リンクで返すという道義的な問題を感じますが...)
 
ちなみに、外部サイトにリダイレクトする場合は、下記のような感じです。
4行目にあった「RewriteCond %{REQUEST_FILENAME} !/directlinkng\.gif$」の部分は不要になります。
 

 
 
この方法は、自サーバの画像の量が大きくなりすぎて、画像だけを別サーバに移して負荷を分散するといった方法にも使いますので、この方法で自サーバの負荷が大きくなることはありませんのでご安心ください。
 
 

AdSenseの規約違反になる画像

 
パクリコンテンツを作っている方のほとんどは、Adsenseによる広告収入をあてにしています。
そこに打撃を与える方法として、Adsenseの規約違反の一つである広告のクリックを促すメッセージです。
下記は Google AdSenseの説明ページですが、ここの「クリックの誘導」という部分での規約に違反するような画像に差し替える方法です。
 https://support.google.com/adsense/answer/48182?hl=ja
 
これによってそのサイトは対策をするまで広告配信が止められるため、コンテンツは削除せざるを得なくなります。
 
 

AdSenseの規約違反になる画像・アダルトコンテンツ

 
もう一つ、Adsense違反になる画像として、アダルトコンテンツがあります。
 https://support.google.com/adsense/answer/4410771?hl=ja
 
こちらも対策をするまで広告配信が止められるため、コンテンツを削除せざるを得なくなります。
 
 

著作権に厳しい対処をしているコンテンツの画像

 
直リンクの画像を、著作権に対して厳しい対処を取っている企業、法人などが管理する画像にするという方法です。
 
例えば、ジャニーズとか、ディズニーなどが著作権に対して厳しい対処をすることで知られているわけですが、それらの画像を使って画像を表示させたうえで、そういう企業に通報してみるというのもいいのではないか、と思います。
 
過去の判例から言うと、例えば、無料ブログサービスで著作権違反をしているブログを書いている記事があった場合、ブログサービスを提供している企業やプロバイダに対してそれらの記事の配信を止める義務と権利がありますので、そういったところからの圧力でサイトを消してもらえる可能性も考えられるのではないかと思います。
 
ただ、著作権違反の対処として、著作権違反を起こすような行為に対していいのか、という疑問は残ります。
もちろん、直リンクをしているサイトだけにしかその画像は出ないわけなので、著作権違反をしているのはそれを表示ししているサイトだけではあるわけですが。
 
 

画像を張っていない記事に関して

 
ほとんど画像を使用していないブログの場合や、画像を張っていない記事の場合は、画像の直リンクがないため、直リンク画像を差し替えることによる対処が行えない場合があります。
 
そんな場合の対処として、全ての記事に見えない画像を張っておく方法があります。
 
例えば、背景と同じ 1pxの画像を記事の文頭に差し込んでおきます。
この際、画像の width、heightは設定せず、画像のサイズに合わせてサイズが変わるようにしておきます。WordPressでは、自動的に width、heightの値が設定されますので、手動でその部分を削除してください。
実際にこの記事にもその画像を編集しています。ソースを表示して「zspacer.gif」を探してみてください。
 
 
そうすることで、差し替える前は、1pxの背景と同じ色の画像が差し込まれるだけですので、自分のサイトではそれに気付く人はほぼいないわけですが、コピーコンテンツとして取り込んでいるサイトには差し替えられた画像が処理されて表示されることになるワケです。
先ほどの width、heightを設定しなければ、差し替えた画像のサイズに合わせて画像が表示されますので、画像差し替えの対処が行えることになるわけです。

 - プログラミング・Web関連技術

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ

Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。

.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!

Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!

Gitで「fatal: Authentication failed for 'https://example.com/git_repositories/example.git/'」のエラーが出た場合の対処方法の一つ
Gitで「fatal: Authentication failed for ‘https://example.com/git_repositories/example.git/’」のエラーが出た場合の対処方法の一つ

Gitのリモートリポジトリにアクセスする際、Authentication failedのエラーが。しかし、ID、PASSが間違っているのではなく、リモートリポジトリのURLが間違っている場合もあるので再度確認を。

日本語は2バイト文字?3バイト文字?

日本語は2バイトという理解でしたが、UTF-8では事情が違います。その説明です。

.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点
.gitignoreで無視フォルダの中の特定のファイルを除外「!(否定文)」を使う場合の注意点

Gitで管理する対象、対象外のファイル、フォルダの指定は .gitignoreに記述する。その基本的な記述の方法に加え、無視対象にしたフォルダの中の特定のファイルを管理対象にする記述方法を解説。

mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器

Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。

PythonでMySQLへの接続ライブラリMySQL-pythonの簡単インストール方法

PythonはMySQLに接続するライブラリは別途インストールが必要。なのでMySQL-pythonライブラリのインストール方法とサンプルスクリプトで動作検証までを解説。

Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド

Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。

PythonでUTF-8など日本語(全角文字)を使う方法。コメントにも必要。

Pythonの標準では日本語(全角文字)を利用できないので、利用する際は文字コードを宣言する必要がある。「# coding: utf-8」の様に記述すればOK。

XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決

XSERVERにCakePHP3をインストールするときに問題となるのはサーバーパネルとSSH接続の時とで認識されるPHPのバージョンの違いがあるため。その解消方法を解説する。