linkisとかいう微妙サービス経由でシェアされるのをカドが立たないように回避する方法

やわなべです。

この「やわなべ.net」は、ソーシャルにシェアされることがほとんどない「ぼっちブログ」なんですが、先週、ある方がTwitterで当ブログの記事をシェアしてくださいました。

ありがとうございます。あなたは素敵な方です。

…が、シェアされたリンクのURLを見ると、「ln.is/…」と、なんだか見慣れないドメインです。「bit.ly」とか「t.co」みたいな URL短縮サービス のたぐいだろうと思ったんですが、リンクをクリックすると、いきなりブラウザにこんなダイアログが。

なんか「twitterと連携させろ」と言ってきます。自分のサイト見ようとしてるのに連携もへったくれもないわ、と思ってダイアログを閉じたのですが…

…なんか、ヘンだよね

ブラウザに表示されたページはこちら。(※ 現在は対処済みのため表示されません)

一見、自分のブログにアクセスしたみたいな感じですが、右に私のブログではないサイドバーがかぶさってます

ブラウザのドメインも「http://linkis.com/ywnb.net/….」となってます。つまり「やわなべ.net」のサーバーではない。linkis.com という サービス業者が表示するページの一部に私のブログが取り込まれているような形のようです。

「すわ、パクられたか」と思ったんですが、htmlソースを開いて見てみると、

 <iframe id="source_site" data-short="Fs4Qa" src="https://ywnb.net/p/201411/924" border="0" frameborder="0" hspace="0" vspace="0" height="100%" marginheight="0" marginwidth="0" onload="LnProf.iframe()"></iframe>

みたいになっていて、要はiframeというタグで「やわなべ.net」のサーバーへアクセスした内容をはめ込んで表示しているようです。ちょうどテレビで外枠に台風情報を表示しながらメインの番組を放送しているような状態といえばいいでしょうか。HTMLソースを丸ごとコピペしてパクリコンテンツとして表示しているわけではないようですね。

ただ、このHTMLページのタイトルを見ると、、

【Xperia Z Ultra日記】スマホケースに満足しない時こそDIY力が試される | やわなべ.net – Linkis.com

と、元のブログタイトルの後ろに提供クレジットみたいなのがついてます。お前はスポンサーかよ。

冒頭のTwitterのシェア投稿を見た方がさらにシェアしたりすると、私のブログの元記事のURLではなく、linkis.com のURLがシェアされることになります。コピペじゃないので、埋め込み部分を通じて、毎回ウチのサーバにアクセスは来るんですが、その時のアクセス元はtwitterではなく「linkis.com」となるはず。うーん、微妙。

スポンサーリンク

linkisとはなにか

「このlinkisって何なのさ」と思って、linkis.com へアクセスすると、一応「まっとうっぽい」Webサービスのサイトが出てきます。

ただ、「about」のページを読むと、「我々は、シェアを便利にするパーソナライズサービスですよ」と言ってる中にちょっと気になる箇所が。

Linkis is bounded to your Twitter account, so signing up is easy with Twitter authentication system. Once you’re logged to Linkis, we will be able to access links from your Twitter feed and automatically replace them with Linkis URLs.

(適当訳: Linkisは Twitterアカウントと連携して使えます。Twitter認証を通じてLinkisにログインすると、ユーのTwitter投稿のURLをlinkisのURLに変換しちゃうよ〜

About – Linkis.com

いやこれはアウトでしょ。つまり最初に出てきたTwitterアプリとの連携を承諾すると、以降 TwitterにはっつけたURLが勝手にlinkis経由のものに差し替えされるようです。これはちと、お行儀がよろしくないと言わざるを得ません。

シェアされた方はおそらく好意でシェアされたんだと思いますし、直接ではないとはいえ、書いたものを読んでいただける機会を増やすことは、ウチみたいなアクセスのショボいブログ主としてはありがたいことです。ありがたいですが、この形式でのシェアが出回るのはやっぱり情報発信者として歓迎できない。

それに、もしこの linkis.comのページが Googleの検索インデックスに載ったらどうなるのか、という問題もあります。iframeなんでコピーサイト扱いにはならないでしょうけど、linkisのページの方が検索結果の上に表示される、なんてことになったらイヤですよね。実際グーグルで「site:linkis.com」で検索すると、

さっき見た「プレゼンテッド バイ linkis.com」なページ(中身は他人のサイト)がぞろぞろ出てきます。こうやってサービスサイトの価値を高めるのがlinkisのホントの狙いでしょうね。

というわけで、なんとか回避する方法がないか考えてみました。

linkis を回避する方法

まず考えたのは、

方法1. アクセス元が「linkis.com」の場合コンテンツを見せない

linkisを完全にスパムとみなす対応ですね。linkisサーバから呼び出された場合、ブログの内容を返さないとうスタンスです。同じようなやり方でリファラスパムからのアクセスなんかははじいてるんですが、そこまでやってしまっていいものかという思いもあります。そこで次に考えたのがこちら。

方法2. よそのサーバーから、iframeでHTMLの一部として呼び出された場合にページを表示しない

iframeを通じて自分のブログが「パーツとして」呼び出されたら、悪意あるアクセスと考えてコンテンツを見せないという対応です。これについては、こちらのサイトの記事を参考にやってみました。

(参考)iframe内からWebページが読み込まれるのを防止する X-Frame-Options HTTP レスポンスヘッダ – buzzword update

こうやってiframeで他人のコンテンツを自分のコンテンツに埋め込む手口をクリックジャッキングというんだそうな。勉強になるなぁ。

実際にやったのは、ywnb.netの「.htaccess」ファイルに下の1行を追加しただけ。(.htaccessって何?って話は割愛します。すんません)

Header always append X-Frame-Options SAMEORIGIN

サーバーのセキュリティによっては、この設定が有効にならない場合もあるようですが、私の使ってるエックスサーバーでは有効でした。

この状態で、さっきのURLを開くと…

はい、アクセスが拒否されてコンテンツの部分が表示されなくなりました。

ただ、これだとせっかくシェアしてくれた方や、そのシェアを見て来られた方にコンテンツをお見せすることができません。これはこれで悔しい。というわけで次に考えたのがこちら。

方法3. iframe経由で呼び出された場合に、親フレームごと元記事ページヘ飛ばしてしまう

上の.htaccessのオプションではアクセス拒否しかできないようでしたので、javascriptでやることにします。いろいろ試行錯誤したプロセスをすっとばして結論だけを書くと、wordpressテーマのフッター部分にこの1行加えてみました。(技術的に問題があれば教えてください)

<script>(function($){if(window!=parent){top.location.href=document.location.href;}})(jQuery);</script>

さっきの.htaccessのHeaderオプションを外し、もう一度さっきのURLをクリックすると、一旦 linkis.com のページが表示された後、javascriptが、「あ、iframeに入れられてる。よっしゃ、親フレームごとリダイレクトや!」と判断して、

元のページにリダイレクトされました。めでたしめでたし。
今、一番上のTwitterのURLをクリックすると、このリダイレクトの動きが実際にお楽しみいただけます。

ただ、これでもまだ問題はあって、このリダイレクトを経由すると、アクセスログに2回カウントされてしまうんですよ。Googleアナリティクスで言うと、「セッション」や「ユーザー」数には影響ないでしょうが、PV数は水増しになってしまうと思われます

まあ、今のところこのルートでのアクセスはほとんど無いと思うんで、アクセス解析で linkis 経由のアクセスが増えるようなら、別の対策を考えることにします。